【问题标题】:Multiple "Symbol X (number Y) is not exported from dependent module" on AIX 7.1AIX 7.1 上的多个“符号 X(数字 Y)未从依赖模块导出”
【发布时间】: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


【解决方案1】:

我正在静态链接(无共享)并且已经解决了它:-

    OPENSSL_VERSION=openssl-1.0.2f
On AIX:
./Configure aix64-cc --prefix=$INSTALLDIR/openssl/product/$OPENSSL_VERSION --openssldir=$INSTALLDIR/openssl/product/$OPENSSL_VERSION/openssl threads  no-shared

编辑: 另外,由于我已经在 SunOs 上安装了它,这里是说明

./Configure solaris64-sparcv9-cc --prefix=$INSTALLDIR/openssl/product/$OPENSSL_VERSION --openssldir=$INSTALLDIR/openssl/product/$OPENSSL_VERSION/openssl threads no-shared -KPIC

【讨论】:

  • 你确定 Sun/Solaris/Sparc 和 Ibm/Aix/PowerPC 是一样的吗?
  • 因为我同时在 SunOs 和 AIX 上工作,所以我错误地发布了 SunOs 而不是 AIX 的说明。答案已更新。
  • @ZsigmondLőrinczy 我添加了另一个问题 [stackoverflow.com/questions/36315195/…,这是我在此之后遇到的。你能帮忙解决这个问题吗?
猜你喜欢
  • 2013-07-18
  • 1970-01-01
  • 2015-12-17
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多