NDK交叉编译OPENSSL编译环境Linux x86_64
安装NDK
下载NDK
注意:ndk到版本17以后(>17)不支持gcc但是很多交叉编译需要用到gcc,因此不要下载版本太高的ndk
cd /usr/local
wget https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip
unzip android-ndk-r16b-linux-x86_64.zip
配置gcc环境
vim /etc/profile
在最下面加上
export PATH="/usr/local/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH"
然后保存后运行:
source /etc/profile
可以通过env
命令查看自己的环境变量是否添加成功
准备openssl
下载openssl并解压
cd /home
wget https://www.openssl.org/source/openssl-1.0.2t.tar.gz
tar -xf openssl-1.0.2t.tar.gz
cd openssl-1.0.2t
配置openssl
创建一个文件保存我们的指令:
vim myconfig
因为我们是编译给android的,所以目录放在了system,这样就不用改环境变量了。myconfig
的文件内容如下:
#!/bin/sh
export CROSS_COMPILE=arm-linux-androideabi-
./config --prefix=/system
给myconfig
添加运行权限
chmod +x myconfig
我们还需要修改config
文件
vim config
找到文件中:
read GUESSOS
修改为
#read GUESSOS
GUESSOS=armv7-linux-android
和大多数可以交叉编译的软件一样,openssl已经提供了有关android的配置,可以在Configure
中搜索android
查看。
但是由于编译环境,编译需求等各方面因素,我们总要修改其中一些细节。
vim Configure
用命令?android
找到以下内容
"android-armv7","gcc:-march=armv7-a -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
修改为
"android-armv7","gcc:-march=armv7-a -mandroid --sysroot=/usr/local/android-ndk-r16b/platforms/android-21/arch-arm -isystem /usr/local/android-ndk-r16b/sysroot/usr/include -isystem /usr/local/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=21 -pie -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
安装openssl
编译openssl
运行命令:
./myconfig
make&&make install
安装到android
将打包好的openssl下载到本地电脑后用adb连接android系统并安装到/system
目录
adb shell su
cd /data/local
mkdir system
chmod 777 system
exit
adb push D:/system/. /data/local/system
adb shell su
mount -o remount rw /system
cp -r /data/local/system/* /system
rm -rf /data/local/system