Błędy odnoszące się do wielu nierozwiązanych symboli OpenSSL, które wyraźnie istnieją?
Buduję bibliotekę współdzieloną (nazwiemy ją „foo”), która korzysta z innej biblioteki (nazwiemy ją „bar”). „bar” korzysta z niektórych funkcji OpenSSL.
Oto problematyczne powierzchnie.
„bar” został skompilowany jako statyczna biblioteka i wydaje się, że OpenSSL też. Więc kiedy łączę bibliotekę („foo”), dołączam:
pliki obiektów dla „foo”biblioteka statycznalibbar.a
Biblioteki statyczne OpenSSLlibcrypto.a
ilibssl.a
Komenda budowania wygląda mniej więcej tak:
g++ -Wl,-soname,libfoo.so -shared file1.o file2.o libbar.a \
libcrypto.a libssl.a -o libfoo.so
Jednak mam mnóstwo błędów:
ld: ./obj/libbar.a(file1.c.o): in function initialize_openssl:
ssl.c:117: error: undefined reference to 'SSL_library_init'
Uruchomienie następującej komendy:
nm libssl.a | grep SSL_library_init
Tworzy następujące dane wyjściowe:
00000000 T SSL_library_init
Oczywiście nie ma nic złego w bibliotekach OpenSSL. Co mogło spowodować coś takiego? Oto trzy polecenia używane do budowania OpenSSL:
export cross=arm-linux-androideabi-
./Configure android --prefix=~/openssl-arm
make CC="${cross}gcc" AR="${cross}ar r" RANLIB="${cross}ranlib"
Proces kompilacji zakończył się bez żadnych błędów, więc jestem całkowicie zaskoczony.
Dlaczego otrzymuję błędy linkera, które odnoszą się do wielu symboli OpenSSL, które wyraźnie istnieją?