Windows下一些三方库的编译以及使用(openssl,lua,curl,boost)

Win32 专栏收录该内容
23 篇文章 0 订阅

我们的项目从2005,2008,2010,2012到2015, 一直随着vs版本的升级,需要不断的验证第三方库的兼容性。当vs悄悄跑到2015的时候,以前编译生成的库需要重新编译。


一、Openssl

(1) 编译

首先是Openssl的编译,关于它的教程有很多,但是在别人那里能成功的,自己的机器上不一定能成功。

最新的版本: v1.0.2d。机器环境:win7 32 vs2010 (win10 vs2015一样通过)

当按照下面的步骤执行时,出现以下的错误,无法build成功:

1、安装ActivePerl: http://www.activestate.com/activeperl/downloads
2、使用VS2010下的Visual Studio 2010 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)
3、下载openssl(https://www.openssl.org/source) ,解压缩,进入openssl的目录
4、perl configure VC-WIN32
尽量在这个目录下执行该命令,否则找不到Configure文件,或者指定完整的Configure文件路径。
5、ms\do_ms.bat
在解压目录下执行ms\do_ms.bat命令
6、nmake -f ms\ntdll.mak
7、nmake -f ms\nt.mak


在编译过程中可能出现以下的错误

(a) asm错误


在执行第四步的时候,会出现以上的错误。把第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   (编译静态库)


(b) 宏错误


如果出现上面的错误,可能是由于多次不同设置编译造成的,将Openssl删除,用全新的文件编译


(c) 符号错误

提示错误:cryptlib.obj : error LNK2001: unresolved external symbol _OPENSSL_ia32_cpuid

out32dll/libeay32.dll : fatal error LNK1120: 1 unresolved externals


修改ms/do_ms.bat 为:

perl util/mkfiles.pl >MINFO
perl util/mk1mf.pl debug no-asm VC-WIN32 >ms/nt.mak
perl util/mk1mf.pl debug dll no-asm VC-WIN32 >ms/ntdll.mak
perl util/mk1mf.pl debug no-asm VC-CE >ms/ce.mak
perl util/mk1mf.pl debug dll no-asm VC-CE >ms/cedll.mak
perl util/mkdef.pl 32 libeay > ms/libeay32.def
perl util/mkdef.pl 32 ssleay > ms/ssleay32.def


需要不同配置的库,比如MT、MTd、MD、MDd,修改nt.mak文件即可


(d) 其他编译参数的修改

<a> XP支持

如果是VS2013 VS2015编译的话,需要同时支持XP环境,则需要修改nt,mak文件的编译参数 CFLAG=

在后面添加  /D "_USING_V110_SDK71_"






<b> 字符集

多字节  /D "_MBCS"


unicode


<c> 调试信息格式

为了避免在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里的内容


(2) 直接使用编译好的库

如果不想自己编译,可以下载官方已经build好的库使用

地址: http://slproweb.com/products/Win32OpenSSL.html

安装成功后,在安装目录的lib->VC->static目录中有mt,md等配置选项的静态库


但是目前最新只有2013的版本,2015用不了,会出现链接错误



这里说明下,2015开发环境中只能使用2015编译的Openssl库,否则出现以下的链接错误:



二、boost

下载最新的1_59_0即可

三、luabind

版本: luabind-0.7.1-rc1

编译luabind需要boost库,出现以下错误:



直接把红圈里的代码注释掉,能编译通过,但是会不会有潜在的问题,就不知道了


四、libcurl

VS 2010等旧版本编译的libcurl库在VS2015中无法使用,执行curl_easy_perform,会crash



所以只有自己动手重新编译,编译步骤如下:

编译方式有两种,一种是通过VS2015,在工程中编译

(1) IDE编译

这个可能直观点,没用这种方式

(2)命令行编译

工具: win10  VS2015

版本: curl-7.45.0  下载地址: http://curl.haxx.se/download.html#Win32

我们选择了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. Windows下编译OpenSSL最新版(openssl-1.0.2a) 

2. 解决OpenSSL 在VC2015下链接报错的问题

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值