为android arm64构建libcurl

为android arm64构建libcurl,curl,android-ndk,cross-compiling,autotools,Curl,Android Ndk,Cross Compiling,Autotools,我正在尝试使用android NDK r13b构建libcurl 7.50.3的arm64版本,目标是android API 19。我已经设法使armv7正常工作,但在使用arm64时不断出现错误。这些是我的导出标志: NDK_ROOT="/opt/android-ndk-r13b" export SYSROOT="${NDK_ROOT}/platforms/android-19/arch-arm" export CPPFLAGS="-I${SYSROOT}/usr/include --sysr

我正在尝试使用android NDK r13b构建libcurl 7.50.3的arm64版本,目标是android API 19。我已经设法使armv7正常工作,但在使用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 \
然后再做。我也尝试过将主机和目标设置为ARMLinuxAndroidABI,但我一直遇到同样的错误。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

我错过什么了吗?我是否误解了要使用的目标或主机

确保同时使用
--host
(设置为arm64/android)和
--build
(设置为您的系统,可能是x86_64-pc-linux-gnu)调用
/configure
。后者应该自动检测,但并不总是这样。这样,脚本将知道您正在进行交叉编译,而不会试图执行它构建的程序

在使用自动工具时,我相信您需要使用
--target
进行交叉编译<代码>--host是您正在构建的机器。如果Host=Target(您正在Aarch64机器上构建),则不指定任何一个
--target=aarch64 linux-android
可能不是有效的目标,并且
--host=aarch64 linux-android
可能是错误的。据我所知。另请看,这是不正确的--build是您正在运行的系统,-host是您希望编译程序在其上运行的系统,-target用于构建交叉编译器。有关完整的解释,请参阅我在上的旧博文。除了Diego所说的之外,您还需要将
SYSROOT
更改为指向
android-21/arch-arm64
,链接才能成功。(这与在其他体系结构上支持API 19无关;自从ABI出现在该版本中以来,没有任何运行低于API 21的arm64设备。)