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.aBiblioteki 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ą?

questionAnswers(1)

yourAnswerToTheQuestion