Android ndk下编译libcurl
来源:互联网 发布:java达内和黑马哪个好 编辑:程序博客网 时间:2024/05/17 07:00
开发环境:Android ndk1.5_r1,cygwinm
libcurl 7.19.6 源码 下载地址 http://curl.haxx.se/
参考文章:http://blog.csdn.net/choujs/archive/2010/02/10/5304978.aspx
http://curl.haxx.se/mail/lib-2009-12/0071.html
如ndk开发一样,先刚libcurl源码放置 Android-ndk/source/sampel/ 下
在Android-ndk/apps 建相应的文件夹和application.mk
对ndk不熟悉可以先参考 Android ndk开发
1.在cygwin下,进入Android-ndk/ 目录, 运行 ./configure
自动checking 。(自过程需要花一些时间请耐心等待)
完成,自动创建相应配置文件
手动修改 lib/curl_config.h和src/curl_config.h,打开宏定义HAVE_LIBSSL、 HAVE_OPENSSL_CRYPTO_H、HAVE_OPENSSL_ERR_H、HAVE_OPENSSL_PEM_H、 HAVE_OPENSSL_PKCS12_H、HAVE_OPENSSL_RSA_H、HAVE_OPENSSL_SSL_H、 HAVE_OPENSSL_X509_H、USE_OPENSSL、USE_SSLEAY(但是注意android没有编译openssl中的 engine,因此不要打开宏定义HAVE_OPENSSL_ENGINE_H),同时注释掉宏定义HAVE_MALLOC_H和HAVE_IOCTL
(本段参考以上给出链接)
android.mk
- LOCAL_PATH:= $(call my-dir)
- common_CFLAGS := -Wpointer-arith -Wwrite-strings -Wunused -Winline -Wnested-externs -Wmissing-declarations -Wmissing-prototypes -Wno-long-long -Wfloat-equal -Wno-multichar -Wsign-compare -Wno-format-nonliteral -Wendif-labels -Wstrict-prototypes -Wdeclaration-after-statement -Wno-system-headers -DHAVE_CONFIG_H
- #########################
- # Build the libcurl library
- include $(CLEAR_VARS)
- include $(LOCAL_PATH)/lib/Makefile.inc
- CURL_HEADERS := /
- curlbuild.h /
- curl.h /
- curlrules.h /
- curlver.h /
- easy.h /
- mprintf.h /
- multi.h /
- stdcheaders.h /
- typecheck-gcc.h /
- types.h
- LOCAL_SRC_FILES := $(addprefix lib/,$(CSOURCES))
- LOCAL_C_INCLUDES += $(LOCAL_PATH)/include
- LOCAL_CFLAGS += /
- $(common_CFLAGS) /
- -I$(LOCAL_PATH)/include /
- -I/usr/include
- LOCAL_COPY_HEADERS_TO := libcurl/curl
- LOCAL_COPY_HEADERS := $(addprefix include/curl/,$(CURL_HEADERS))
- LOCAL_MODULE:= libcurl
- include $(BUILD_STATIC_LIBRARY)
在cygwin中运行
make APP=libcurl -B
出现2个警告信息:
/ssluse.c: In function 'Curl_ossl_init':
/ssluse.c:632: warning: nested extern declaration of 'ENGINE_load_builtin_engines'
/strerror.c: In function 'Curl_strerror':
/strerror.c:642: warning: initialization makes pointer from integer without a cast
其他均无报错。但成功生成了libcurl.a文件。
测试过程:
测试中,发现IDN 的lib包始终找不到。
找了android的模拟器的lib文件下,也没有找到libidn 。所以准备重新编译libcurl.a,去掉与IDN相关的部分。
再次编译成功。
但在模拟器上始终得到7(Failed to connect() to host or proxy)
郁闷了一阵,最后发现应该在AndroidManifest.xml中
加入
<uses-permission android:name="android.permission.INTERNET"/>
再次测试,成功得到0。
编译完成!
- Android ndk下编译libcurl
- Android ndk下编译libcurl
- Android ndk下编译libcurl
- android ndk 编译 libcurl
- windows 7下,给android ndk编译libcurl
- windows 7下NDK 编译libcurl
- eclipse下android ndk编译
- android ndk下编译ffmpeg
- android下ndk编译ffmpeg
- linux下编译libcurl
- MinGW 下编译 libcurl
- Window下编译libcurl
- android 编译 LIBCURL 库
- Ubuntu+NDK编译支持HTTPS的libcurl
- libcurl在android下的移植、编译与测试
- libcurl在android下的移植、编译与测试
- libcurl在android下的移植、编译与测试
- libcurl在android下的移植、编译与测试
- 解析“extern”
- mysql_query() 函数
- 硬件面试题
- doc删除7天前的文件(包含子目录):
- android 中文权限解释
- Android ndk下编译libcurl
- Android 4.0 中的PowerManager(电源管理--休眠唤醒)
- Android 学习 之 TextView结合SpannableString
- void * 的用法
- Android平台上利用opencv进行图像的边沿检测
- live555源代码简介
- 设置临时环境变量 避免多次重复设置或着修改系统环境变量
- hibernate抓取策略
- Linux系统下的多线程编程入门