0 前言
本文是在Windows系统中用VS2005编译Openssl-1.1.0f,注意是VS2005而非VS2015。如果用VS2015编译,请阅读: 《VS2015编译Openssl-1.1.0f》 。因为项目需要在VS2005中搭建工程使用Openssl静态库,但通过之前用《VS2015编译Openssl-1.1.0f》中的方法编译成功静态库 ,在VS2015中在可以使用,但在VS2005中就会报错。原因是用VS2015编译的库,在VS2005中使用,这种混合式用法会不通过。但没关系,编译方法一样嘛,在VS2005里再重新编译一次就行了嘛。So,just do it。Howerver,errors come out。
经过不断摸索和Lucas前辈的指导,终于发现原因,找到解决方法,编译成功。故记录之,以备忘,同时,避免后来人踩坑。
1 VS2005编译win32 release版本
使用 VS2005 下的 Visual Studio 2015 Command Prompt 进入控制台模式。
依次使用以下命令:
cd /d C:\openssl-1.1.0f perl Configure VC-WIN64A shared no-asm -D_WIN32_WINNT=0x0501 --prefix="C:/openssl-1.1.0f/win32-release" --openssldir="C:/openssl-1.1.0f/win32-release/ssl" nmake nmake test nmake install nmake clean
注意:与《VS2015编译Openssl-1.1.0f》 不同的是,加入了-D_WIN32_WINNT=0x0501参数。这是因为之所以出现上面截图中的错误,是由于Openssl使用了一些新版本的API,导致缺少相应库的链接,而这些功能是依赖于你的操作系统的版本的。但你的头文件中的定义并不是最新的,因此,需要定义使用的操作系统的版本。
2 VS2005和VS2015编译Openssl-1.1.0f的异同
a)相同点
(1)准备工作相同。
(2)编译方法步骤相同。
(3)编译64位时,编译过程一样,不会出错。
b)不同点
(1)VS2015编译Openssl的32位和64位都在Visual Studio 2015 Command Prompt控制台模式下编译;而VS2005编译32位是用Visual Studio 2005 Command Prompt控制台模式,但编译64位则是用Visual Studio 2005 x64 Win64 Command Prompt控制台模式下编译。
(2)编译32位时,用VS2005时nmake出错,是因为缺少一个相应的库,因此,nmake前需要将相应的库配置进去。