ROS交流群
ROS Group 产品服务
Product Service 开源代码库
Github 官网
Official website 技术交流
Technological exchanges 激光雷达
LIDAR ROS教程
ROS Tourials 深度学习
Deep Learning 机器视觉
Computer Vision
ROS Group 产品服务
Product Service 开源代码库
Github 官网
Official website 技术交流
Technological exchanges 激光雷达
LIDAR ROS教程
ROS Tourials 深度学习
Deep Learning 机器视觉
Computer Vision
如何利用cmake移植程序到Android
-
很多c++和c程序都使用cmake去管理程序依赖和编译程序。新版本的cmake已经支持 cross compile 程序到android平台。我们可以利用ndk和cmake很方便的移植程序。下面是一个移植的例子。
安装clang
因为新版本的ndk已经默认使用clang进行编译了
安装方式参照这里
安装新版本的cmake(>3.14)
wget -q https://github.com/Kitware/CMake/releases/download/v3.14.0-rc4/cmake-3.14.0-rc4.tar.gz tar -xzf cmake-3.14.0-rc4.tar.gz cd cmake-3.14.0-rc4/ env CC=$(which clang) CXX=$(which clang++) ./bootstrap --prefix=/usr --parallel=4 make sudo make install
下载NDK
cd .. wget -q https://dl.google.com/android/repository/android-ndk-r18b-linux-x86_64.zip unzip -qq android-ndk-r18b-linux-x86_64.zip export NDK_ROOT=$(pwd)/android-ndk-r18b
创建toolchain文件
toolchain文件是cmake用来设置编译工具链的文件。配置好此文件就可以让cmake cross compile android 程序了。
toolchain.cmake文件内容如下
# 设置编译Android set(CMAKE_SYSTEM_NAME Android) # 设置Android NDK 路径 set(CMAKE_ANDROID_NDK $ENV{NDK_ROOT}) # 设置 Android ABI set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a) # 设置target api版本 set(CMAKE_SYSTEM_VERSION 19) # 设置cmake寻找路径,自己随便创建一个文件夹, 依赖的相关库文件也要放在这里 set(CMAKE_FIND_ROOT_PATH /opt/arm) # 设置cmake搜寻文件的方式,防止使用系统中的其他不相干文件 set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
编译自己的程序
和正常编译方式差别不大,只要加上toolchain参数就可以了
mkdir build cd build cmake -DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN_ROOT/toolchain.cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX ..
TOOLCHAIN_ROOT是你的toolchain文件路径, INSTALL_PREFIX是之前设置的CMAKE_FIND_ROOT_PATH。这样就可以cross compile Android程序了。
-
@weijiz 你好,我想请教下一个问题。现在我有一个Android 10.0的源码工程,想移植采用cmake编译的项目到这个工程上,Android.bp文件要怎么写才能运行cmake命令?
-
@shaokangfeng 我没用过android.bp,我的是直接cmake在android studio外编译的。