Кросс-компиляция ошибок OpenSSL для Android NDK

Я новичок в NDK, и я следую этому руководству по созданию OpenSSL для Android, для этого я использую Windows 7 и Cygwin.

У меня возникают ошибки при создании библиотеки OpenSSL.

# From the 'root' directory $ . ./setenv-android.sh $ cd openssl-1.0.1g/ $ perl -pi -e 's/install: all install_docs install_sw/install: install_docs install_sw/g' Makefile.org $ ./config shared no-ssl2 no-ssl3 no-comp no-hw no-engine --openssldir=/usr/local/ssl/$ANDROID_API $ make depend $ make all 

Когда я пытаюсь make depend команду make depend меня есть 2 ошибки:

cryptlib.c:171:3: error: #error "Inconsistency between crypto.h and cryptlib.c" # error "Inconsistency between crypto.h and cryptlib.c"

в строке cryplib.c 171 говорится:

 #if CRYPTO_NUM_LOCKS != 41 # error "Inconsistency between crypto.h and cryptlib.c" #endif 

Я не знаю, как исправить эту ошибку.

другой – uid.c:77:10: error: #include expects "FILENAME" or #include OPENSSL_UNISTD

если я изменю строку 77 в uid.c на #include я получаю сообщение об ошибке в Makefile, поэтому я не знаю, можно ли это исправить, ошибка зависела от Makefile.

 depend: @[ -z "$(THIS)" -o -f buildinf.h ] || touch buildinf.h # fake buildinf.h if it does not exist @[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDE) $(DEPFLAG) -- $(PROGS) $(LIBSRC) @[ -z "$(THIS)" -o -s buildinf.h ] || rm buildinf.h @[ -z "$(THIS)" ] || (set -e; target=depend; $(RECURSIVE_MAKE) ) @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi 

Другой вопрос: могу ли я использовать это руководство для создания библиотеки OpenSSL для 64-битной арки. (x86_64, arm64 и mips64) Я не нашел информацию об OpenSSL для Android в этих архитектурах, все сообщения об этом стары, и эти арки не существуют для Android

РЕДАКТИРОВАТЬ

Я нашел способ частично решить мою проблему (не самый лучший, но он работает), проблема была связана с некоторыми ошибками в некоторых путях, потому что я пытался использовать Cywin для Windows, а некоторые файлы (я не какие) пытаясь достичь некоторых путей, которых нет, потому что я был в Windows, а не в Linux, поэтому я просто установил Ubuntu на виртуальную машину и снова попробую это руководство , и я могу скомпилировать библиотеки, и у меня есть libcrypto.a libcrypto.so libssl .a libssl.so для Android ARM, x86, mips, ARM64 и x86_64.

Но библиотеки не работают для x86_64 и ARM64, когда я пытаюсь скомпилировать .c, используя android.mk для x86_64 или arm64 eabi, он не компилируется из-за некоторых ошибок совместимости, но если попытается скомпилировать тот же .c файл с «x86_64» или «arm-64» для x86 или arm eabi, который он компилирует, поэтому они все еще являются 32-битными библиотеками, это не ответ, потому что мне нужны библиотеки для всей архитектуры (по крайней мере для armv5, armv7, armv8-64, x86, x86_64), это всего лишь небольшой шаг.

Я буду обновлять, чтобы помочь кому-то с той же проблемой, и если кто-то хочет мне помочь.

Когда я пытаюсь выполнить команду make depend, у меня есть 2 ошибки:

 cryptlib.c:171:3: error: #error "Inconsistency between crypto.h and cryptlib.c" # error "Inconsistency between crypto.h and cryptlib.c" 

Проблема с символическими ссылками. tar zxvf архив снова с tar zxvf . Затем проверьте, что файлы заголовков не имеют длины 0.

Также см. Несоответствие между crypto.h и cryptlib.c в списке рассылки OpenSSL. И как скопировать символический файл ссылки из Linux в Windows, а затем обратно в Linux, но все еще сохраняя его как символическую ссылку на Stack Overflow.

Используя это руководство и изменяя файл setenv-android.sh вы можете легко скомпилировать openssl для arm, x86 и mips.

Вам просто нужно изменить параметры _ANDROID_NDK _ANDROID_ARCH _ANDROID_EABI _ANDROID_API

Примечание : для mips вам нужно будет добавить некоторые строки в файле вокруг

вокруг линии 120:

  arch-mips) ANDROID_TOOLS="mipsel-linux-android-gcc mipsel-linux-android-ranlib mipsel-linux-android-ld" ;; 

вокруг линии 200:

 if [ "$_ANDROID_ARCH" == "arch-mips" ]; then export MACHINE=mipsel export RELEASE=2.6.37 export SYSTEM=android export ARCH=mips export CROSS_COMPILE="mipsel-linux-android-" fi 

если вы последуете руководству, вы получите libcrypto.a, libssl.a, libcrypto.so и libssl.so.

если вы хотите, чтобы библиотеки на 64-битной архитектуре вы могли извлечь из устройства с помощью adb, все устройства Android имеют libcrypto.so и libssl.so в /system/lib64 для 64-битной версии (только на 64-битном устройстве) и /system/lib 32bits, вы можете использовать для этого эмулятор, если вы можете захотеть 64-битную версию статических библиотек (libcrypto.a и libssl.a) в этой ссылке, вы можете найти способ сделать это.