【发布时间】:2016-07-12 22:26:22
【问题描述】:
我正在使用 AIX 7.1,由于多个“符号 X(数字 Y)未从相关模块导出”而导致链接问题。
错误
Could not load program openssl:
Symbol resolution failed for /apps/10.00/openssl/product/openssl-1.0.2f/lib/libssl.so because:
Symbol EC_curve_nist2nid (number 73) is not exported from dependent
module /apps/tuxedo/product/12.1/lib/libcrypto.so.
Symbol EVP_aes_256_cbc_hmac_sha256 (number 274) is not exported from dependent
module /apps/tuxedo/product/12.1/lib/libcrypto.so.
Symbol EVP_aes_128_cbc_hmac_sha256 (number 275) is not exported from dependent
module /apps/tuxedo/product/12.1/lib/libcrypto.so.
Symbol X509_get_signature_nid (number 282) is not exported from dependent
module /apps/tuxedo/product/12.1/lib/libcrypto.so.
Symbol X509_chain_up_ref (number 312) is not exported from dependent
module /apps/tuxedo/product/12.1/lib/libcrypto.so.
Symbol X509_chain_check_suiteb (number 313) is not exported from dependent
module /apps/tuxedo/product/12.1/lib/libcrypto.so.
以下是依赖项:
$ ldd `which openssl`
/cb/cb10b/rel/server/bin/openssl needs:
/apps/10.00/openssl/product/openssl-1.0.2f/lib/libssl.so
/apps/tuxedo/product/12.1/lib/libcrypto.so
/usr/lib/libpthreads.a(shr_xpg5_64.o)
/usr/lib/libc.a(shr_64.o)
/unix
可以看出libcrypto.so来自tuxedo而不是openssl。 所以我在 tuxedo 库之前导出了 LIBPATH 以拥有更多的 openssl。这将 ldd 输出更改如下:-
export LIBPATH=/apps/10.00/openssl/product/openssl-1.0.2f/lib:$LIBPATH
$ ldd `which openssl`
/cb/cb10b/rel/server/bin/openssl needs:
/apps/10.00/openssl/product/openssl-1.0.2f/lib/libssl.so
/apps/10.00/openssl/product/openssl-1.0.2f/lib/libcrypto.so
/usr/lib/libpthreads.a(shr_xpg5_64.o)
/usr/lib/libc.a(shr_64.o)
/unix
/usr/lib/libcrypt.a(shr_64.o)
虽然 ldd 输出显示了从 openssl 目录中选择的依赖库。但是,当我运行脚本时,我仍然得到与上面相同的错误。当我将 libcrypto.so 重命名为其他名称时(例如 libcrypto.s.bkp),然后在从 openssl 运行 libcrypto.so 时会被选中,因此很明显有些东西会导致首先在 Tuxedo 目录中搜索 libcrypto.so然后在 openssl 目录中。
我不知道是什么原因导致 tuxedo 库的优先级高于 openssl 库。
【问题讨论】:
-
您的朋友是
dump -H -X32_64 <executable_or_sharedobject>和dump -Tv -X32_64 <executable_or_sharedobject>。 (注意:您可以将共享库安装到标准位置,如/usr/local/lib[64]或/opt/lib[64]) [另一个注意:OpenSSL 不断发展,在此期间功能可能不复存在;例如SSLv2_ 函数在 1.0.2.g 中消失了] -
另外你应该意识到 openssl+libssl.so+libcrypto.so 是一个包的一部分,它们的不同版本不应该合并,它会导致无处可去。
-
我已经静态链接了,看来问题已经解决了
标签: openssl ld aix undefined-symbol