android测试libcurl库,构建android arm64的libcurl

我正在尝试构建一个arm64版本的libcurl 7.50.3,使用Android NDK r13b,目标是Android API 19.我设法使armv7工作,但是我一直使用arm64得到错误。这是我的出口标志:构建android arm64的libcurl

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 \

然后make。我已经尝试将主机和目标设置为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

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

2016-12-30

Sossisos

+0

当使用Autotools时,我相信你需要使用'--target'进行交叉编译。 '--host'是你正在建造的机器。如果主机=目标(您正在Aarch64机器上构建),则不要指定任何一个。 '--target = aarch64-linux-android'可能不是有效的目标,'--host = aarch64-linux-android'可能是错误的。据我所知,[无法让Autotools告诉你有效的三胞胎](https://lists.gnu.org/archive/html/autoconf/2015-02/msg00006.html)。另请参阅[使用Autoconf针对ARM进行交叉编译](http://stackoverflow.com/q/15234959)。 –

+3

这是不正确的。 --build是你正在运行的系统,--host是你希望编译的程序运行的系统,--target用于* build *交叉编译器。有关完整的解释,请参阅我的旧博客文章https://blog.flameeyes.eu/2009/01/the-canonical-target/。 –

+0

除了Diego所说的之外,还需要将'SYSROOT'更改为'android-21/arch-arm64',以便链接成功。 (在其他体系结构上支持API 19并不重要,因为在该版本中出现了ABI,所以没有任何arm64设备运行的API比API 21少)。 –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android libcurl.a是一个静态,它是用C语言编写的libcurl网络传输的编译结果。静态是一种在编译时被链接到应用程序中的,通过将的对象代码直接嵌入到应用程序中,从而使应用程序可以在没有其他外部依赖项的情况下独立运行。 静态的使用方式是将其与应用程序进行链接,这样应用程序就可以使用静态中定义的函数和变量。在Android开发中,可以使用Android Studio等工具将libcurl.a添加到项目中,并在项目配置中进行链接设置。 使用Android libcurl.a静态可以为Android应用程序提供强大而灵活的网络传输功能。libcurl支持多种协议,包括HTTP、HTTPS、FTP等,并提供了一系列功能来方便地进行网络通信,例如数据传输、下载、上传等。通过使用libcurlAndroid应用程序可以方便地与网络资源进行交互,并实现各种功能,如下载文件、上传数据等。 静态的一个优点是在编译时能够减少应用程序的体积,因为的代码嵌入到应用程序中,不需要在运行时再次加载。同时,静态的使用也可以提高应用程序的性能,因为的代码可以被编译器优化,以达到更好的执行效率。 总之,Android libcurl.a静态是一个有用的工具,可以为开发Android应用程序提供强大的网络传输功能,通过与应用程序进行链接,实现各种网络通信需求,同时也能减少应用程序的体积和提升性能。 ### 回答2: Android libcurl.a是一个静态,它是CurlAndroid平台上的编译结果。Curl是一个开源的网络传输工具,支持多种协议(包括HTTP、FTP、Telnet等)和一些常见的功能(如文件上传、下载等)。 libcurl.a的静态形式可以将Curl的功能和代码整合到一个独立的二进制文件中,这意味着在编译时会将Curl中的函数和依赖项静态链接到应用程序中。 使用libcurl.a的静态可以使开发者在编译阶段直接将Curl的功能包含到应用程序中,不再需要运行时加载动态文件。这样可以减少应用程序的体积并提升性能,但也意味着更新Curl需要重新编译应用程序。 要在Android项目中使用libcurl.a,可以将静态文件复制到项目的jni目录下,然后在JNI层的C/C++代码中引用该。具体步骤包括在Android.mk中添加libcurl.a的编译指令,并在代码中使用#include导入相关的Curl头文件。然后可以在应用程序中使用Curl提供的功能,如发送HTTP请求等。 总之,Android libcurl.a是一个静态,可以将Curl的功能整合到Android应用程序中,帮助开发者在应用层面进行网络传输和其他网络相关操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值