赞
踩
前提条件libcurl开发库需要zlib和openssl的支持。
本文记录完整编译方案。
环境准备
zlib:zlib-1.2.11 http://www.zlib.net/
步骤
1)导入zlibvc.vcxproj (目标所在目录: xxx\zlib-1.2.11\contrib\vstudio\vc15)
2)更改zlibvc部分属性:
配置管理器为:x64
【常规】->【目标文件名】内容改为zlib_zip1211;
【C/C++】->【预处理器定义】更改ZLIB_WINAPI–>ZLIB_DLL (为了编译出的dll可以使用zip相关接口)
【链接器】->【常规】->【输出文件】内容改为$(OutDir)$(TargetName).dll
【链接器】->【高级】->【导入库】内容改为$(OutDir)$(TargetName).lib
【链接器】->【调试】->【生成程序库文件】内容改为$(OutDir)$(TargetName).pdb
【链接器】->【调试】->【映射文件名】内容改为$(OutDir)$(TargetName).map
install
本文环境统一将依赖库组织到 @统一文件夹 下
zlib安装目录:@统一文件夹\zlib_zip_1_2_11_x64
安装文件夹组织如下:
lib和bin文件夹组织如下:
include包含内容如下:
>> perl Configure VC-WIN64A --prefix=@统一文件夹\openssl_1_1_0l_vc15_x64 --with-zlib-include=@统一文件夹\zlib_zip_1_2_11_vc15_x64\include --with-zlib-lib=@统一文件夹\zlib_zip_1_2_11_vc15_x64\lib\release\zlib_zip1211.lib zlib-dynamic # VC-WIN64A:64位版本编译 # --prefix:编译结果安装目录 # --with-zlib-include:zlib库包含目录 # --with-zlib-lib:zlib库导入库文件 # zlib-dynamic:zlib以dll形式引入 # zlib:支持zlib压缩 # no-shared:编译静态库 不编译dll # --debug:编译debug版本 # --release:编译release版本 # 此命令行运行过程中会报 @perl openssl错误图 所示错误,忽略即可 >> nmake >> nmake test >> nmake install >> nmake clean
perl openssl错误图如下所示
3. install
命令行执行完毕后,内容组织如下:
openssl安装目录:@统一文件夹\openssl_1_1_0l_vc15_x64
安装文件夹组织如下:
lib内容如下:
bin内容如下:
>> perl Configure VC-WIN64A --prefix=@统一文件夹\openssl_1_0_2t_vc15_x64 --with-zlib-include=@统一文件夹\zlib_zip_1_2_11_vc15_x64\include --with-zlib-lib=@统一文件夹\zlib_zip_1_2_11_vc15_x64\lib\zlib_zip1211.lib zlib-dynamic # VC-WIN64A:64位版本编译 # --prefix:编译结果安装目录 # --with-zlib-include:zlib库包含目录 # --with-zlib-lib:zlib库导入库文件 # zlib-dynamic:zlib以dll形式引入 >> ms\do_win64a >> nmake -f ms\ntdll.mak # 这两步命令结束编译基本完成 >> cd out32dll >> ..\ms\test # 这两步命令测试编译结果 # 编译成功,会提示"passed all tests" >> nmake -f ms\ntdll.mak install # 安装到指定目录
环境准备
libssh2:libssh2-1.9.0 https://www.libssh2.org/
zlib:zlib-1.2.11 (上述zlib编译结果)
openssl:openssl_1_1_0l (上述openssl编译结果)
步骤
1)vs2017项目准备
libssh2-1.9.0解压根目录\win32\libssh2.dsw项目导入。项目有如图所示的配置
本文环境只编译OpenSSL DLL Debug | x64 和 OpenSSL DLL Release | x64。
配置【Windows SDK 版本】和【平台工具集】。
【常规】->【目标文件名】内容改为libssh2190;
【C/C++】->【常规】更新openssl include 和 zlib include
(这里就是【@统一文件夹\openssl_1_1_0l_vc15_x64\include】和【@统一文件夹\zlib_zip_1_2_11_vc15_x64\include】)
【链接器】->【常规】->【附加库目录】更新openssl lib 和 zlib lib
(这里就是【@统一文件夹\openssl_1_1_0l_vc15_x64\lib】和【@统一文件夹\zlib_zip_1_2_11_vc15_x64\lib】)
【链接器】->【输入】更新导入库名字
libcrypto.lib libssl.lib zlib_zip1211.lib (上述编译的结果)
install
配置完成后,启动vs2017编译即可。
libssh2安装目录:@统一文件夹\libssh2_1_9_0_vc15_x64
安装文件夹组织如下:
include内容如下:
lib内容如下:
环境准备
curl:curl-7.66.0 https://curl.haxx.se/download.html
zlib:zlib-1.2.11 (上述zlib编译结果)
openssl:openssl_1_1_0l (上述openssl编译结果)
libssh2:libssh2-1.9.0 (上述openssl编译结果)
步骤
1)vs2017项目准备
curl-7.66.0解压根目录\projects\Windows\VC15\curl-all.sln项目导入。项目有如图所示的配置
本文环境只编译DLL Debug - DLL OpenSSL - DLL LibSSH2 | x64 和 DLL Release - DLL OpenSSL - DLL LibSSH2 | x64。
配置【Windows SDK 版本】和【平台工具集】。
【常规】->【目标文件名】内容改为libcurl7660;
【C/C++】->【常规】更新openssl include 和 zlib include 以及 libssh2 include
(这里就是【@统一文件夹\openssl_1_1_0l_vc15_x64\include】和【@统一文件夹\zlib_zip_1_2_11_vc15_x64\include】和【@统一文件夹\libssh2_1_9_0_vc15_x64\include】)
【C/C++】->【预处理器】添加HAVE_ZLIB_H (zlib的支持)
【链接器】->【常规】->【附加库目录】更新openssl lib 和 zlib lib 以及 libssh2 lib
(这里就是【@统一文件夹\openssl_1_1_0l_vc15_x64\lib】和【@统一文件夹\zlib_zip_1_2_11_vc15_x64\lib】和【@统一文件夹\libssh2_1_9_0_vc15_x64\lib】)
【链接器】->【输入】更新导入库名字
libcrypto.lib libssl.lib zlib_zip1211.lib libssh2190.lib (上述编译的结果)
这里存在问题,上述导入的项目默认情况下,Curl_ssh_init Curl_ssh_cleanup Curl_ssh_version函数没有定义,需要为项目引入定义这些函数的cpp。路径为:@curl解压根目录\lib\vssh\libssh2.c
install
配置完成后,启动vs2017编译即可。
curl安装目录:@统一文件夹\curl_7_66_0_vc15_x64
安装文件夹组织如下:
include内容如下:
lib内容如下:
按照上述配置环境和编译过程,编译顺利完成!
上述编译中,使用openssl1.1.0l编译的libssh2,在使用过程中_libssh2_openssl_crypto_exit函数会崩溃。换成openssl1.0.2t后解决。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。