2016-12-30 5 views
0

Я пытаюсь создать версию libcurl 7.50.3 с arm64, используя андроид NDK r13b, ориентируясь на Android API 19. Мне удалось заставить работать armv7, но я продолжаю получать ошибки с arm64. Это мои экспортные флаги:Создание libcurl для android arm64

NDK_ROOT="/opt/android-ndk-r13b" 
export SYSROOT="${NDK_ROOT}/platforms/android-19/arch-arm" 
export CPPFLAGS="-I${SYSROOT}/usr/include --sysroot=${SYSROOT}" 
export CFLAGS="--sysroot=${SYSROOT}" 
export CC=$(${NDK_ROOT}/ndk-which gcc) 
export LD=$(${NDK_ROOT}/ndk-which ld) 
export CPP=$(${NDK_ROOT}/ndk-which cpp) 
export CXX=$(${NDK_ROOT}/ndk-which g++) 
export AS=$(${NDK_ROOT}/ndk-which as) 
export AR=$(${NDK_ROOT}/ndk-which ar) 
export RANLIB=$(${NDK_ROOT}/ndk-which ranlib) 

И мой настроить вызов

LIBS="-ldl -lssl -lcrypto" ./configure \ 
--disable-ftp \ 
--disable-file \ 
--disable-ldap \ 
--disable-dict \ 
--disable-telnet \ 
--disable-gopher \ 
--disable-tftp \ 
--disable-manual \ 
--disable-shared \ 
--disable-imap \ 
--disable-pop3 \ 
--disable-rtsp \ 
--disable-smb \ 
--disable-smtp \ 
--enable-threaded-resolver \ 
--enable-ipv6 \ 
--with-ssl=${SSL_DIR} \ 
--host=aarch64-linux-android \ 
--target=aarch64-linux-android \ 

А потом сделать. Я пробовал с хостом и целевым набором в arm-linux-androideabi, но я все равно получаю ту же ошибку. Config.log говорит

configure:4488: ./conftest 
./configure: line 4490: ./conftest: cannot execute binary file: Exec format error 
configure:4492: $? = 126 
configure:4499: error: in `/home/sossisos/build_curl_android/curl_7.50.3': 
configure:4501: error: cannot run C compiled programs. 
If you meant to cross compile, use `--host'. 
See `config.log' for more details 

Я что-то упустил? Я неправильно понял, какую цель или хозяин использовать?

+0

При использовании Autotools, я считаю, что вам нужно использовать '--target' для кросс-компиляции. '--host' - это машина, на которой вы строите. Если Host = Target (вы строите машину Aarch64), то не указывайте ни один. '--target = aarch64-linux-android' может * not * быть допустимой мишенью, а' --host = aarch64-linux-android', вероятно, ошибочен. Насколько я знаю, [нет способа заставить Autotools сообщать вам действительные триплеты] (https://lists.gnu.org/archive/html/autoconf/2015-02/msg00006.html). См. Также [Кросс-компиляция для ARM с помощью Autoconf] (http://stackoverflow.com/q/15234959). – jww

+3

Это неверно. --build - это система, в которой вы работаете, --host - это система, в которой вы хотите, чтобы скомпилированная программа работала, а -target - использовать * build * cross-compilers. См. Мое старое сообщение в блоге на https://blog.flameeyes.eu/2009/01/the-canonical-target/ для полного объяснения. –

+0

В дополнение к тому, что сказал Диего, вам также нужно изменить 'SYSROOT', чтобы указать на' android-21/arch-arm64', для того, чтобы привязать его к успеху. (Это не имеет значения для поддержки API 19 на других архитектурах, нет устройств arm64, работающих на чем-то меньшем, чем API 21, поскольку ABI появилась в этой версии.) – mstorsjo

ответ

3

Убедитесь, что вы вызовите ./configure с обоими --host (набор для arm64/Android) и --build (набор для вашей системы, скорее всего, x86_64-рс-Linux-гну). Последний должен быть автоопределен, но это не всегда так. Таким образом, скрипт будет знать, что вы выполняете кросс-компиляцию, и он не будет пытаться выполнить созданные им программы.

Смежные вопросы