移植curl到android,且支持https和http2.0

依赖前两篇文章

  • libnghttp2 NDK 交叉编译
  • openssl NDK 交叉编译

创建工作目录,并进入

1
2
mkdir android
cd android

下载源码

1
2
wget https://curl.haxx.se/download/curl-7.53.1.tar.gz
tar xfz url-7.53.1.tar.gz

生成交叉编译工具链

1
$ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=arm --install-dir=./toolchain

导出环境变量(armeabi)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
export ANDROID_HOME=`pwd`
export TOOLCHAIN=$ANDROID_HOME/toolchain
export PKG_CONFIG_LIBDIR=$TOOLCHAIN/lib/pkgconfig
export CROSS_SYSROOT=$TOOLCHAIN/sysroot
export PATH=$TOOLCHAIN/bin:$PATH
export TOOL=arm-linux-androideabi
export CC=$TOOLCHAIN/bin/${TOOL}-gcc
export CXX=$TOOLCHAIN/bin/${TOOL}-g++
export LINK=${CXX}
export LD=$TOOLCHAIN/bin/${TOOL}-ld
export AR=$TOOLCHAIN/bin/${TOOL}-ar
export RANLIB=$TOOLCHAIN/bin/${TOOL}-ranlib
export STRIP=$TOOLCHAIN/bin/${TOOL}-strip
export ARCH_FLAGS="-mthumb"
export ARCH_LINK=
export CFLAGS="${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64"
export CXXFLAGS="${CFLAGS} -frtti -fexceptions"
export LDFLAGS="${ARCH_LINK}"

编译并安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cd curl-7.53.1
autoreconf -i
./configure --prefix=$TOOLCHAIN/sysroot/usr/local \
--with-sysroot=$TOOLCHAIN/sysroot \
--host=arm-linux-androideabi \
--with-ssl=$TOOLCHAIN/sysroot/usr/local \
--with-nghttp2=$TOOLCHAIN/sysroot/usr/local \
--enable-ipv6 \
--enable-static \
--enable-threaded-resolver \
--disable-dict \
--disable-gopher \
--disable-ldap --disable-ldaps \
--disable-manual \
--disable-pop3 --disable-smtp --disable-imap \
--disable-rtsp \
--disable-shared \
--disable-smb \
--disable-telnet \
--disable-verbose
make -j4
make install

卸载

1
make uninstall

configure完成后检查输出结果是否enable ssl, enable https, enable http2.0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Configured to build curl/libcurl:
curl version: 7.53.1
Host setup: arm-unknown-linux-androideabi
Install prefix: /Users/lizhangqu/Desktop/android/toolchain/sysroot/usr/local
Compiler: /Users/lizhangqu/Desktop/android/toolchain/bin/arm-linux-androideabi-gcc
SSL support: enabled (OpenSSL)
SSH support: no (--with-libssh2)
zlib support: enabled
GSS-API support: no (--with-gssapi)
TLS-SRP support: enabled
resolver: POSIX threaded
IPv6 support: enabled
Unix sockets support: enabled
IDN support: no (--with-{libidn2,winidn})
Build libcurl: Shared=no, Static=yes
Built-in manual: no (--enable-manual)
--libcurl option: enabled (--disable-libcurl-option)
Verbose errors: no
SSPI support: no (--enable-sspi)
ca cert bundle: no
ca cert path: no
ca fallback: no
LDAP support: no (--enable-ldap / --with-ldap-lib / --with-lber-lib)
LDAPS support: no (--enable-ldaps)
RTSP support: no (--enable-rtsp)
RTMP support: no (--with-librtmp)
metalink support: no (--with-libmetalink)
PSL support: no (libpsl not found)
HTTP2 support: enabled (nghttp2)
Protocols: FILE FTP FTPS HTTP HTTPS TFTP
SONAME bump: yes - WARNING: this library will be built with the SONAME
number bumped due to (a detected) ABI breakage.
See lib/README.curl_off_t for details on this.

armeabi-v7a

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=arm --install-dir=./toolchain
export TOOL=arm-linux-androideabi
export ARCH_FLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16"
export ARCH_LINK="-march=armv7-a -Wl,--fix-cortex-a8"
./configure --prefix=$TOOLCHAIN/sysroot/usr/local \
--with-sysroot=$TOOLCHAIN/sysroot \
--host=arm-linux-androideabi \
--with-ssl=$TOOLCHAIN/sysroot/usr/local \
--with-nghttp2=$TOOLCHAIN/sysroot/usr/local \
--enable-ipv6 \
--enable-static \
--enable-threaded-resolver \
--disable-dict \
--disable-gopher \
--disable-ldap --disable-ldaps \
--disable-manual \
--disable-pop3 --disable-smtp --disable-imap \
--disable-rtsp \
--disable-shared \
--disable-smb \
--disable-telnet \
--disable-verbose

