(2019-02-21)
Poco错误 LNK1104 无法打开文件“libeay32.lib”
注:openssl 1.1.0开始由原先的libeay32.dll、ssleay32.dll变成了libcrypto-1_1.dll、libssl-1_1.dll,一些加密方式也发生了变化。参考2
一、 vs2017 x64下编译过程
参考1:https://blog.csdn.net/liang19890820/article/details/51658574
参考2:http://www.cnblogs.com/chinalantian/p/5819105.html
1 编译openssl
1.1 下载并安装ActivePerl
链接地址:http://www.activestate.com/activeperl/downloads
我的下载:ActivePerl-5.26.3.2603-MSWin32-x64-a95bce075.exe
双击进行安装
1.2 下载并安装Nasm
下载地址:http://www.nasm.us/
我的下载:nasm-2.14.02-installer-x64.exe
本人安装在D:\NASM,将D:\NASM添加进入用户环境变量PATH
1.3下载Openssl
下载地址:http://www.openssl.org/,或者从github上下载的稳定版本。
我的下载:openssl-1.0.2q
1.4编译Openssl
以管理员身份打开VS 2017的x64 本机工具命令提示,在VS 2017安装位置找。
打开到openssl解压目录:E:\Projects\Poco-Projects\openssl-1.0.2q
1.4.1 安装dmake
输入命令:ppm install dmake
1.4.2 配置编译openssl
输入命令:perl Configure VC-WIN64A no-asm --prefix=E:\Projects\Install\openssl-1.0.2q
查看目录下的Configure文件可知,如果编译静态库,则为:perl Configure VC-WIN64A no-shared --prefix=E:\Projects\Install\openssl-1.0.2q-static
,但poco使用静态库,编译失败。
问题:VC-WIN64A与VC-WIN64I区别是啥?
设置:ms\do_win64a
如果32位为ms\do_nasm
(不设置,会出现致命错误U1001:语法错误:非法字符'{'宏停止)
编译:nmake -f ms\ntdll.mak
测试:nmake -f ms\ntdll.mak test
(当nmake test进行测试openssl,发现好多功能,静态库,不支持)
安装:nmake -f ms\ntdll.mak install
如果是静态库:用ms\nt.mak
替换掉上面用到的ms\ntdll.mak
2 编译poco
需要调用openssl动态库,不管是编译poco动态库还是静态库。当nmake test进行测试openssl,发现好多功能,静态库,不支持。
下载poco:1.9.1版本:https://github.com/pocoproject/poco/tree/poco-1.9.1
设置环境变量OPENSSL_ROOT_DIR
为Openssl的安装目录E:\Projects\Install\openssl-1.0.2q
2.1 CMake设置
打开cmake,设置源目录:E:/Projects/Poco-Projects/poco-1.9.1-2019-02-21
,设置编译目录:E:/Projects/Build/poco-1.9.1-2019-02-21
,点击Configure进行配置。
配置编译器为:Visual Studio 15 2017
,配置平台x64
配置安装目录:CMAKE_INSTALL_PREFIX
为E:/Projects/Install/poco-1.9.1-2019-02-21
设置静态库:POCO_STATIC
为ON
,BUILD_SHARED_LIBS
设置OFF
(本人链接静态库失败,最终使用了动态库)
不使用C++11,C++14,设置DISABLE_CPP11
,DISABLE_CPP14
为ON
不使用ODBC:将ENABLE_DATA_ODBC
设置为OFF
不使用MONGODB:,将ENABLE_MONGODB
位置为OFF
二、 Window下编译过程(MinGW x64)
参考1:https://wiki.qt.io/Compiling_OpenSSL_with_MinGW
参考2:https://codeday.me/bug/20180110/117164.html
1. 下载安装:MSYS2
链接地址:http://www.msys2.org/ ,网站上也有安装说明。
本人下载:msys2-x86_64-20180531.exe
2. 初始化MSYS2
参考:https://wiki.qt.io/MSYS2
在菜单里打开:MSYS2 MSYS终端,输入命令进行更新。
pacman -Sy
pacman --needed -S bash pacman pacman-mirrors msys2-runtime
更新完后,重新打开终端,输入命令更新
pacman -Su
更新完后,重新打开终端,输入命令更新
pacman -S base-devel git mercurial cvs wget p7zip
pacman -S perl ruby python2 mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain
3. 编译openssl x64
打开终端,打开openssl文件夹:cd /e/Projects/MinGW/OpenSSL_1_1_1-dynamic/
配置: perl Configure mingw64 no-asm --prefix=/e/Projects/MinGW/Install/OpenSSL_1_1_1-dynamic
make depend
make
make test
make install