Fehler, die auf eine Reihe nicht aufgelöster OpenSSL-Symbole verweisen, die eindeutig vorhanden sind?
Ich baue eine gemeinsam genutzte Bibliothek (wir nennen sie "foo"), die eine andere Bibliothek nutzt (wir nennen sie "bar"). "bar" nutzt einige Funktionen von OpenSSL.
Hier tritt das Problem auf.
"bar" wurde als statische Bibliothek kompiliert und anscheinend auch OpenSSL. Wenn ich also die Bibliothek ("foo") verlinke, füge ich Folgendes hinzu:
Objektdateien für "foo"statische Bibliotheklibbar.a
Statische OpenSSL-Bibliothekenlibcrypto.a
undlibssl.a
Der Build-Befehl sieht ungefähr so aus:
g++ -Wl,-soname,libfoo.so -shared file1.o file2.o libbar.a \
libcrypto.a libssl.a -o libfoo.so
Allerdings bekomme ich eine Menge Fehler:
ld: ./obj/libbar.a(file1.c.o): in function initialize_openssl:
ssl.c:117: error: undefined reference to 'SSL_library_init'
Führen Sie den folgenden Befehl aus:
nm libssl.a | grep SSL_library_init
Erzeugt die folgende Ausgabe:
00000000 T SSL_library_init
An den OpenSSL-Bibliotheken ist also offensichtlich nichts auszusetzen. Was könnte möglicherweise so etwas verursacht haben? Hier sind die drei Befehle, die zum Erstellen von OpenSSL verwendet werden:
export cross=arm-linux-androideabi-
./Configure android --prefix=~/openssl-arm
make CC="${cross}gcc" AR="${cross}ar r" RANLIB="${cross}ranlib"
Der Kompilierungsprozess verlief fehlerfrei, daher bin ich völlig verblüfft.
Warum erhalte ich Linker-Fehler, die auf eine Reihe von OpenSSL-Symbolen verweisen, die eindeutig vorhanden sind?