听说libjpeg因为资金问题将停止后续开发,内心深感惋惜,最新的3.0.0版本或将成为绝响,于是想搞一发最新的3.0.0版本的交叉编译纪念一下这位老朋友。
一、环境配置
系统:Ubuntu 22.04
交叉编译器:ndk-r21e
libjpeg:3.0.0版本(github传送门)
二、编译动态库
好的,接下来开始交叉编译。
进入源码目录,新建执行脚本文件。
touch build.sh
sudo chmod +x build.sh
打开脚本文件,输入如下编译脚本内容:
#!/bin/bash
NDK_PATH=/home/selivert/ndk/android-ndk-r21e #更换成本地ndk路径
TOOLCHAIN=clang
ANDROID_VERSION=21 #android-21 5.0
CMAKE_PATH=`pwd`/CMakeFiles
if [ -d "${CMAKE_PATH}" ] ; then
rm -r ${CMAKE_PATH}
fi
#32
cmake -G"Unix Makefiles" \
-DANDROID_ABI=armeabi-v7a \
-DCMAKE_INSTALL_PREFIX=`pwd`/android/v7 \
-DENABLE_STATIC=FALSE \
-DANDROID_ARM_MODE=arm \
-DANDROID_PLATFORM=android-${ANDROID_VERSION} \
-DANDROID_TOOLCHAIN=${TOOLCHAIN} \
-DCMAKE_ASM_FLAGS="--target=arm-linux-androideabi${ANDROID_VERSION}" \
-DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \
`pwd`/
make
make install
make clean
if [ -d "${CMAKE_PATH}" ] ; then
rm -r ${CMAKE_PATH}
fi
#64
cmake -G"Unix Makefiles" \
-DANDROID_ABI=arm64-v8a \
-DCMAKE_INSTALL_PREFIX=`pwd`/android/v8 \
-DENABLE_STATIC=FALSE \
-DANDROID_ARM_MODE=arm \
-DANDROID_PLATFORM=android-${ANDROID_VERSION} \
-DANDROID_TOOLCHAIN=${TOOLCHAIN} \
-DCMAKE_ASM_FLAGS="--target=aarch64-linux-android${ANDROID_VERSION}" \
-DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \
`pwd`/
make
make install
具体的内容是从GitHub中的BUILDING.md中获取的,笔者稍加改动,合成一个脚本。
然后执行脚本,静等编译结束吧。
看一下编译结果:(为了方便显示,我删除了一些结果之外的内容)
编译完成, 看一下是不是我们期望的运行在arm上的动态库(32位为列)
ok,至此编译成功。