Ubuntu 20.04安装MongoDB C驱动出现OpenSSL相关报错如何解决
问题根因
OSSL_HTTP_parse_url、SSL_get1_peer_certificate是OpenSSL 3.0及以上版本才提供的接口,Ubuntu 20.04官方源提供的OpenSSL 1.1.1f本身不包含这两个接口,出现该报错的核心原因通常为以下两种:
- 系统中存在多版本OpenSSL混用,CMake检测时读取到了3.0版本的头文件,但链接阶段调用了1.1.1f的系统库,导致接口不匹配
- 系统自带的官方OpenSSL安装包文件损坏,部分接口定义缺失
修复步骤
1. 清理非官方OpenSSL残留
优先排查是否存在手动编译安装的其他版本OpenSSL:
- 执行以下命令检查/usr/local目录下的OpenSSL残留:
ls /usr/local/lib | grep -E 'libssl|libcrypto' ls /usr/local/include | grep openssl
如果有匹配输出,说明存在手动编译的OpenSSL版本,删除对应文件即可:
rm -rf /usr/local/lib/libssl* /usr/local/lib/libcrypto* rm -rf /usr/local/include/openssl
- 更新系统动态库缓存:
ldconfig
2. 重装官方OpenSSL包
如果确认无多余版本残留,直接重装官方包修复损坏文件:
# 更新包索引 apt update # 强制重装OpenSSL及对应的开发包 apt install --reinstall openssl libssl-dev
3. 重新编译MongoDB C驱动
清理之前的编译缓存后重新走安装流程:
# 进入你的libmongoc编译目录下的build文件夹 cd /path/to/libmongoc/build # 删除所有旧编译产物 rm -rf * # 重新执行编译安装 cmake .. make -j$(nproc) make install
验证环境一致性
修复完成后可执行以下命令确认OpenSSL头、库版本统一:
# 查看系统OpenSSL库版本 openssl version # 查看头文件版本 grep "OPENSSL_VERSION_TEXT" /usr/include/openssl/opensslv.h
两者输出的版本号完全一致即代表环境正常。
内容的提问来源于stack exchange,提问作者Emre
相关产品推荐
相关产品推荐

