【发布时间】:2022-01-23 21:22:59
【问题描述】:
在我的项目中链接了两个版本的 libssl(1.0.2k 和 1.1.1i)。不能删除任何一个,因为 libcurl、libunbound 等其他库依赖于 libssl1.0.2k。
所以我已经在我的进程中链接了两个库版本,但是当我调用某个函数时,它是从 libssl1.0.2k 而不是从 libssl1.1.1i 调用的。 由于库版本不匹配导致段错误。
#0 0x00007f6104ac5696 in ssl_cert_set1_chain () from /lib64/libssl.so.10
#1 0x00007f610550fe6a in ERR_peek_error () from /opt/runtime/current/lib/libcrypto.so.1.1
#2 0x00007f61058e8f70 in SSL_CTX_use_certificate_chain_file () from /opt/runtime/current/lib/libssl.so.1.1
#3 0x0000000003a6699b in evhtp_ssl_init ()
如何解决这个崩溃?
【问题讨论】:
-
执行时设置LD_LIBRARY_PATH
-
如何加载/链接这些库?
-
在 CentOS/RHEL 中,openssl 使用版本化符号,所以如果可以在这里应用,我希望这样的事情能让你摆脱困境。它将导致您使用的所有符号绑定到 1.1 版本的 openssl,而其他库将绑定到 openssl 的通用符号版本(希望)
-
@stark ,我尝试设置 LD_LIBRARY_PATH 但没有帮助。
-
@MarekR,我链接如下 $(THIRDPTYBIN_DIR)/lib/libssl.so.1.1 $(THIRDPTYBIN_DIR)/lib/libcrypto.so.1.1 \ $(THIRDPTYBIN_DIR)/libevent/ix64 /lib/libevent.so \ $(THIRDPTYBIN_DIR)/libevent/ix64/lib/libevent_openssl.so \ $(THIRDPTYBIN_DIR)/libevent/ix64/lib/libevent_core.so \ $(THIRDPTYBIN_DIR)/libevhtp/ix64/libevhtp.a \ -lssl -lcrypto -lunbound -lexpat -lgmp \
标签: c++ linux gcc makefile shared-libraries