开发环境
- 编译环境:Win10 1903 X64
- 开发工具:MinGW64-8.1.0 x86_64-posix-seh
- 额外工具:MSYS2 | CMAKE
- 所需源码:openssl-1.1.1d | mariadb-connector-c-2.3.7
- MINGW构建openssl-1.1.1需要在Unix环境下使用perl构建,这里选择MSYS2环境
- 先安装软件MSYS2,然后将MinGW64解压到MSYS2安装目录下的mingw64中
- 下载cmake解压到MSYS2安装目录里的mingw64/cmake中或者直接放到mingw64目录下
- 运行MSYS2目录下的mingw64.exe(不要用msys2.exe),后续操作全部在这个环境下执行
1 | # 先安装一下其他工具 |
静态编译ZLIB
1 | wget https://zlib.net/current/zlib-1.2.11.tar.gz |
静态编译OPENSSL
1 | wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz |
静态编译MariaDB驱动
1 | wget http://mirrors.nav.ro/mariadb//connector-c-2.3.7/mariadb-connector-c-2.3.7-src.tar.gz |
出现问题
MariaDB执行cmake时报错:CMAKE_MAKE_PROGRAM is not set。找不到make程序造成的,到mingw安装目录下将mingw32-make.exe重命名为make.exe
MinGW如何链接MSVC的.lib库:例如libx.lib和liby.lib可以使用gcc … -llibx -lliby来链接
Linking C shared library mariadb.dll 报错:undefined reference to XXX
1 | undefined reference to `__imp_WSASetLastError` # 添加-lws2_32到build.make文件gcc行 |
- 若链接其他程序时出现未定义:
undefined reference to
OPENSSL.....
,需要链接库:-lssl
undefined reference toCRYPTO......
,需要链接库:-lcrypto
undefined reference to__imp_WSA...
,需要链接库:-lws2_32
undefined reference to__imp_Cert..
,需要链接库:-lcrypt32
undefined reference toinflate.....
,需要链接库:-lz
静态编译程序程序
1 | // 注意32位GCC只能用32位的MySQL驱动,64位亦然,否则ld时会报错 |