x86

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=x86 --install-dir=./toolchain
export TOOL=i686-linux-android
export ARCH_FLAGS="-march=i686 -msse3 -mstackrealign -mfpmath=sse"
export ARCH_LINK=""
./configure --prefix=$TOOLCHAIN/sysroot/usr/local \
--with-sysroot=$TOOLCHAIN/sysroot \
--host=i686-linux-android \
--with-ssl=$TOOLCHAIN/sysroot/usr/local \
--with-nghttp2=$TOOLCHAIN/sysroot/usr/local \
--enable-ipv6 \
--enable-static \
--enable-threaded-resolver \
--disable-dict \
--disable-gopher \
--disable-ldap --disable-ldaps \
--disable-manual \
--disable-pop3 --disable-smtp --disable-imap \
--disable-rtsp \
--disable-shared \
--disable-smb \
--disable-telnet \
--disable-verbose

何大仙提供的shell脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/bin/sh
if [! -f "curl-7.53.1.tar.gz" ]; then
wget https://curl.haxx.se/download/curl-7.53.1.tar.gz
fi
if [! -d "curl-7.53.1" ]; then
tar zxf curl-7.53.1.tar.gz
fi
# env
if [-d "out/curl" ]; then
rm -fr "out/curl"
fi
mkdir "out"
mkdir "out/curl"
_compile() {
SURFIX=$1
TOOL=$2
ARCH_FLAGS=$3
ARCH_LINK=$4
ARCH=$5
if [! -d "out/curl/${SURFIX}" ]; then
mkdir "out/curl/${SURFIX}"
fi
if [! -d "toolchain_${SURFIX}" ]; then
$ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=${ARCH} --install-dir=./toolchain_${SURFIX}
fi
export ANDROID_HOME=`pwd`
export TOOLCHAIN=$ANDROID_HOME/toolchain_${SURFIX}
export PKG_CONFIG_LIBDIR=$TOOLCHAIN/lib/pkgconfig
export CROSS_SYSROOT=$TOOLCHAIN/sysroot
export PATH=$TOOLCHAIN/bin:$PATH
export CC=$TOOLCHAIN/bin/${TOOL}-gcc
export CXX=$TOOLCHAIN/bin/${TOOL}-g++
export LINK=${CXX}
export LD=$TOOLCHAIN/bin/${TOOL}-ld
export AR=$TOOLCHAIN/bin/${TOOL}-ar
export RANLIB=$TOOLCHAIN/bin/${TOOL}-ranlib
export STRIP=$TOOLCHAIN/bin/${TOOL}-strip
export ARCH_FLAGS=$ARCH_FLAGS
export ARCH_LINK=$ARCH_LINK
export CFLAGS="${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64"
export CXXFLAGS="${CFLAGS} -frtti -fexceptions"
export LDFLAGS="${ARCH_LINK}"
cd curl-7.53.1/
autoreconf -i
./configure --prefix=$TOOLCHAIN/sysroot/usr/local \
--with-sysroot=$TOOLCHAIN/sysroot \
--host=${TOOL} \
--with-ssl=$TOOLCHAIN/sysroot/usr/local \
--with-nghttp2=$TOOLCHAIN/sysroot/usr/local \
--enable-ipv6 \
--enable-static \
--enable-threaded-resolver \
--disable-dict \
--disable-gopher \
--disable-ldap --disable-ldaps \
--disable-manual \
--disable-pop3 --disable-smtp --disable-imap \
--disable-rtsp \
--disable-shared \
--disable-smb \
--disable-telnet \
--disable-verbose
make clean
make -j4
make install
cd ..
mv curl-7.53.1/lib/.libs/libcurl.a out/curl/${SURFIX}/
}
# arm
_compile "armeabi" "arm-linux-androideabi" "-mthumb" "" "arm"
# armv7
_compile "armeabi-v7a" "arm-linux-androideabi" "-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16" "-march=armv7-a -Wl,--fix-cortex-a8" "arm"
# arm64v8
_compile "arm64-v8a" "aarch64-linux-android" "" "" "arm64"
# x86
_compile "x86" "i686-linux-android" "-march=i686 -m32 -msse3 -mstackrealign -mfpmath=sse -mtune=intel" "" "x86"
# x86_64
_compile "x86_64" "x86_64-linux-android" "-march=x86-64 -m64 -msse4.2 -mpopcnt -mtune=intel" "" "x86_64"
# mips
_compile "mips" "mipsel-linux-android" "" "" "mips"
# mips64
_compile "mips64" "mips64el-linux-android" "" "" "mips64"
echo "done"
http://fucknmb.com/2017/05/24/CURL-NDK%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91/

