求助:Rocky 9.5下RTI Kafka适配器适配OpenSSL 3.2.2失败问题
解决RTI Kafka适配器在Rocky 9.5适配OpenSSL 3.2.2的问题
问题本质
报错librtikafkaadapter.so: /lib64/libldap.so.2: undefined symbol: EVP_md2, version OPENSSL_3.0.0的核心原因是:系统自带的libldap.so.2编译时依赖带OPENSSL_3.0.0版本标记的EVP_md2符号,但OpenSSL 3.2.2的legacy provider仅提供无版本标记的该函数,导致动态链接器无法匹配。
可行解决方案
1. 进程级强制加载OpenSSL Legacy Provider
通过环境变量让RTI Routing Service进程强制加载legacy provider,确保符号被正确解析:
# 直接启动命令 OPENSSL_CONF=/etc/ssl/openssl.cnf LD_PRELOAD=/usr/lib64/libcrypto.so.3 rtiroutingservice -cfg your_routing_config.xml
或者写入启动脚本:
export OPENSSL_CONF=/etc/ssl/openssl.cnf export LD_PRELOAD=/usr/lib64/libcrypto.so.3 rtiroutingservice -cfg your_routing_config.xml
提示:若libcrypto.so.3路径不符,用find /usr -name libcrypto.so.3确认实际路径
2. 重新编译OpenLDAP适配OpenSSL 3.x
系统自带的libldap.so.2基于旧版OpenSSL编译,重新编译链接当前系统的OpenSSL 3.2.2:
- 安装编译依赖:
dnf install openldap-devel openssl-devel make gcc autoconf automake - 下载与系统版本匹配的OpenLDAP源码(推荐2.6.x系列),解压后编译:
./configure --prefix=/usr --with-tls=openssl --disable-static make -j$(nproc) sudo make install - 执行
sudo ldconfig更新系统库缓存,确保新编译的libldap.so.2被优先加载。
3. 为RTI服务指定自定义库路径(临时绕过)
若不想替换系统库,可将编译好的适配OpenSSL 3.x的libldap库放在单独目录,启动时指定:
LD_LIBRARY_PATH=/path/to/custom_openldap_lib:$LD_LIBRARY_PATH rtiroutingservice -cfg your_routing_config.xml
4. 修正RTI Kafka适配器的编译配置
重新编译适配器时,确保链接系统当前的OpenSSL 3.2.2库,而非编译环境自带的旧版:
- 编译时指定OpenSSL路径:
cmake -S . -B build \ -DOPENSSL_ROOT_DIR=/usr \ -DOPENSSL_INCLUDE_DIR=/usr/include/openssl \ -DOPENSSL_LIBRARIES=/usr/lib64/libcrypto.so.3 cmake --build build - 用
ldd build/librtikafkaadapter.so检查依赖,确认libcrypto.so.3是系统路径下的版本。
内容的提问来源于stack exchange,提问作者rocksNwaves
相关产品推荐
相关产品推荐

