Ubuntu20虚拟机安装Thrift 0.8.0 configure报错libcrypto required解决方案
故障根因
Thrift 0.8.0 版本发布时间较早,仅适配 OpenSSL 1.0.x 及更早版本。Ubuntu 20.04 系统默认预装的是 OpenSSL 1.1.x 版本,该版本移除了旧版 BN_init 接口(替换为 BN_new),因此 configure 检测阶段无法匹配到对应符号,即便安装了 libssl-dev 包也会触发 libcrypto 缺失报错。
可行解决方案
方案1:补丁适配(推荐,无需改动系统依赖)
直接修改 Thrift 0.8.0 源码的适配逻辑,兼容高版本 OpenSSL:
- 进入 Thrift 0.8.0 源码根目录,执行全局替换命令,把所有
BN_init调用替换为新版兼容的BN_new:
sed -i 's/BN_init/BN_new/g' configure sed -i 's/BN_init/BN_new/g' lib/cpp/src/thrift/transport/TSSLSocket.cpp
- 调整 configure 命令,删除无效的
-DMINGW编译参数(该参数仅用于编译 Windows 平台程序,Ubuntu 原生编译无需添加),Ubuntu 20.04 系统默认 libssl 头文件和库路径无需指定到/usr/local/ssl,正确命令参考:
LDFLAGS='-L/usr/lib/x86_64-linux-gnu -ldl' CPPFLAGS='-I/usr/include' ./configure --prefix=/usr/local/thrift --with-php --with-boost=/usr/local/boost
- 后续正常执行
make && make install即可完成安装。
方案2:安装独立的旧版 OpenSSL
如果补丁适配后仍有兼容性问题,可单独编译安装 OpenSSL 1.0.x 版本到独立路径,不影响系统默认 OpenSSL:
- 下载 OpenSSL 1.0.2u 源码并编译安装到
/opt/openssl-1.0.2路径:
wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz tar zxf openssl-1.0.2u.tar.gz && cd openssl-1.0.2u ./config shared --prefix=/opt/openssl-1.0.2 make && make install
注意:不要替换系统默认的openssl版本,否则会导致ssh、apt等系统核心工具无法正常运行
- 编译 Thrift 时指定该旧版 OpenSSL 路径即可:
LDFLAGS='-L/opt/openssl-1.0.2/lib -ldl' CPPFLAGS='-I/opt/openssl-1.0.2/include' ./configure --prefix=/usr/local/thrift --with-php --with-boost=/usr/local/boost
- 运行 Thrift 时若提示找不到 libcrypto 库,可临时添加环境变量:
export LD_LIBRARY_PATH=/opt/openssl-1.0.2/lib:$LD_LIBRARY_PATH
方案3:升级 Thrift 版本
如果没有强制使用 Thrift 0.8.0 的特殊需求,建议升级到 Thrift 0.10.0 及以上版本,原生适配 OpenSSL 1.1.x,无需任何修改即可正常编译安装。
内容的提问来源于stack exchange,提问作者math geek
相关产品推荐
相关产品推荐

