2016-03-25 8 views
1

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.

+0

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] –

+0

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. –

+0

Ich habe statisch verknüpft, und es scheint das Problem gelöst zu haben – Phalgun

Antwort

1

Ich Verknüpfung statisch (nicht-shared) und das hat es gelöst: -

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 

EDIT: Auch, weil ich es auf SunOs installiert werden hatte, hier ist die Anweisung

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

Sind Sie absolut sicher, dass Sun/Solaris/Sparc und Ibm/Aix/PowerPC identisch sind? –

+0

Da ich sowohl an SunOs als auch an AIX arbeitete, hatte ich fälschlicherweise die Anweisung für SunOs anstelle von AIX gepostet. Die Antwort wurde aktualisiert. – Phalgun

+0

@ ZsigmondLőrinczy Ich fügte eine weitere Frage [http://stackoverflow.com/questions/36315195/incorrect-shared-libraries-picked-in-a-ix?noredirect=1#comment60254071_36315195], die ich danach begegnete. Kannst du damit helfen? – Phalgun