Windows下编译 cURL 库以及其所需要的 OpenSSL 库

近日,偶见到同事做的项目中有 HTTP GET/POST 的功能,虽然用 curl 命令行也能解决,不过要是嵌在程序中的话,源码的函数调用形式会更方便吧。所以从 github下载后就开始编译,虽然以前也编译过 OpenSSL 1.0.1e 不过最新版的有了些变化,下面记录一下最终用的参数与说明。本文使用的编译环境是 Windows 10  下 + Visual Studio 系列。

编译 cURL, OpenSSL 需要的软件除了 VS环境外,还需要 ActivePerl,NASM,cmake,到各自官网下载对应平台的相应版本即可,
本人使用的是 :
    ActivePerl 5.28
    NASM 2.14.03rc2 (可选)

    cmake 3.15.0
所需软件下载后安装即可。

首先是 OpenSSL
从 github 上 clone 来的 master 分支,经过编译成功后,验证是 V3.0.0,由于当初我看好它从 V1.1.1 开始支持国密SM2,SM3,SM4相关功能的,结果编译出来的动态链接库文件信息上突然就变成了 V3.0.0,当时吓我一跳,就不赘述了。最终 switch 到了 1_1_1-stable。

git clone https://github.com/openssl/openssl.git
cd openssl
mkdir BuildWork
cd BuildWork
mkdir VC-WIN32-2010
cd VC-WIN32-2010
perl ../../Configure --prefix=%cd%\Build\OpenSSL --openssldir=%cd%\Build\SSL VC-WIN32
nmake
nmake install

--prefix 与 --openssldir  指定相关文件的安装路径,默认是系统盘的【Program Files (x86)】或【Program Files】目录,要用管理员权限启动 cmd.exe 命令,“ nmake install ”才能成功。我这里就是自定义了。

还可以给 Configure 加参数:--debug 编译 debug版本,不加默认是 release 版本 (--release)
如果没有NASM,加参数 no-asm

perl ../../Configure ...  命令执行完后,会在当前目录下生成 configdata.pm, makefile 俩文件,
里面都有编译参数,一般debug的包含 "/MDd" release的包含 "/MD",这是动态链接到 VC运行时库
手动改为 "/MTd" 或者 "/MT",就是静态链接到VC运行时库
主要是改 makefile 文件,我就是这样,另外一个文件是当编译时有问题时执行会产生一些数据用于提交issues,我没遇到问题,所以没改。

前面建立的几个目录主要是为了区分各种不同的版本(32/64位, 用VS2010还是其他版本编译的)等等。如果要编译64位的,那么把【VC-WIN32】换成【VC-WIN64A】即可。
注意,进入VS的命令行环境下要严格选择对应平台的,比如:

使用VS2010编译32位,进入【Visual Studio 命令提示(2010)】
使用VS2010编译64位,进入【Visual Studio x64 Win64 命令提示(2010)】,而不是兼容的那个
使用VS2017编译32位,进入【VS 2017的开发人员命令提示符】
使用VS2017编译64位,进入【适用于 VS 2017 的 x64 本机工具命令提示】,而不是其他

选择不正确的编译环境,VS软件配置好的环境变量会导致编译脚本出现非预期的结果。
 

然后是 cURL
先说一下配置参数吧:
-G"NMake Makefiles"
    选择生成器,默认情况的生成 VS 解决方案,不过貌似自带了,这个生成 Makefile
-DCURL_STATIC_CRT=1
    设置编译的动态链接库 静态链接到VC运行时,默认是动态的,不过这种编译的时候会生成警告,但无影响
-DCMAKE_USE_OPENSSL=1
    启用 SSL,有四种SSL可选,可我就是选择 OpenSSL,你打我啊
-DCMAKE_BUILD_TYPE=Debug
    Debug与Release,注意大小写
-DCMAKE_INSTALL_PREFIX=%cd%\cURL_withSSL_dbg_MTd
    指定编译好的文件的安装路径,不设置的话默认值照旧,需要管理员权限。

下面是我的编译过程:
 

git clone https://github.com/curl/curl.git
cd curl
mkdir BuildWork
cd BuildWork
# 如果需要 OpenSSL,那么需要下面这行,重点是环境变量的值
set OPENSSL_ROOT_DIR=E:\GitRepos\openssl\BuildWork\VC-WIN32-2010\Build\OpenSSL
cmake -G"NMake Makefiles" -DCURL_STATIC_CRT=1 -DCMAKE_USE_OPENSSL=1 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=%cd%\cURL_withSSL_dbg_MTd ..
nmake install   # 编译并且安装

上面提到,-DCURL_STATIC_CRT=1 时,会有编译警告,虽然无影响,但我还是眼不见为净:

打开 CMakeLists.txt ,找到:

if(CURL_STATIC_CRT)
  set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT")
  set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
endif()

改为:

if(CURL_STATIC_CRT)
  string(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG} )
  string(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE} )
endif()

以上是参照 源码说明,网络资源,自己整理出来的记录,可能会随着版本的提升,又会有变化,所以记一下相关版本:
ActivePerl 5.28
NASM 2.14.03rc2
cmake 3.15
----
OpenSSL_1_1_1-stable
cURL 7.65.1

2019/07/01

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值