源码编译curl支持openssl

OpenSSL版本问题

注:openssl版本问题主要是方便自己查阅
OpenSSL各版本官方的支持情况:

OpenSSl版本 官方支持
0.9.8 不再支持
1.0.0 不再支持
1.0.1 不再支持
1.0.2 后续不再支持
1.1.1 支持到2023年9月11日
3.0.0 目前最新版本,支持中

版本命名方式(x_x_x-prex预览版 ; x.x.x-beta/alpha测试版 ; x_x_x正式版 ; x_x_x[a-z]延伸版 )
版本命令规则:
openssl 1.0.1a 后面的字母变动表示:bug或安全漏洞的修复,不会增加新的feature;
openssl 1.0.2 最后一个数字变动表示:新增了新的feature,并兼容以前的版本;
而中间的数字变动后,此时source和binary可能都不兼容了。

版本差异:
(1)1.0.1和1.0.2这两个系列版本变化相对较小,大部分接口可以通用;
(2)1.0.x和1.1.1这两个系列的差别比较大,很多在1.0.x中的函数接口在1.1.1中都转为内部接口或者被移除了;
(3)各个版本的预览版、正式版、延伸版都存在一定的差异;
例如:
在1.0.x的版本中在ssl目录下有kssl.c/kssl.h处理krb5,而在1.1.1版本中移除了kssl.c/kssl.h这个两个文件;
在 1.0.2d 版本中可以调用到一些与 ASN.1 编码有关的底层函数,例如:M_i2d_ASN1_OCTET_STRING( ),M_ASN1_BIT_STRING_free( ) 等。在 1.1.1 系列中,这些以 M_ 开头的 ASN.1 编码函数都被删去了。
具体的差异,需要在使用前调研相关版本,或使用时遇到问题后查询对应版本;

在使用OpenSSL时,一定要注意不同版本之间存在的差异问题,不同版本的差异可能会给程序带来兼容问题;

安装OpenSSL库

国内在github上下载会比官网上快一点:https://github.com/openssl/openssl(我这里下载的最新稳定1.1.1j版本)
编译步骤:
./config --prefix=path (设置安装目录,方便curl引用)
make && make install

查看是否安装成功:
cd path/bin
./openssl version (因为这里是安装到自定义目录下,需要设置编译生成的动态库程序使程序可以引用,例如放到系统lib目录下)
查看编译的ssl版本输出: OpenSSL 1.1.1j 16 Feb 2021

安装curl库

国内在github上下载会比官网上快一点:https://github.com/curl/curl(7.78.0)
编译步骤:
./configure --with–openssl=path (可以使用./configure --help 查看自己需要开启或者关闭无用的选项)
make && make install

根据configure输出查看依赖的ssl版本:
checking for OpenSSL headers version… 1.1.1 - 0x101010afL
checking for OpenSSL library version… 1.1.1

在./configure过程中遇到的问题:
vtls/openssl.c:479:15: error: implicit declaration of function ‘RAND_egd’ [-Werror=implicit-function-declaration]
int ret = RAND_egd(data->set.str[STRING_SSL_EGDSOCKET]?
解决方式:我这里是因为存在一个老版本的ssl影响到了curl的编译执行,移除已存在的老版本(可以通过find全局搜索老版本的ssl),即可正常编译;

查看curl是否编译成功:
在这里插入图片描述
运行curl --version,查看输出curl的版本和是否支持openssl;

你可能感兴趣的:(#,工作记录)