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+ ...
随机推荐
- 用 Python 编写的 Python 解释器
Allison是Dropbox的工程师,在那里她维护着世界上最大的由Python客户组成的网络.在Dropbox之前,她是Recurse Center的引导师, … 她在北美的PyCon做过关于Pyt ...
- Scrum立会报告+燃尽图(十月二十六日总第十七次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246 项目地址:https://git.coding.net/zhang ...
- 团队开发NABCD
团队成员介绍: 李青:绝对的技术控,团队中扮演“猪”的角色,勤干肯干,是整个团队的主心骨,课上紧跟老师的步伐,下课谨遵老师的指令,课堂效率高,他的编程格言“没有编不出来的程序,只有解决不了的bug”. ...
- C++ Primer Plus学习:第九章
C++第九章:内存模型与名称空间 C++在内存中存储数据方面提供了多种选择.可直接选择保留在内存中的时间长度(存储持续性)以及程序哪一部分可以访问数据(作用域和链接)等. 单独编译 程序分为三个部分: ...
- BETA预发布演示视频
视频连接:优酷http://v.youku.com/v_show/id_XMTgxMjQxMjc0NA==.html?from=y1.7-2
- [翻译]API Guides - Layouts
官方文档地址:http://developer.android.com/guide/topics/ui/declaring-layout.html PS:API Guides里面的内容不免都简单些,翻 ...
- PHP 多维数组排序 array_multisort()
用PHP自带array_multisort函数排序 <?php $data = array(); $data[] = array('volume' => 67, 'edition' ...
- phpisset()和empty()函数区别
PHP的isset()函数 一般用来检测变量是否设置 格式:bool isset ( mixed var [, mixed var [, ...]] ) 功能:检测变量是否设置 返回值: 若变量不存在 ...
- 第115天:Ajax 中artTemplate模板引擎(一)
一.不分离与分离的比较 1.前后端不分离,以freemarker模板引擎为例,看一下不分离的前后端请求的流程是什么样的? 从上图可以看出,前后端开发人员的工作耦合主要在(3)Template的使用.后 ...
- equals与==区别
equals与==区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间 ...