Ich arbeite an AIX 7.1 und Probleme beim Verknüpfen wegen mehrerer "Symbol X (Nummer Y) wird nicht vom abhängigen Modul exportiert".Mehrere "Symbol X (Nummer Y) wird nicht aus abhängigen Modul exportiert" auf AIX 7.1
Fehler
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.
Die folgenden sind die Abhängigkeiten:
$ 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
Es kann, dass libcrypto.so von Smoking und nicht openssl kommt zu sehen. Also habe ich LIBPATH exportiert, um openssl mehr vor Tuxedo-Bibliotheken zu haben. Dadurch ändert sich die LDD-Ausgang wie folgt: -
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)
Obwohl die LDD-Ausgabe die abhängigen Bibliotheken zeigt von OpenSSL Verzeichnisse aufgenommen werden. Wenn ich das Skript ausführe, erhalte ich immer noch den gleichen Fehler wie oben. Wenn ich libcrypto.so in etwas anderes umbenenne (zB libcrypto.s.bkp), dann wird während der Ausführung von libcrypto.so von openssl ausgewählt, so dass es offensichtlich ist, dass libcrypto.so zuerst im Tuxedo-Verzeichnis gesucht wird und später im openssl Verzeichnis.
Ich weiß nicht, was bewirkt, dass die Tuxedo-Bibliotheken eine höhere Priorität als die OpenSSL-Bibliotheken haben.
Ihre Freunde sind 'dump -H -X32_64' und 'dump -Tv -X32_64 '. (Ein Hinweis: Sie könnten Ihre Shared-Bibliotheken in Standard-Verzeichnissen wie '/ usr/local/lib [64]' oder '/ opt/lib [64]' installieren. [Eine weitere Anmerkung: OpenSSL entwickelt sich weiter, und währenddessen werden die Funktionen möglicherweise eingestellt existieren; z.B. SSLv2_ Funktionen sind in 1.0.2.g verschwunden] –
Auch Sie sollten erkennen, dass openssl + libssl.so + libcrypto.so Teile eines Pakets sind, verschiedene Versionen von ihnen sollten nicht zusammengeführt werden, es führt zu nirgends. –
Ich habe statisch verknüpft, und es scheint das Problem gelöst zu haben – Phalgun