文档章节

android下使用libcurl和c-ares

WolfCS
 WolfCS
发布于 2016/09/29 17:36
字数 643
阅读 710
收藏 2

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

为android NDK编译配置c-ares:

1. 设置环境变量NDK:

export NDK=/media/data/dev_tools/android-ndk-r9d

2. 工具链

$NDK/build/tools/make-standalone-toolchain.sh \
--platform=android-9 \
--install-dir=/tmp/my-android-toolchain

3. 为编译工具设置环境变量

export PATH=/tmp/my-android-toolchain/bin:$PATH
export SYSROOT=/tmp/my-android-toolchain/sysroot
export CC="arm-linux-androideabi-gcc --sysroot $SYSROOT"

4. 下载c-ares

URL为http://c-ares.haxx.se/download/。

最新版本为1.10。

5. 解压并配置

# Configure
cd c-ares-1.10.0 && mkdir build
./configure --prefix=$(pwd)/build \
--host=arm-linux-androideabi \
--disable-shared \
CFLAGS="-march=armv7-a"

拿meld等对比工具对比配置前后的两份code的内容,就知道,这个过程主要是创建了Makefile,ares_config.h等文件,并重新生成了ares_build.h。这些文件主要用于根据环境对c-ares的行为进行定制。

6. 编译

有两种方法可以用于编译c-ares,一是直接在项目外,利用我们前面做的配置,编译c-ares为单独的so,具体需要执行的命令为:

# Build and install
make && make install

二是将c-ares的source code放进我们项目的jni目录下,与我们项目的其它的source code一起编译。

(1). 将c-ares的source code copy到jni/3rd/curl/c-ares下。

(2). 修改Android.mk,在适当的位置加入如下的内容:

#c-ares-1.10.0 code
LOCAL_SRC_FILES += 3rd/curl/c-ares/ares__close_sockets.c \
	3rd/curl/c-ares/ares__get_hostent.c \
	3rd/curl/c-ares/ares__read_line.c \
	3rd/curl/c-ares/ares__timeval.c \
	3rd/curl/c-ares/ares_cancel.c \
	3rd/curl/c-ares/ares_create_query.c \
	3rd/curl/c-ares/ares_data.c \
	3rd/curl/c-ares/ares_destroy.c \
	3rd/curl/c-ares/ares_expand_name.c \
	3rd/curl/c-ares/ares_free_hostent.c \
	3rd/curl/c-ares/ares_free_string.c \
	3rd/curl/c-ares/ares_gethostbyname.c \
	3rd/curl/c-ares/ares_getsock.c \
	3rd/curl/c-ares/ares_init.c \
	3rd/curl/c-ares/ares_library_init.c\
	3rd/curl/c-ares/ares_llist.c \
	3rd/curl/c-ares/ares_nowarn.c \
	3rd/curl/c-ares/ares_options.c \
	3rd/curl/c-ares/ares_parse_a_reply.c \
	3rd/curl/c-ares/ares_parse_aaaa_reply.c \
	3rd/curl/c-ares/ares_process.c \
	3rd/curl/c-ares/ares_query.c \
	3rd/curl/c-ares/ares_search.c \
	3rd/curl/c-ares/ares_send.c \
	3rd/curl/c-ares/ares_strerror.c \
	3rd/curl/c-ares/ares_timeout.c \
	3rd/curl/c-ares/ares_version.c \
	3rd/curl/c-ares/bitncmp.c \
	3rd/curl/c-ares/inet_net_pton.c


LOCAL_C_INCLUDES += $(LOCAL_PATH)/3rd/curl/c-ares

c-ares总共有50多个c源文件,为什么只编译这些,而不把其它的那些一并加入编译呢?

判断要编译这些文件而可以不编译其它那些的方法为,给编译libcurl的CFLAGS加上-DUSE_ARES,编译器和链接器会告诉我们到底需要哪些文件。比如,由于没有加入某个文件,而报了因为引用到那个文件中定义的函数的undefined reference error了,我们就知道一定要加入那个文件了。依次方法多次尝试,终于找全了我们需要编译的全部的源文件。

如果我们编译时,没有获得configure时生成的ares_build.h,ares_config.h等文件,则编译时就会提示找不到头文件之类的错误。

Done。

References:

libcurl-for-android

libcurl official site

c-ares official site

how to build c-ares library in android (NDK)

© 著作权归作者所有

WolfCS

WolfCS

粉丝 82
博文 147
码字总数 505184
作品 4
杭州
高级程序员
私信 提问
加载中

评论(5)

WolfCS
WolfCS 博主

引用来自“godisdog8”的评论

引用来自“godisdog8”的评论

你好,我也在编译libcurl,但总是编译不成功。我是在windows环境下,不知道怎么生成那些.h文件。你能把你的.h文件发给我一下吗??谢谢!

引用来自“WolfCS”的评论

github 上有 libcurl 的移植,https://github.com/hanpfei/libcurl-for-android.git,可以参考一下。
不好意思,如果有时间的话加一下我的qq吧,有不懂的咨询一下您,542395656,谢谢!谢谢!谢谢!

