本文共 2982 字,大约阅读时间需要 9 分钟。
我们的项目从2005,2008,2010,2012到2015, 一直随着vs版本的升级,需要不断的验证第三方库的兼容性。当vs悄悄跑到2015的时候,以前编译生成的库需要重新编译。
首先是Openssl的编译,关于它的教程有很多,但是在别人那里能成功的,自己的机器上不一定能成功。
最新的版本: v1.0.2d。机器环境:win7 32 vs2010 (win10 vs2015一样通过)
当按照下面的步骤执行时,出现以下的错误,无法build成功:
在编译过程中可能出现以下的错误
在执行第四步的时候,会出现以上的错误。把第4步改为 perl Configure VC-WIN32 no-asm 然后继续5,6,7步
4. perl Configure VC-WIN32 no-asm --prefix=d:\openssl_lib (存放编译后的库文文件目录)
5. ms\do_ms
6. nmake -f ms\ntdll.mak (编译动态库)
7.nmake -f ms\nt.mak (编译静态库)
如果出现上面的错误,可能是由于多次不同设置编译造成的,将Openssl删除,用全新的文件编译
需要不同配置的库,比如MT、MTd、MD、MDd,修改nt.mak文件即可
如果是VS2013 VS2015编译的话,需要同时支持XP环境,则需要修改nt,mak文件的编译参数 CFLAG=
在后面添加 /D "_USING_V110_SDK71_"
多字节 /D "_MBCS"
unicode
为了避免在build工程的时候,避免出现找不到pdb文件的warning,将调试信息格式修改为 /Z7
<d> x64库的编译
使用VS2015的命令行工具:
VS2015 x64本机工具命令提示符
下面两个步骤不一样,其他都一样
perl Configure VC-WIN64A
ms\do_win64a
<e> debug版
如果你需要编译一个Debug版的,必须先修改 ms\do_ms.bat(64位为do_win64a.bat)文件
perlutil\mk1mf.pl no-asm VC-WIN32 >ms\nt.mak
perlutil\mk1mf.pl dll no-asm VC-WIN32 >ms\ntdll.mak
修改为
perl util\mk1mf.pl no-asm debug VC-WIN32>ms\nt.mak
perl util\mk1mf.pl dll no-asm debug VC-WIN32 >ms\ntdll.mak
<f> 运行库配置
在"CFLAG"中修改配置
注意:
每次执行 "perl Configure XXX"后,nt.mak文件都会重新生成,里面的内容会被重置
所以每次都需要重新修改nt.mak里的内容
如果不想自己编译,可以下载官方已经build好的库使用
地址: http://slproweb.com/products/Win32OpenSSL.html
安装成功后,在安装目录的lib->VC->static目录中有mt,md等配置选项的静态库
但是目前最新只有2013的版本,2015用不了,会出现链接错误
这里说明下,2015开发环境中只能使用2015编译的Openssl库,否则出现以下的链接错误:
版本: luabind-0.7.1-rc1
编译luabind需要boost库,出现以下错误:
直接把红圈里的代码注释掉,能编译通过,但是会不会有潜在的问题,就不知道了
VS 2010等旧版本编译的libcurl库在VS2015中无法使用,执行curl_easy_perform,会crash
所以只有自己动手重新编译,编译步骤如下:
编译方式有两种,一种是通过VS2015,在工程中编译
这个可能直观点,没用这种方式
工具: win10 VS2015
版本: curl-7.45.0 下载地址:
我们选择了zip问价你下载。
在curl-7.45.0 -> winbuild目录下有个 BUILD.WINDOWS.txt文件,这里是关于编译选项的说明,照着做即可。
由于我们的curl会使用https,所以还需要openssl的支持,Openssl的头文件和库文件需要放在deps的相应目录下
另外就是一些常见编译选项的设置
下面就简单讲下编译步骤:
1. 添加openssl的头文件和库文件
2. 打开VS2015的命令行(最好管理员方式打开)
2.进入winbuild目录
3.输入编译指令
MT:
mode=static 生成静态库
WITH_SSL=static culr支持ssl,使用的ssl是静态库形式
DEBUG=no release版本
RTLIBCFG=static crt库设成MT
执行结束后会在Builds目录生成对应的文件:
MDd:
参考:
1.
2.