You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译curl 8.8.0遇OpenSSL函数未定义引用错误求助

编译curl 8.8.0时OpenSSL符号未定义错误的排查与解决

问题描述

从curl官方网站下载curl-8.8.0 tar包后执行编译:

cd curl-8.8.0
sudo ./configure --with-openssl
sudo make

执行sudo make时出现链接错误:

make[2]: Entering directory '/usr/src/curl-8.8.0/src'
CCLD     curl
../lib/.libs/libcurl.so: undefined reference to `EVP_PKEY_get_group_name'
../lib/.libs/libcurl.so: undefined reference to `SSL_get0_group_name'
../lib/.libs/libcurl.so: undefined reference to `EVP_PKEY_get_security_bits'
../lib/.libs/libcurl.so: undefined reference to `X509_STORE_load_file'
../lib/.libs/libcurl.so: undefined reference to `EVP_PKEY_get_id'
../lib/.libs/libcurl.so: undefined reference to `EVP_PKEY_get_bits'
../lib/.libs/libcurl.so: undefined reference to `SSL_get1_peer_certificate'
../lib/.libs/libcurl.so: undefined reference to `X509_STORE_load_path'
../lib/.libs/libcurl.so: undefined reference to `EVP_PKEY_get_bn_param'
../lib/.libs/libcurl.so: undefined reference to `EVP_PKEY_get0_type_name'
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:1048: curl] Error 1
make[2]: Leaving directory '/usr/src/curl-8.8.0/src'
make[1]: *** [Makefile:1553: all-recursive] Error 1
make[1]: Leaving directory '/usr/src/curl-8.8.0/src'
make: *** [Makefile:1224: all-recursive] Error 1

已手动升级OpenSSL至最新版本:

$ openssl --version
OpenSSL 3.3.1 4 Jun 2024 (Library: OpenSSL 3.3.1 4 Jun 2024)

主机环境:

$ uname -a
Linux alpps789 4.18.0-513.24.1.el8_9.x86_64 #1 SMP Thu Mar 14 14:20:09 EDT 2024 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.10 (Ootpa)

原因分析

这些未定义符号均为OpenSSL 3.x新增的API接口。虽然你已升级OpenSSL到3.3.1,但curl的configure脚本未正确识别手动安装的新版本,而是默认链接了RHEL 8系统自带的旧版OpenSSL(1.1.1系列)。系统中多版本OpenSSL共存时,configure优先检测到旧版的头文件和库,导致编译出的libcurl依赖旧版API,最终链接阶段出现符号缺失。

解决步骤

1. 清理编译残留

先彻底清除之前的编译生成文件,避免缓存干扰:

cd curl-8.8.0
sudo make clean
sudo rm -rf config.log config.status Makefile

2. 强制指定OpenSSL路径给configure

假设OpenSSL 3.3.1安装在/usr/local/openssl(替换为你的实际安装路径),执行configure时明确指定路径:

sudo ./configure --with-openssl=/usr/local/openssl

执行完成后,检查config.log确认版本检测结果:

grep "OpenSSL version" config.log

预期输出包含OpenSSL version: OpenSSL 3.3.1。

3. 重新编译安装

sudo make
sudo make install

4. 配置系统优先加载新版库

确保系统能找到新安装的OpenSSL和curl库:

  • 创建并编辑/etc/ld.so.conf.d/openssl.conf:
    /usr/local/openssl/lib
    
  • 创建并编辑/etc/ld.so.conf.d/curl.conf:
    /usr/local/lib
    
  • 更新系统库缓存:
    sudo ldconfig
    

5. 验证安装结果

curl --version

输出中应显示OpenSSL/3.3.1,说明curl已正确链接新版OpenSSL。

内容的提问来源于stack exchange,提问作者Shashank Shekhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:22:34