Не в состоянии скомпилировать openssl для Android - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь скомпилировать openssl для Android и сталкиваюсь с некоторыми проблемами.Я следую инструкциям, приведенным в этой ссылке .

Я использую NDK версии r20 и OpenSSL 1.1.1c и на компьютере с Linux.

У меня две проблемы:

(1) Я могу скомпилировать библиотеки для архитектуры «android-arm», но получаю следующие ошибки при компиляции примера приложения.

./libcrypto.so: error: undefined reference to ‘sigdelset’
./libcrypto.so: error: undefined reference to ‘sigfillset’
./libcrypto.so: error: undefined reference to ‘tcgetattr’
./libcrypto.so: error: undefined reference to ‘tcsetattr’
apps/ocsp.o:ocsp.c:function ocsp_main: error: undefined reference to ‘signal’
apps/ocsp.o:ocsp.c:function ocsp_main: error: undefined reference to ‘signal’
apps/ocsp.o:ocsp.c:function ocsp_main: error: undefined reference to ‘signal’
apps/ocsp.o:ocsp.c:function ocsp_main: error: undefined reference to ‘signal’
apps/ocsp.o:ocsp.c:function process_responder: error: undefined reference to ‘__FD_SET_chk’
apps/ocsp.o:ocsp.c:function process_responder: error: undefined reference to ‘__FD_SET_chk’
apps/s_client.o:s_client.c:function s_client_main: error: undefined reference to ‘__FD_SET_chk’
apps/s_client.o:s_client.c:function s_client_main: error: undefined reference to ‘__FD_SET_chk’
apps/s_client.o:s_client.c:function s_client_main: error: undefined reference to ‘__FD_ISSET_chk’
apps/s_client.o:s_client.c:function s_client_main: error: undefined reference to ‘__FD_ISSET_chk’
apps/s_client.o:s_client.c:function s_client_main: error: undefined reference to ‘__FD_ISSET_chk’
apps/s_client.o:s_client.c:function s_client_main: error: undefined reference to ‘__FD_ISSET_chk’
apps/speed.o:speed.c:function speed_main: error: undefined reference to ‘atof’
apps/speed.o:speed.c:function speed_main: error: undefined reference to ‘atof’
apps/speed.o:speed.c:function speed_main: error: undefined reference to ‘atof’
apps/speed.o:speed.c:function speed_main: error: undefined reference to ‘atof’
clang: error: linker command failed with exit code 1 (use -v to see invocation)

(2) Я не могукомпилировать для любой другой архитектуры.Если я меняю архитектуру на «android-arm64» (или любую другую), я получаю следующие ошибки при компиляции библиотеки.

crypto/aes/aesv8-armx.S:5:1: error: Unknown arch name
.arch armv8-a+crypto
^
crypto/aes/aesv8-armx.S:17:2: error: invalid instruction, did you mean: stc, stm, str, swp, tst?
 stp x29,x30,[sp,#-16]!
 ^
crypto/aes/aesv8-armx.S:18:6: error: operand must be a register in range [r0, r15]
 add x29,sp,#0
 ^
crypto/aes/aesv8-armx.S:19:6: error: operand must be a register in range [r0, r12] or r14
 mov x3,#-1
 ^

Я меняю архитектуру, изменяя «architecture=android-arm» в«файл-пусковая-ш».Нужно ли изменять какие-либо другие переменные / макросы?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Мне просто нужно было открывать новую замазку для каждой новой архитектуры.

Я думаю, что некоторые конфигурации / переменные, экспортированные для одной архитектуры, не обновляются, когда я повторно запускаю сценарий с новой архитектурой.

0 голосов
/ 19 сентября 2019

Вы создали openssl для более нового уровня API, чем ваше приложение, поэтому библиотека не совместима с вашим приложением.Вот как я собираю openssl с r20:

$ export ANDROID_NDK=/path/to/ndk
$ export PATH=$ANDROID_NDK/toolchains/llvm/prebuilt/$HOST/bin:$PATH
$ path/to/openssl/Configure android-$ARCH -D__ANDROID_API__=$MINSDKVERSION --prefix=$INSTALLPATH --openssldir=$INSTALLPATH shared
$ make SHLIB_EXT=.so install_sw
...