openssl NDK 交叉编译

移植openssl到android

创建工作目录,并进入

 
     
1
2
 
     
mkdir android
cd android

下载源码

 
     
1
2
 
      
     
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/
为了进行openssl1.0.2的交叉编译,你需要按照以下步骤进行操作: 1. 首先,你需要下载openssl的正确版本,你提供的引用中给出了下载地址为https://www.openssl.org/source/openssl-1.0.2h.tar.gz。 2. 解压下载的压缩包,可以使用命令tar -xzvf openssl-1.0.2h.tar.gz。 3. 进入解压后的openssl目录,即openssl-1.0.2h。 4. 进行配置操作,你可以使用命令./Configure linux-generic32 no-shared no-asm --cross-compile-prefix=/opt/toolschain/ingenic/mips-gcc720-glibc229-r5.1.4/bin/mips-linux-gnu-。这里的配置选项根据你的平台和交叉编译工具链的路径进行相应的修改。 5. 修改Makefile文件,将其中的CFLAG参数进行修改,可以使用命令vi Makefile打开文件进行编辑。在CFLAG参数中添加适当的选项,比如-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -O3 -fomit-frame-pointer -muclibc -Wall。 这样,你就可以按照以上步骤完成openssl1.0.2的交叉编译过程了。请确保你使用的是正确的版本和正确的配置选项。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [交叉编译--OPENSSL 交叉编译](https://blog.csdn.net/jisuanji111111/article/details/126557073)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [openssl交叉编译](https://blog.csdn.net/ggggyj/article/details/120304125)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值