开发环境: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中

加入

    

再次测试,成功得到0。

编译完成!

 

更多相关文章

  1. Linux x86 编译 Android(安卓)遭遇 gnu/stubs-64.h
  2. Android(安卓)declare-styleable:自定义控件的属性(attr.xml,Type
  3. Android预定义样式
  4. Android自定义控件布局刷新自定义控件回到初始位置问题的解决
  5. Ubunu下搭建android NDK环境
  6. Android(安卓)4.0.3 源码编译中添加外部jar包和外部so到apk的方
  7. android linux 基础知识总结
  8. Error generating final archive
  9. linux 配置安装android sdk自动下载缺少文件

随机推荐

  1. 《Android应用开发精解》前言
  2. Android开发规范
  3. Android异步处理二:使用AsyncTask异步更新
  4. 【Android】Android插件开发 —— 打开插
  5. Android中系统状态栏的隐藏和显示
  6. 构建Android应用程序
  7. android初探
  8. Android(安卓)多语言动态切换
  9. 从Android(安卓)8.0源码的角度剖析Androi
  10. Android如何加载大图,防止OOM