2016-11-07 5 views
1

Ich habe ein gemeinsames Objekt mit dem Namen a.so erstellt und es funktionierte perfekt mit einer ausführbaren Datei, die in c/C++ (linux) entwickelt wurde. Dieses gemeinsame Objekt bietet einige Funktionen für die Integration in externe Software. Im Folgenden sind einige Merkmale dieses gemeinsame Objekt:Undefined Reference Shared Object Linux [C++]

  • Kommuniziert mit Geräten auf RS232
  • TCP/IP + SSL-Kommunikation mit einem Server

Jetzt ich JNI-Wrapper erschaffe (b.so) von oben gemeinsamen Objekt und verwendet diesen Befehl gemeinsames Objekt zu öffnen und einen Handler erstellen:

dlopen (FILE_NAME, RTLD_LAZY | RTLD_GLOBAL):

Aber es gibt mir nicht möglich, Fehler LIB zu laden: /usr/lib/a.so - [/usr/lib/a.so: undefined Symbol: EVP_cleanup]

EVP_cleanup in a.so verwendet wird, und ist Teil der openssl/evp.h-Header-Datei.

Ich habe versucht, ssl und Crypto-Bibliotheken in b.so als auch zu verknüpfen, aber die Ausgabe ist die gleiche wie oben.

Kann mir jemand Vorschläge oder eine alternative Methode geben?

Dank

Grüße

Antwort

2

Es scheint, dass Sie Ihren Code nur mit libssl.so verknüpft haben.

Sie müssen auch explizit mit libcrypto.so verknüpfen. EVP_cleanup() ist definiert in libcrypto.so.

objdump ist ein nützliches Werkzeug, um herauszufinden, mit was Sie verlinken müssen, wenn Dokumentation fehlt.

$ objdump -T /usr/lib64/libcrypto.so | grep EVP_cleanup 
000000000012f5e0 g DF .text 0000000000000054 libcrypto.so.10 EVP_cleanup 
+0

Vielen Dank! Es löste das Problem. – user391318