ROS交流群
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程序了。


Log in to reply