我的QQ号1143690639
g
godisdog8

引用来自“godisdog8”的评论

你好,我也在编译libcurl,但总是编译不成功。我是在windows环境下,不知道怎么生成那些.h文件。你能把你的.h文件发给我一下吗??谢谢!

引用来自“WolfCS”的评论

github 上有 libcurl 的移植,https://github.com/hanpfei/libcurl-for-android.git,可以参考一下。
不好意思,如果有时间的话加一下我的qq吧,有不懂的咨询一下您,542395656,谢谢!谢谢!谢谢!
g
godisdog8

引用来自“godisdog8”的评论

你好,我也在编译libcurl,但总是编译不成功。我是在windows环境下,不知道怎么生成那些.h文件。你能把你的.h文件发给我一下吗??谢谢!

引用来自“WolfCS”的评论

github 上有 libcurl 的移植,https://github.com/hanpfei/libcurl-for-android.git,可以参考一下。
谢谢你的回复,我能加一下你的qq或微信吗。如果你有时间的话可以指点一下!!!
WolfCS
WolfCS 博主

引用来自“godisdog8”的评论

你好,我也在编译libcurl,但总是编译不成功。我是在windows环境下,不知道怎么生成那些.h文件。你能把你的.h文件发给我一下吗??谢谢!
github 上有 libcurl 的移植,https://github.com/hanpfei/libcurl-for-android.git,可以参考一下。
g
godisdog8
你好,我也在编译libcurl,但总是编译不成功。我是在windows环境下,不知道怎么生成那些.h文件。你能把你的.h文件发给我一下吗??谢谢!
使用curl 和 libjson 完成联网和数据解析

项目就要做到联网了, 选择了用curl库来完成联网部分,网上看了下curl使用,要是简单的联下网,测测数据什么的,还是挺简单的,但要用到游戏里面,那就有必要进一步的封装了。 由于C++这块还...

cocosgame
2012/08/06
2.7K
1
Curl的毫秒超时的一个”Bug”

作者: Laruence( ) 本文地址: http://www.laruence.com/2014/01/21/2939.html 最近我们的服务在升级php使用的libcurl, 期望新版本的libcurl支持毫秒级的超时, 从而可以更加精细的控制后端的接...

BearCatYN
2015/04/29
156
0
[Android]更改Configuration来读取不同的Apk Resource

按照Android的设计, Apk中的Resource可以被设计成按照不同的语言等配置来取不同的值。比如:String.xml in valuesString.xml in values-en 当然也可以根据不同的SIM来取不同的值,比如, Str...

清水湾2012
2013/09/13
597
0
howto run a apk under android system(just linux?) using c/c++ code?

now i am writing a commandline application which run under android(linux), i encounter a problem: i use libcurl download a apk in my code, and install it? now howto run it using......

wens07
2014/12/09
172
0
libcurl在android下的移植、编译与测试以及java接口的封装

curl是利用URL语法在命令行方式下工作的文件传输工具 它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。 curl同样支持HTTPS认证,HTTP POST方法, HTTP PUT...

zhoulc
2013/03/05
9.4K
2

没有更多内容

加载失败,请刷新页面

加载更多

nginx反向代理+负载均衡+服务器宕机解决办法

反向代理 作用:保证系统安全,不暴露服务器IP,利用nginx服务器,利用内网ip进行访问,避免出现攻击服务器的情况 启动本地tomact,127.0.0.1:8080可以访问到tomcat管理页面 效果:通过 bbs....

Jack088
22分钟前
2
0
返回IEnumerable 与IQueryable相比 [关闭]

返回IQueryable<T>与IEnumerable<T>之间有什么区别? IQueryable<Customer> custs = from c in db.Customerswhere c.City == "<City>"select c;IEnumerable<Customer> custs = from c i......

技术盛宴
29分钟前
2
0
开放下载 | 《Knative 云原生应用开发指南》开启云原生时代 Serverless 之门

点击下载《Knative 云原生应用开发指南》 自 2018 年 Knative 项目开源后,就得到了广大开发者的密切关注。Knative 在 Kubernetes 之上提供了一套完整的应用 Serverless 编排服务,让应用开发...

阿里巴巴云原生
33分钟前
2
0
解密淘宝推荐实战,打造 “比你还懂你” 的个性化APP

手淘推荐简介 手淘推荐的快速发展源于2014年阿里“All in 无线”战略的提出。在无线时代,手机屏幕变小,用户无法同时浏览多个视窗,交互变得困难,在这样的情况下,手淘借助个性化推荐来提升...

阿里云官方博客
35分钟前
2
0
内核程序中进程的pid,handle,eprocess之间相互转换的方法

在内核程序开发中,我们常常需要取得某进程的pid或句柄,或者需要检索进程的eprocess结构,很多API函数需要的参数也不同,所以掌握pid<->handle<->eprocess相互转换的方法会大大提高我们的开...

simpower
37分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部