使用CMake编译生成安卓原生程序
使用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
相关文章
- 硅谷互联网公司的开发流程
开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro
- RESTful-表述性状态转移风格
REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表->就是产品资源 最重要的是如何表示一个资源 地址即
- 稳定性思考
产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能
- Supervisor守护队列发邮件
安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et
- 安装libsodium,让服务器支持chacha20等加密方式
用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod
随机推荐
- 硅谷互联网公司的开发流程
开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro
- RESTful-表述性状态转移风格
REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表->就是产品资源 最重要的是如何表示一个资源 地址即
- 稳定性思考
产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能
- Supervisor守护队列发邮件
安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et
- 安装libsodium,让服务器支持chacha20等加密方式
用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod