移植openssl到android

创建工作目录,并进入

1
2
mkdir android
cd android

下载源码

1
2
wget https://www.openssl.org/source/openssl-1.1.0e.tar.gz
tar xfz openssl-1.1.0e.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
export ANDROID_HOME=`pwd`
export TOOLCHAIN=$ANDROID_HOME/toolchain
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
cd openssl-1.1.0e/
./Configure android \
--prefix=$TOOLCHAIN/sysroot/usr/local \
--with-zlib-include=$TOOLCHAIN/sysroot/usr/include \
--with-zlib-lib=$TOOLCHAIN/sysroot/usr/lib \
zlib \
no-asm \
no-shared \
no-unit-test
make -j4
make install

卸载

1
make uninstall

armeabi-v7a

1
2
3
4
5
6
7
8
9
10
11
12
13
$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 android-armv7 \
--prefix=$TOOLCHAIN/sysroot/usr/local \
--with-zlib-include=$TOOLCHAIN/sysroot/usr/include \
--with-zlib-lib=$TOOLCHAIN/sysroot/usr/lib \
zlib \
no-asm \
no-shared \
no-unit-test

x86

1
2
3
4
5
6
7
8
9
10
11
12
13
$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 android-x86 \
--prefix=$TOOLCHAIN/sysroot/usr/local \
--with-zi686lib-include=$TOOLCHAIN/sysroot/usr/include \
--with-zlib-lib=$TOOLCHAIN/sysroot/usr/lib \
zlib \
no-asm \
no-shared \
no-unit-test

何大仙提供的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
#!/bin/sh
if [! -f "openssl-1.1.0e.tar.gz" ]; then
wget https://www.openssl.org/source/openssl-1.1.0e.tar.gz
fi
if [! -d "openssl-1.1.0e" ]; then
tar zxf openssl-1.1.0e.tar.gz
fi
# env
if [-d "out/openssl" ]; then
rm -fr "out/openssl"
fi
mkdir "out"
mkdir "out/openssl"
_compile() {
SURFIX=$1
TOOL=$2
ARCH_FLAGS=$3
ARCH_LINK=$4
CFGNAME=$5
ARCH=$6
if [! -d "out/openssl/${SURFIX}" ]; then
mkdir "out/openssl/${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 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 openssl-1.1.0e/
./Configure ${CFGNAME} --prefix=$TOOLCHAIN/sysroot/usr/local --with-zlib-include=$TOOLCHAIN/sysroot/usr/include --with-zlib-lib=$TOOLCHAIN/sysroot/usr/lib zlib no-asm no-shared no-unit-test
make clean
make -j4
#make install
make install_sw
make install_ssldirs
cd ..
mv openssl-1.1.0e/libssl.a out/openssl/${SURFIX}/
mv openssl-1.1.0e/libcrypto.a out/openssl/${SURFIX}/
}
# arm
_compile "armeabi" "arm-linux-androideabi" "-mthumb" "" "android" "arm"
# armv7
_compile "armeabi-v7a" "arm-linux-androideabi" "-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16" "-march=armv7-a -Wl,--fix-cortex-a8" "android-armeabi" "arm"
# arm64v8
_compile "arm64-v8a" "aarch64-linux-android" "" "" "android64-aarch64" "arm64"
# x86
_compile "x86" "i686-linux-android" "-march=i686 -m32 -msse3 -mstackrealign -mfpmath=sse -mtune=intel" "" "android-x86" "x86"
# x86_64
_compile "x86_64" "x86_64-linux-android" "-march=x86-64 -m64 -msse4.2 -mpopcnt -mtune=intel" "" "android64" "x86_64"
# mips
_compile "mips" "mipsel-linux-android" "" "" "android-mips" "mips"
# mips64
_compile "mips64" "mips64el-linux-android" "" "" "linux64-mips64" "mips64"
echo "done"
http://fucknmb.com/2017/05/24/openssl-NDK%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91/

openssl NDK 交叉编译相关推荐

  1. CURL NDK 交叉编译

    移植curl到android,且支持https和http2.0 依赖前两篇文章 libnghttp2 NDK 交叉编译 openssl NDK 交叉编译 创建工作目录,并进入 1 2 mkdir an ...

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

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

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

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

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

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

  5. NDK 交叉编译常用变量

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

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

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

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

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

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

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

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

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

最新文章

  1. 大跌眼镜!杭州一程序员年薪 30 万,竟靠偷车厘子缓解压力?
  2. 怎么寻回执行页内操作时的错误磁盘的数据
  3. Servlet学习笔记 Servlet原理
  4. linux-Centos7安装python3并与python2共存
  5. Codeforces Round #FF (Div. 1) A. DZY Loves Sequences
  6. canvas笔记-canvas中用户与图形交互
  7. 技术转管理,用什么来拯救自己?
  8. 2017年SEO行业的前景以及未来趋势
  9. Voronoi diagram应用
  10. Java自动跳转到debug模式的解决方法
  11. 下列软件包有未满足的依赖关系:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
  12. java 中如何连接 oracle 数据库
  13. R语言数据可视化-条形图
  14. 51单片机教程:51单片机驱动四个8*8点阵,拼凑16*16点阵显示标准汉字。
  15. mysql主从配置duxi_配置MySQL主从复制(一主一从)
  16. 001.宋浩老师《线性代数》笔记(第一章行列式)
  17. HIS系统是什么意思?HIS系统的主要功能有哪些?
  18. 七日杀16.1 服务器修改器,七日杀三十二项32位修改器_七日杀 a16.1b1多功能三十二项修改器-66街机网...
  19. 为淘宝的sdk模板安装java的JDK环境
  20. 可添加头尾的RecycleView的实现

热门文章

  1. cas sso单点登录 登录过程和登出过程原理说明
  2. 各种Camera,总有一款适合你(二)
  3. 重写StyleSheetTheme
  4. MYSQL-Can't connect to MySQL server on 'localhost' (10061)
  5. CPU寻址过程方框图
  6. linux图形界面编程基本知识
  7. latex大写运算符号
  8. [云炬创业学笔记]第二章决定成为创业者测试4
  9. ustc小道消息20211227
  10. MATLAB2017 on winserver2012 第48周运行日志