-
源码下载
本人所下载的源码版本: openssl – 1.1.1j 、 libcurl – 7.76.1
链接: libcurl7.76.1+openssl1.1.1j.zip
- 下载openssl源码–选择当前稳定版本,本人选择的是1.1.1j
https://www.openssl.org/source/
- 下载libcurl源码-- https://curl.se/download.html
MacOS交叉编译
MacOS OpenSSL编译
进入解压后的目录,cmd执行命令
参数DEPLOYMENT_TARGET = 10.13 指的是所支持的最低系统版本号
使用shared 生成动态库 ,生成路径为 /usr/local/ssl
export ARCH=x86_64
export SDK=macosx
export DEPLOYMENT_TARGET=10.13
export CFLAGS='-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -mmacosx-version-min=10.13'
./config shared --prefix=/usr/local/ssl
- 执行命令
make
- 执行命令
sudo make install
,该命令需输入密码
MacOS Libcurl编译
- 进入解压后的目录执行命令
参数说明
默认同时编译静态库、动态库
--with-drawin-ssl 提取ssl
--with-ssl=/usr/local/ssl 链接的OpenSSL版本地址
--prefix=/usr/local/curl 生成的目录
–disable-ldap --disable-ldaps 禁用ladp ladps
--without-zlib 不使用zlib编译
export ARCH=x86_64
export SDK=macosx
export DEPLOYMENT_TARGET=10.13
export CFLAGS="-arch $ARCH -isysroot $(xcrun -sdk $SDK --show-sdk-path) -m$SDK-version-min=$DEPLOYMENT_TARGET"
./configure --with-darwin-ssl --with-ssl=/usr/local/ssl --prefix=/usr/local/curl --without-zlib --disable-ldaps --disable-ldap
-
执行命令
make
-
执行命令
sudo make install
,该命令需输入密码 -
编译后的目录
确认生成版本无误
拷贝动态库,如图所示
-
编译后的版本只适用于本机,其他电脑无法跑
使用otool、install_name_tool 工具更改libcurl、openssl依赖库地址
使用@loader_path 指当前目录下链接动态库
例如
- 本身库使用指令
sudo install_name_tool -id @loader_path/libcurl.4.dylib libcurl.4.dylib
- 依赖库使用指令
sudo install_name_tool -change /usr/local/ssl/lib/libssl.1.1.dylib @loader_path/libssl.1.1.dylib libcurl.4.dylib
sudo install_name_tool -change /usr/local/ssl/lib/libcrypto.1.1.dylib @loader_path/libcrypto.1.1.dylib libcurl.4.dylib
-
cmake项目链接动态库 (略)
已编译好的动态库及include头文件
library.zip -
在编译及运行时拷贝至对应可执行目录下即可,否则会出现无法找到image的编译报错
补充win交叉编译
win编译OpenSSL (仅使用于源码1.1.0 及以上版本)
-
安装perl(使用默认安装即可)perl下载链接
-
安装NASM,并添加到环境变量 NASM下载链接
例如 安装到c:\Nasm
环境变量为
PATH=%PATH%;“c:\Nasm” -
根据所需安装的库是32位 还是 64位的选择不同 vs tool编译器。如本人选择安装64位的库 则使用如图所示编译器,否则使用x86的 , 务必使用
管理员模式
运行,否则install的时候无法创建目录及拷贝文件
前期工作准备完成 -
打开上图所示编译命令行,使环境变量生效
PATH=%PATH%;“c:\Nasm” -
使用
cd
指令打开 盘符 -
使用
cd
指令打开openssl 源码所在位置 -
在源码目录或其他目录创建install 时的生成目录文件夹 如创建OutDir
-
使用指令 生成makefile文件
注意参数
64位使用VC-WIN64A
, 32使用VC-WIN32
--prefix=生成目录
perl Configure VC-WIN64A --prefix=C:\Users\Desktop\libsrc\openssl-1.1.1j\openssl-1.1.1j\OutDir
-
使用指令
nmake clean
清理目录 -
使用指令
nmake
进行编译 -
在源码所在目录可以看见生成 libcrypto-1_1x64.dll 和 libssl-1_1-x64.dll
-
使用vstools 命令行使用指令dumpbin 检查对应生成的库版本,其版本信息 在 HEADER Section
dumpbin /headers libcrypto-1_1x64.dll
- 使用指令
nmake test
验证代码 - 使用指令
nmake install
安装到前面指定的生成文件夹
至此 OpenSSL 安装完成
win安装libcurl
-
打开源码所在位置,打开目录winbuild
-
打开README.md,查看编译指令 及 选项
-
请根据实际开发需求选择相关编译选项
本人使用指令如下
mode=dll 生成动态库
WITH_DEVEL=C:\Users=\Desktop\libsrc\openssl-1.1.1j\openssl-1.1.1j\OutDir 指明开发路径,如ssl、zlib
SSL_PATH=C:\Users=\Desktop\libsrc\openssl-1.1.1j\openssl-1.1.1j\OutDir 指明使用的SSL库路径
DEBUG=no release版本
MACHINE=x64 生成64位
ENABLE_SSPI=no 禁用sspi
nmake /f MakeFile.vc mode=dll WITH_DEVEL=C:\Users=\Desktop\libsrc\openssl-1.1.1-1j\openssl-1.1.1j\OutDir WITH_SSL=dll SSL_PATH=C:\Users\Desktop\libsrc\openssl-1.1.1-1j\openssl-1.1.1j\OutDir DEBUG=no MACHINE=x64 ENABLE_SSPI=no
-
静候编译完成,打开源码根目录下的build 目录 ,发现已生成库
如上图所示,选择上图第一个文件夹并进入,发现生成好的动态库位于bin文件夹中libcurl.dll
-
拷贝OpenSSL 生成的动态库文件(位于所安装目录的bin文件夹中)到libcurl中进行测试
-
查看curl版本
curl.exe -V
发现已支持 OpenSSL 访问 http/https
-
至此,libcurl + openssl 交叉编译完成