【问题标题】:Building libcurl for android arm64为 android arm64 构建 libcurl
【发布时间】:2017-05-14 22:43:06
【问题描述】:

我正在尝试构建一个 arm64 版本的 libcurl 7.50.3,使用 android NDK r13b,针对 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 \

然后制作。我也尝试将主机和目标设置为 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

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

【问题讨论】:

  • 在使用Autotools的时候,我相信你需要使用--target进行交叉编译。 --host 是您正在构建的机器。如果 Host=Target(你在 Aarch64 机器上构建),那么不要指定任何一个。 --target=aarch64-linux-android 可能不是 是一个有效的目标,--host=aarch64-linux-android 可能是错误的。据我所知,there's no way to get Autotools to tell you the valid triplets。另见Cross Compiling For ARM With Autoconf
  • 这是不正确的。 --build 是您正在运行的系统,--host 是您希望编译程序在其上运行的系统,--target 用于build 交叉编译器。请参阅我在blog.flameeyes.eu/2009/01/the-canonical-target 的旧博客文章以获取完整说明。
  • 除了Diego说的,还需要将SYSROOT改为指向android-21/arch-arm64,才能链接成功。 (这对于在其他架构上支持 API 19 无关紧要;因为 ABI 出现在那个版本中,所以没有运行低于 API 21 的任何 arm64 设备。)

标签: curl android-ndk cross-compiling autotools


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-22
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多