OpenSSL скомпилирован для запуска на архитектуре Android x86

Я стукнулся головой о стену: я получил opensl, чтобы скомпилировать все для архитектуры андроидской армейской архитектуры, но для x86 гораздо меньше помощи, и ничего на ней я не могу найти на сайте openSSL.

Что-то, что я в конце концов нашел, было статьей intel ( https://software.intel.com/en-us/articles/using-intel-advanced-encryption-standard-new-instructions-on-android#openssl ) при использовании openssl для x86 Архитектуры, а после создания автономной инструментальной цепочки и прохождения их предоставленного кода и исправления некоторых из них я нахожусь в точке, где make будет почти полностью пройден через компиляцию до сбоя с кучей неопределенной ссылки на выражения «XXX» , Я не могу понять, как пройти мимо этого в этот момент, любая помощь будет очень признательна.

Прошу прощения, если это окажется несколько тривиальным, я очень новичок.

Трассировка:

/private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: Ts.o: в функции ts_main: ts.c (.text + 0x1e8a): ошибка: неопределенная ссылка на «TS_RESP_set_tst_info» /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux- Android / 4.6 /../../../../ i686-linux-android / bin / ld: ts.o: в функции ts_main: ts.c (.text + 0x1ea2): ошибка: неопределенная ссылка на ' TS_TST_INFO_free '/private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ Ld: srp.o: в функции srp_verify_user: srp.c (.text + 0xb3): ошибка: неопределенная ссылка на 'SRP_create_verifier' /private/tmp/my-android-toolchain/bin/../lib/gcc/i686- Linux-android / 4.6 /../../../../ i686-linux-android / bin / ld: srp.o: в функции srp_create_user: srp.c (.text + 0x1e3): error: undefined reference К 'SRP_create_verifier' /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/ Bin / ld: srp.o: в функции srp_main: srp.c (.tex T + 0x1014): ошибка: неопределенная ссылка на «X509_get_default_cert_area» /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../ ../i686-linux-android/bin/ld: srp.o: в функции srp_main: srp.c (.text + 0x10c0): ошибка: неопределенная ссылка на 'SRP_get_default_gN' / private / tmp / my-android-toolchain / Bin /../ lib / gcc / i686-linux-android / 4.6 /../../../../ i686-linux-android / bin / ld: srp.o: в функции srp_main: srp.c (.text + 0x16dd): ошибка: неопределенная ссылка на 'TXT_DB_insert'

Извините, из-за того, что они указывали eabi в скрипте setenv, я думал, что это означает, что вы можете выбрать только один из ARM-eabi, так как другие архитектуры не были указаны с ним. Я был в инструкциях openSSL для android для компиляции ARM, но я не знал, что он также будет работать для x86. Если это так, я чувствую себя глупым. Я установил опцию –sysroot для sysroot на независимой от андроида брелка.

Это команды, которые я использовал для компиляции x86, согласно статье Intel по этому вопросу.

export CC="$STANDALONE_TOOCHAIN_PATH/bin/i686-linux-android-gcc -mtune=atom -march=atom --sysroot=$STANDALONE_TOOCHAIN_PATH/sysroot" export AR=$STANDALONE_TOOCHAIN_PATH/bin/i686-linux-android-ar export RANLIB=/private/tmp/my-android-toolchain/bin/i686-li ./Configure android-x86 -DOPENSSL_IA32_SSE2 -DAES_ASM -DVPAES_ASM 

Кажется, я понял это. Используя код, который я опубликовал (поскольку код в статье немного синтаксически неверен, но идея правильная), и после создания пользовательской инструментальной цепочки Android, я смог успешно выполнить работу после новой установки OpenSSL. Я предполагаю, что работа, которую я сделал на этом, чтобы скомпилировать файлы архитектуры ARM. * .a и * .so, вероятно, сработала, когда я вернулся к ней для архитектуры x86.

Если вы не знаете, как создать автономную toolchain (используйте опцию простого способа): http://www.kandroid.org/ndk/docs/STANDALONE-TOOLCHAIN.html

Но для x86 гораздо меньше помощи, и на нем ничего нет, что я могу найти на сайте openSSL

Я считаю, что вики OpenSSL охватывают тему: OpenSSL и Android .


Что-то, что я в конце концов нашел, было статьей Intel … об использовании openssl для архитектуры x86

Вы просто выбираете правильный аби. Согласно вики-странице Android, вы настраиваете следующее в сценарии setenv-android.sh :

  • _ANDROID_NDK – версия NDK. Например, android-ndk-r8e
  • _ANDROID_EABI – версия инструментов EABI. Например, arm-linux-androideabi-4.6
  • _ANDROID_API – уровень API. К примеру, андроид-14

На вики есть целый подраздел: Отредактируйте скрипт кросс-компиляции . Пожалуйста, сообщите нам, есть ли пробелы. (Я тестировал его против ARM, но не x86).

Есть много ABI для выбора. Вероятно, вам нужны x86-4.6 и API 14 или API 18 .

Введите описание изображения здесь

Возможно, вам придется изменить Configure , но не кажется, что вы так далеко, что трудно сказать на данный момент. Вам не нужно изменять configure – цель android-x86 уже присутствует.


/private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: Ts.o: в функции ts_main: ts.c (.text + 0x1e8a): ошибка: неопределенная ссылка на «TS_RESP_set_tst_info» /private/tmp/my-android-toolchain/bin/../lib/gcc/i686-linux- андроид / 4,6 /../../../../ i686-Linux-андроид / бен / л.д.

Это почти похоже на то, что вам не хватает --sysroot . Что-то умудрено.

Вероятно, вы должны показать нам одну из ваших линий компиляции и линию ссылок (какой из файлов C выглядит, а не свалка всех из них).

У меня есть аналогичный ответ здесь https://stackoverflow.com/a/37043683/2210080, но это для ArmV7. Просто выполните ту же процедуру, что и в предыдущем, но используйте этот скрипт setenv-android.sh: https://github.com/rjmangubat23/OpenSSL/blob/master/x86/setenv-android.sh