CURL NDK 交叉编译相关推荐

  1. NDK交叉编译及so库导入Android项目

    前言 记录 NDK交叉编译及so库导入Android项目 的简单步骤,以备后续用到时查看. 环境 在Linux和Mac环境下,分别编译输出so库. Red Hat Enterprise Linux 8 ...

  2. 【Android NDK 开发】NDK 交叉编译 ( Ubuntu 中交叉编译动态库 | Android Studio 中配置使用第三方动态库 )

    文章目录 I . 动态库 与 静态库 II . 编译动态库 III. Android Studio 使用第三方动态库 IV . Android Studio 关键代码 V . 博客资源 I . 动态库 ...

  3. 【Android NDK 开发】NDK 交叉编译 ( NDK 函数库目录 | Linux 交叉编译环境搭建 | 指定头文件目录 | 指定函数库目录 | 编译 Android 命令行可执行文件 )

    文章目录 I . NDK platforms 目录下的 函数库 II . Ubuntu 配置 NDK 交叉编译环境 III . 同时指定编译的头文件和库文件 IV . 指定编译的头文件 V . 指定编 ...

  4. NDK 交叉编译常用变量

    总结一发NDK交叉编译的套路 工具说明 addr2line 把程序地址转换为文件名和行号.在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行 ...

  5. android 能调用gcc_如何在命令行下使用Android NDK交叉编译工具

    我们知道,在Linux下可以使用gcc来把一份C代码编译成为Linux上的可执行程序, 如: $ gcc -o main.out main.c 而Android平台提供了NDK工具包来交叉编译可以运行 ...

  6. 如何在命令行下使用Android NDK交叉编译工具

    我们知道,在Linux下可以使用gcc来把一份C代码编译成为Linux上的可执行程序, 如: $ gcc -o main.out main.c 而Android平台提供了NDK工具包来交叉编译可以运行 ...

  7. Mac下ndk交叉编译arm平台程序

    1.下载ndk 2.使用ndk交叉编译exp.c <1>.编写:Makefile NDK_ROOT=/Users/xxx/Documents/Android_SDK/android-ndk ...

  8. 自定义NDK交叉编译链(toolchain)

    背景:在Mac下编译FFmpeg库时,看了比较多的教程基本都失败,偶然间发现NDK在去GCC化,需要通过交叉编译来完成编译,这里记录下NDK交叉编译链过程 地址 https://developer.a ...

  9. NDK交叉编译qemu报错:undefined symbol: memfd_create

    我在用NDK交叉编译qemu的时候,老是报错如下内容: aarch64-linux-android29-clang -o subprojects/libvhost-user/link-test sub ...

最新文章

  1. python教程app下载地址_python教程
  2. python表白代码照片墙-python入会生成照片墙 利用python生成照片墙代码
  3. java 测量程序运行时间
  4. 服务器远程显示用户忙,服务器远程显示用户忙
  5. javascrip 中的一些方法
  6. OllyDbg捕捉MFC程序按钮事件
  7. java微服务,微在哪_Java:ChronicleMap第3部分,快速微服务
  8. python编写sql注入工具-利用Python实现SQL注入 - Python黑客编程入门系列 - 8
  9. android 自动截图分享,Android截图和分享
  10. 浅谈C#值类型和引用类型
  11. 国内常用的5个中文期刊论文网站,5个外文文献网站
  12. 简单图像灰度化处理python代码
  13. 基于51单片机的温度采集系统
  14. Newcoder lxh裁木棍 (不开long double见祖宗 ceil前不加long long也去
  15. 力扣的使用简介及代码编写说明
  16. word修改或删除脚注或尾注分隔符
  17. Java入门,最全面最简单的Java基础教程
  18. mysql截断表_mysql – 如何正确截断表?
  19. Go语言实现获取有道网页结果
  20. vue项目的首屏优化策略

热门文章

  1. Unity UGUI - Canvas / Camera
  2. C# try catch finally 执行
  3. 【LeetCode】50. Pow(x, n) (3 solutions)
  4. Oracle delete truncate drop 的区别
  5. 斯坦福《编程方法学》 笔记与资源
  6. 超强包管理器:Anaconda 安装
  7. 用C语言扩展Python的功能的实例
  8. jdbc获取结果行数_如何获取JDBC中的行数?
  9. 如何与室友相处?2017-12-08
  10. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170404