使用CMake编译生成安卓原生程序

技术文档网 2021-05-13
使用CMake编译生成安卓原生(C/C++)程序

使用NDK自带的make-standalone-toolchain.sh脚本生成指定的安卓硬件平台编译工具链

/ndkroot/build/tools/make-standalone-toolchain.sh –-toolchain=arm-linux-androideabi-4.9 --arch=arm --platform3

  • toolchain:指定要使用的平台的工具链,所有的工具链可以在/ndkroot/toolchains目录里找到
  • arch:指定目标平台类型
  • platform:指定要使用的安卓SDK的版本

运行完之后会在终端提示生成的工具链所在目录。

编辑CMakeLists.txt,使其使用安卓工具链编译程序

  • 指定工具链所在目录
    SET(NATIVE_ANDROID_TOOLCHAIN /tmp/ndk/arm-linux-androideabi)

  • 告诉CMake启用安卓跨平台编译,CMake会初始化安卓交叉编译环境
    SET(CMAKE_SYSTEM_NAME Android)

  • 配置要使用的AndroidSDK版本号,和生成工具链时配置的版本号(--platform参数)要一致
    SET(CMAKE_SYSTEM_VERSION 23)

  • 告诉CMake安卓编译工具链所在目录,CMake会使用${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/sysroot目录作为sysroot。如果没有指定, CMake会使用一个默认的目录
    SET(CMAKE_ANDROID_STANDALONE_TOOLCHAIN ${NATIVE_ANDROID_TOOLCHAIN})

  • 指定GCC的位置
    SET(CMAKE_C_COMPILER ${NATIVE_ANDROID_TOOLCHAIN}/bin/arm-linux-androideabi-gcc)

  • 指定CMake G++的位置
    SET(CMAKE_CXX_COMPILER ${NATIVE_ANDROID_TOOLCHAIN}/bin/arm-linux-androideabi-g++)

  • 安卓5.0以上要加上-fPIE选项
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE")

  • 安卓5.0以上要加上-fPIE选项
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIE -pie")

在Android原生程序里使用pthread的问题

pthread相关的函数都在android bionic库里,安卓工具链会默认链接这个库,所以在编译的时候,不用在cmake里加target_link_libraries(android_program PRIVATE pthread)选项,不然会编译不过

参考

https://developer.android.google.cn/ndk/guides/standalone_toolchain
https://blog.csdn.net/MingHuang2017/article/details/79000345

相关文章

  1. 硅谷互联网公司的开发流程

    开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro

  2. RESTful-表述性状态转移风格

    REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表->就是产品资源 最重要的是如何表示一个资源 地址即

  3. 稳定性思考

    产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能

  4. Supervisor守护队列发邮件

    安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et

  5. 安装libsodium,让服务器支持chacha20等加密方式

    用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod

随机推荐

  1. 硅谷互联网公司的开发流程

    开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro

  2. RESTful-表述性状态转移风格

    REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表->就是产品资源 最重要的是如何表示一个资源 地址即

  3. 稳定性思考

    产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能

  4. Supervisor守护队列发邮件

    安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et

  5. 安装libsodium,让服务器支持chacha20等加密方式

    用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod