android支持https通讯,交叉编译 libcurl libnghttp2 oponssl - Go语言中文社区

android支持https通讯,交叉编译 libcurl libnghttp2 oponssl


最近公司在弄亚马逊echo项目,官网的demo是用java写的,但考虑到性能等一系列问题还是决定用C来实现,开发环境选择android,亚马逊服务器支持的是https通讯协议,
因此需要在android中将https一系列有关的C库交叉编译进去。

这里经过多番考察,我们最终选择libcurl库(why? 因为只有Libcurl我们这边和亚马秀通讯成功了,不用他还能用谁。。。。)libcurl 要想支持https 和 ssl 是依赖于nghttp2和openssl的,因此首先必须将后两个库编译出来,下面开始编译。

首先是环境搭建(ubuntu 14.04):
android NDK版本这里选择 r11b,下面是ndk的网盘链接
http://pan.baidu.com/s/1gfEDVpD
当然你也可以去官网下载最新的r13版本,不过估计会很慢,而且还需要翻墙
https://developer.android.google.cn/ndk/downloads/index.html
libcurl 官网下载:
git clone https://github.com/curl/curl.git
libnghttp2:
git clone https://github.com/nghttp2/nghttp2.git
openssl:
git clone https://github.com/openssl/openssl.git
所以说常逛github还是有好处的

android编译器环境搭建:
首先通过android NDK 生成工具链
这里写图片描述
接下来配置环境变量,我的bashrc 配置如下:
这里写图片描述

红色箭头LDFLAGS是告诉编译器从哪里寻找需要的库文件;
CPPFLAGS可选的编译器选项,

黄色箭头将工具链路径添加到环境变量中;
SYSROOT的含义可以参照这篇文章:
http://blog.csdn.net/shell_albert/article/details/45689801
总之一句话就是x86 平台默认是去根目录/usr/local/下面寻找头文件和库,加上sysroot之后编译的时候就回去ndk下面去寻找需要的头文件和库了。

蓝色箭头指定系统用到的c和 c++编译器

openssl库的编译:
环境搭建完成之后编译就很简单了,这里我写了个脚本
这里写图片描述

之后 make , make install_sw(安装的时候不带doc文件)
下面重点来了,将install目录中lib目录下的.so文件(libssl.so,libcryto.so)拷贝到
android-ndk-r11b/latformsandroid-21arch-armusrlib 下,生成的头文件拷贝到
ndk目录usrinclude下面

nghttp2库的编译
在nghttp2目录下有两个android有关的配置文件, android-config,android-make
我们只要运行android-config,
在运行android-make就可以了
这里注意 android-config 文件中需要修改一下默认工具链(clang改成gcc)
这里写图片描述

之后将生成的库文件(libnghttp2.a)拷贝到ndk目录下

libcurl库的编译
当nghttp2 和 openssl两个库都编译完毕,并且bashrc中设置好了sysroot之后,Libcurl就好编译了,直接上脚本:
这里写图片描述

一句话搞定,这里面–with-nghttp2 和 –with-ss后面之所以没加参数是因为bashrc中配置的环境变量回使编译器编译的时候自动去ndk下面去寻找对应的头文件和库

将生成的libcurl.so拷贝到ndk目录下在弄个makefile就可以编写自己的代码了
至于makefile如何书写就不是本篇文章考虑的内容了。

好了,第一遍博客就到这里,以后一定要养成写博客的习惯,这样也方便自己记忆

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/fuxy3/article/details/71097738
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 21:09:41
  • 阅读 ( 1672 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