本文主要是介绍Cmake NDK交叉编译Android平台程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
当我们需要把我们的C++程序编译成Android平台的so库时,就需要用到交叉编译,有两种方法
目录
一:利用NDK进行编译
1.首先安装NDK
2.直接cmake,
二,独立的交叉编译工具链
1.安装独立的交叉编译工具链
2.makefile编译
自己使用的是方法一,直接用NDK的方法,方法二未尝试。
一:利用NDK进行编译
1.首先安装NDK
安装方法在: https://blog.csdn.net/u013171226/article/details/109572332
按照上面链接的步骤一安装NDK就好了,不要安装交叉编译工具链,
2.直接cmake,
利用cmake编译Android平台的程序时,只需要把X86平台的cmake ..修改为下面的格式:
cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \-DANDROID_ABI="armeabi-v7a" \-DANDROID_NDK=$ANDROID_NDK \-DANDROID_PLATFORM=android-22 \..
上面的ANDROID_NDK是你安装NDK时的路径,然后上面的配置是armv7架构平台的,如果是armv8平台的就配置成arm64-v8a,其实我们可以在$ANDROID_NDK/build/cmake/android.toolchain.cmake文件中找到下面的内容:
if(ANDROID_ABI STREQUAL "armeabi-v7a with NEON")set(ANDROID_ABI armeabi-v7a)set(ANDROID_ARM_NEON TRUE)
elseif(ANDROID_TOOLCHAIN_NAME AND NOT ANDROID_ABI)if(ANDROID_TOOLCHAIN_NAME MATCHES "^arm-linux-androideabi-")set(ANDROID_ABI armeabi-v7a)elseif(ANDROID_TOOLCHAIN_NAME MATCHES "^aarch64-linux-android-")set(ANDROID_ABI arm64-v8a)elseif(ANDROID_TOOLCHAIN_NAME MATCHES "^x86-")set(ANDROID_ABI x86)elseif(ANDROID_TOOLCHAIN_NAME MATCHES "^x86_64-")set(ANDROID_ABI x86_64)elseif(ANDROID_TOOLCHAIN_NAME MATCHES "^mipsel-linux-android-")set(ANDROID_ABI mips)elseif(ANDROID_TOOLCHAIN_NAME MATCHES "^mips64el-linux-android-")set(ANDROID_ABI mips64)endif()
cmake之后就直接编译即可。
二,独立的交叉编译工具链
1.安装独立的交叉编译工具链
安装方法见: https://blog.csdn.net/u013171226/article/details/109572332
2.makefile编译
安装完交叉编译工具链之后,可以吧x86平台的makefile中的gcc修改为交叉编译工具链,然后进行编译。
这篇关于Cmake NDK交叉编译Android平台程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!