1. 源码编译
1.1. Win下源码编译
1.1.1. 准备工作
环境准备
- Windows10 20H2系统
- Microsoft Visual 2019 C++ (MSVC14.2)
- purl工具(编译openssl的时候需要):https://strawberryperl.com/download/5.32.1.1/strawberry-perl-5.32.1.1-64bit.msi
- 源代码:
- curl: https://github.com/curl/curl
- libssh2[curl可选项]:https://github.com/libssh2/libssh2
- openssl[curl可选项]: https://github.com/openssl/openssl
注意
- 源码目录结构需要保证正确,如下: ```txt
- curl |- docs |- …
- openssl |- apps |- …
- libssh2 |- docs |- … ```
1.1.2. OpenSSL编译
比较好的是,curl将openssl的编译也支持到了,参考:curl\projects\build-openssl.bat(可以先看curl\projects\README),使用build-openssl.bat -help查看使用帮助。
普通编译命令行示例
rem 注意,我们这里的代码路径是C:\Program Files (x86)\Microsoft Visual Studio 14.0,由于我们内部使用了多版本vs(2019和2015),但实际上主程序是一个2019版本,前面的参数vc14不能写成vc14.2(这个会查找C:\Program Files (x86)\Microsoft Visual Studio 2019这个路径)
rem 整个编译,会生成动态库、静态库、debug版本、release版本
build-openssl vc14 x86 debug "E:\Code\openssl" -VSpath "C:\Program Files (x86)\Microsoft Visual Studio 14.0" -perpath "C:\Strawberry\perl"
build-openssl vc14 x86 release "E:\Code\openssl" -VSpath "C:\Program Files (x86)\Microsoft Visual Studio 14.0" -perpath "C:\Strawberry\perl"
注意:
- 多编译器环境下,编译会出现rc.exe找不到的问题(实际是冲突了,不知道使用哪个),因此,运行命令行需要使用vs2019的专用命令行运行上述脚本;而无多编译器场景下,一般上述脚本会自动查找对应的运行环境
- 若上述选择vs2005版本等,编译中还会出现CreateFiber等链接错误(vs2019不会出现问题),是由于NT版本问题,需要修改build-openssl.bat,增加-D_WIN32_WINNT=0x0501
perl "%SOURCE_PATH%\Configure" %options% -D_WIN32_WINNT=0x0501 "--prefix=%TMP_INSTALL_PATH%"
上述编译完成后,会生成:
- openssl\build\Win32\VC14\LIB Debug
- openssl\build\Win32\VC14\DLL Debug
- openssl\build\Win32\VC14\LIB Release
- openssl\build\Win32\VC14\DLL Release
1.1.3. libssh2编译
由于libssh2在curl中没有方便的编译脚本,需要自行编译。通过尝试,发现libssh2-1.10.0支持openssl1.1.1i(cmake中会提示找openssl这个版本,同时前面用最新的1.1.1l会出错),这里需要先通过上述流程编译一遍OpenSSL1.1.1i,然后将依赖库,组成如下结构(参考:https://www.libssh2.org/mail/libssh2-devel-archive-2019-02/0007.shtml):
- openssl
|- include
|- openssl
libssl.lib
libcrypto.lib
libssh2当前版本(1.10.0)使用cmake工具进行编译,配合openssl需要设置几个参数:
CMAKE_INSTALL_PREFIX=xxxx\libssh2\build\libssh2
CRYPTO_BACKEND=OpenSSL
OPENSSL_ROOT_DIR=xxxx\libssh2\build\openssl(注意,这里就上述组成的一个文件结构,按照上述结构会自动寻找include、lib)
编译完毕后,这里生成了libssh2,为了能让curl顺利编译,还需要重建目录结构(实际build-openssl.bat也是这样处理的)
- libssh2
|- build
|- Win32
|- VC14
|- Lib Release
|- libssh2.lib
1.1.4. libcurl静态库/动态库编译
前面的过程完毕后,这里libcurl编译就非常容易了
- 找到curl\projects\generate.bat,生成工程文件
- 找到curl\projects\Windows\VC14\curl-all.sln,用vs2019打开,选择对应的版本编译即可