博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows下一些三方库的编译以及使用(openssl,lua,curl,boost)
阅读量:4111 次
发布时间:2019-05-25

本文共 2982 字,大约阅读时间需要 9 分钟。

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

一、Openssl

(1) 编译

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

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

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

1、安装ActivePerl:

2、使用VS2010下的Visual Studio 2010 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)
3、下载openssl() ,解压缩,进入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  下载地址: 

我们选择了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. 

你可能感兴趣的文章
微信小程序picker隐藏年份
查看>>
快速了解 React Hooks 原理
查看>>
响应式布局
查看>>
百度云下载工具分享
查看>>
spark on yarn任务提交缓慢解决
查看>>
Filco圣手二代双模蓝牙机械键盘的连接方法
查看>>
pyspark学习笔记
查看>>
JDK源码那些事儿之PriorityBlockingQueue
查看>>
Docker那些事儿之镜像创建
查看>>
Docker那些事儿之编排工具docker-compose
查看>>
JDK源码那些事儿之SynchronousQueue上篇
查看>>
JDK源码那些事儿之SynchronousQueue下篇
查看>>
jq实现图片下载功能
查看>>
解决ueditor二次加载(getEditor)加载失败的问题
查看>>
MySQL数据库文件的移动和权限设置
查看>>
cURL无法访问TLS网站故障解决
查看>>
pip升级
查看>>
HttpClient 如何设置超时时间
查看>>
Springmvc配置定时任务注解开发
查看>>
win10启动telnet
查看>>