Ошибки, которые ссылаются на кучу неразрешенных символов OpenSSL, которые явно существуют?
Я создаю разделяемую библиотеку (назовем ее «foo»), которая использует другую библиотеку (назовем ее «bar»). «Бар» использует некоторые функции из OpenSSL.
Вот где возникают проблемы.
"bar" был скомпилирован как статическая библиотека, и, похоже, OpenSSL тоже. Поэтому, когда я связываю библиотеку ("foo"), я включаю:
объектные файлы для "foo"статическая библиотекаlibbar.a
Статические библиотеки OpenSSLlibcrypto.a
а такжеlibssl.a
Команда build выглядит примерно так:
g++ -Wl,-soname,libfoo.so -shared file1.o file2.o libbar.a \
libcrypto.a libssl.a -o libfoo.so
Тем не менее, я получаю массу ошибок:
ld: ./obj/libbar.a(file1.c.o): in function initialize_openssl:
ssl.c:117: error: undefined reference to 'SSL_library_init'
Выполнение следующей команды:
nm libssl.a | grep SSL_library_init
Производит следующий вывод:
00000000 T SSL_library_init
Очевидно, что с библиотеками OpenSSL все в порядке. Что могло вызвать что-то подобное? Вот три команды, используемые для сборки OpenSSL:
export cross=arm-linux-androideabi-
./Configure android --prefix=~/openssl-arm
make CC="${cross}gcc" AR="${cross}ar r" RANLIB="${cross}ranlib"
Процесс компиляции завершен без ошибок, поэтому я совершенно сбит с толку.
Почему я получаю ошибки компоновщика, которые ссылаются на кучу символов OpenSSL, которые явно существуют?