Ubuntu+NDK编译支持HTTPS的libcurl
参考文章:
1.NDK环境配置 http://blog.csdn.net/smfwuxiao/article/details/6587709
2.libcurl的配置修改 http://piggyq.com/pen/compile-libcurl-and-openssl-on-android-using-ndk.html
假设已经编译好了openssl,并且安装目录(头文件和库的所在的目录)为openssl-android
第一步:配置NDK环境(包括系统环境SYSROOT和编译器CC)
android ndk 提供脚本,允许自己定制一套工具链。例如:
$NDK/build/tools/make-standalone-toolchain.sh --platform=android-5 --install-dir=/tmp/my-android-toolchain [ --arch=x86 ]
将会在/tmp/my-android-toolchain 中创建 sysroot 环境和 工具链。--arch 选项选择目标程序的指令架构,默认是为 arm。
如果不加 --install-dir 选项,则会创建 /tmp/ndk/<toolchain-name>.tar.bz2。
(执行 make-standalone-toolchain.sh --help 查看帮助。)
运行之后,这样使用:
$ export PATH=/tmp/my-android-toolchain/bin:$PATH
$ export CC=arm-linux-androideabi-gcc
$ export CXX=arm-linux-androideabi-g++
$ export CXXFLAGS="-lstdc++"
执行完以上设置环境变量的命令之后,就可以直接编译了(例如,执行 ./configure 然后 make 得到的就是 arm 程序了)。
不用再设定 sysroot, CC 了。而且,可以使用 STL,异常,RTTI。
第二步:配置libcurl
进入curl根目录,运行./configure --host=arm-linux-androideabi --with-ssl=/openssl-android
为了保证生成的配置文件正确,需要手动确认一下,打开lib/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_config.h中有定义,
不注释的话在编译过程中会有很多警告(但是能正确编译通过)
第三步:编译Libcurl
修改Android.mk,删除我们不需要的curl模块,在LOCAL_C_INCLUDES变量的值中增加openssl-android/include和openssl-android/crypto.
再按照以下几种方式修改Android.mk.修改完后,将所在目录package/Android改为package/jni,使用终端进入package,然后执行ndk-build即可。
1.编译ARM版的(依赖openssl的共享库)
先在libcurl前增加动态库模块,使libssl.so等拷贝到正确位置,如下。
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
#using libssl.so
include $(CLEAR_VARS)
LOCAL_MODULE := libssl
LOCAL_SRC_FILES := /home/administrator/openssl-android/libs/armeabi/libssl.so
include $(PREBUILT_SHARED_LIBRARY)
#using libcrypto.so
include $(CLEAR_VARS)
LOCAL_MODULE := libcrypto
LOCAL_SRC_FILES :=/home/administrator/openssl-android/libs/armeabi/libcrypto.so
include $(PREBUILT_SHARED_LIBRARY)
# 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
LOCAL_SRC_FILES := $(addprefix lib/,$(CSOURCES))
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include/\
$(LOCAL_PATH)/lib/\
$(LOCAL_PATH)/../openssl-android/include/\
$(LOCAL_PATH)/../openssl-android/crypto/
LOCAL_SYSTEM_SHARED_LIBRARIES+= libssl libcrypto libz
LOCAL_CFLAGS += $(common_CFLAGS)
LOCAL_COPY_HEADERS_TO := libcurl/curl
LOCAL_COPY_HEADERS := $(addprefix include/curl/,$(CURL_HEADERS))
LOCAL_MODULE:= libcurl
LOCAL_MODULE_TAGS := optional
ALL_PREBUILT += $(LOCAL_PATH)/NOTICE
$(LOCAL_PATH)/NOTICE: $(LOCAL_PATH)/COPYING | $(ACP)
$(copy-file-to-target)
include $(BUILD_STATIC_LIBRARY)
2.编译ARM版的(依赖Openssl的静态库)
Android.mk修改与3类似,稍微改一下静态库路径即可
3.编译x86版的(依赖openssl静态库)
修改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
include $(CLEAR_VARS)
LOCAL_MODULE := libssl
LOCAL_SRC_FILES := /home/administrator/openssl-android/obj/local/x86/libssl.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libcrypto
LOCAL_SRC_FILES :=/home/administrator/openssl-android/obj/local/x86/libcrypto.a
include $(PREBUILT_STATIC_LIBRARY)
#########################
# 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
LOCAL_SRC_FILES := $(addprefix lib/,$(CSOURCES))
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include/\
$(LOCAL_PATH)/lib/\
$(LOCAL_PATH)/../openssl-android/include/\
$(LOCAL_PATH)/../openssl-android/crypto/
LOCAL_STATIC_LIBRARIES += libssl libcrypto
LOCAL_SYSTEM_SHARED_LIBRARIES += libz
LOCAL_CFLAGS += $(common_CFLAGS)
LOCAL_COPY_HEADERS_TO := libcurl/curl
LOCAL_COPY_HEADERS := $(addprefix include/curl/,$(CURL_HEADERS))
LOCAL_MODULE:= libcurl
LOCAL_MODULE_TAGS := optional
ALL_PREBUILT += $(LOCAL_PATH)/NOTICE
$(LOCAL_PATH)/NOTICE: $(LOCAL_PATH)/COPYING | $(ACP)
$(copy-file-to-target)
include $(BUILD_STATIC_LIBRARY)
在Android.mk的同目录中增加Application.mk,并增加以下内容:
APP_ABI := x86
TARGET_ARCH := x86
Ubuntu+NDK编译支持HTTPS的libcurl的更多相关文章
- windows下编译支持https的libcurl
本文参考http://blog.csdn.net/fragmentalice/article/details/39430293特此感谢.公司项目中用到几个http get请求,用的libcurl开源库 ...
- Ubuntu+NDK编译openssl(为了Android上使用libcurl且支持HTTPS协议)
为了Android上使用libcurl且支持HTTPS协议,需要依赖openssl,因此先来了解一下如何编译OpenSSL1.编译ARM下的共享库(默认的)我使用的是guardianproject的o ...
- Ubuntu+NDK编译openssl
为了Android上使用libcurl且支持HTTPS协议,需要依赖openssl,因此先来了解一下如何编译OpenSSL1.编译ARM下的共享库(默认的)我使用的是guardianproject的o ...
- vs2013 配置支持https的libcurl
需求:在vs2013上配置支持https协议的libcurl. 环境:win7(64位),vs2013 一.安装openssl: 需要先安装nasm和ActivePerl. nasm需要手动配置环境变 ...
- Android NDK学习(七):NDK 编译支持 C++特有的库
如果你的C++代码中出现了很多C++特有的库,例如<iostream>,<list>等,那么你还需要在jni的文件夹下添加一个Application.mk文件,文件内容为: A ...
- 在window平台下,自己DIY编译OpenSSL,Libcurl ,来支持HTTPS传输协议
1 缘起 原来就了解些libcurl,一直没有机会在项目实际使用libcurl. 恰好最近一个云存储的项目,服务器使用openstack 恰好我负责现在的一个云存储SDK c++版本的开发中. 与 ...
- libcurl的封装,支持同步异步请求,支持多线程下载,支持https
最近在做一个项目,需要用到http get post等 需求分析需要做到同步和异步,异步请求的返回以可选的回调通知的方式进行. 本人以Linux为例,一步一步的来实现. 配置并且编译libcurl我以 ...
- 【转】如何在Windows+VS2005使用最新静态libcurl 7.35.0获取网页数据,支持HTTPS
地址: http://blog.csdn.net/hujkay作者:Jekkay Hu(34538980@qq.com)关键词:Windows,curl,ssl, visual c++ 2005, ...
- ndk 编译 boost 库,支持serialization
Boost库是一个可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一. Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容.在C+ ...
随机推荐
- pygame (1) 移动小乌龟
小乌龟图片素材: 第一个简单的小游戏: 小乌龟会不断的移动,并且每当到达窗口的左右边界的时候,还会自动的掉头. 源码: import pygame import sys# 导入sys模块,退出时使用 ...
- Bracket Sequences Concatenation Problem括号序列拼接问题(栈+map+思维)
A bracket(括号) sequence is a string containing only characters "(" and ")".A regu ...
- 基于NABCD评论探路者团队贪吃蛇作品及改进建议
1.根据(不限于)NABCD评论作品的选题 N:随着人们生活压力越来越大,需要去去缓解压力,并且也需要不断进步,学习英语知识. A:它是基于java开发的一款软件,采用逐个吃字母,加长蛇身,增强记忆的 ...
- 测试与优化bugbugbugbug
单元测试
- tensorflow之分类学习
写在前面的话 MNIST教程是tensorflow中文社区的第一课,例程即训练一个 手写数字识别 模型:http://www.tensorfly.cn/tfdoc/tutorials/mnist_be ...
- 18软工实践-第八次作业(课堂实战)-项目UML设计(团队)
目录 团队信息 分工选择 课上分工 课下分工 ToDolist alpha版本要做的事情 燃尽图 UML 用例图 状态图 活动图 类图 部署图 实例图 对象图 时序图 包图 通信图 贡献分评定 课上贡 ...
- HDU 2105 The Center of Gravity
http://acm.hdu.edu.cn/showproblem.php?pid=2105 Problem Description Everyone know the story that how ...
- 安恒杯-babysql
1. 库名 ?id= and extractvalue(,(select group_concat(0x3a,schema_name) from information_schema.schemata ...
- php缩略图
/*引入文件Easyphpthumbnail.class.php 引用地址:http://www.itdaodan.com/article-detail-id-252.html */ class ...
- PHP中is_null()方法
is_null — 检测变量是否为 NULL bool is_null ( mixed $var ) 如果 var 是 null 则返回 TRUE,否则返回 FALSE. 举例: $x=" ...