android ndk编译go,利用 CMake 和 NDK 交叉编译 Android 下的可执行程序

之前开发 Android 下的二进制程序都是开个 jni 目录, 手写 Android.mk, 然后调用 ndk-build 生成可执行文件, 这样的步骤. 但最近的工程需要用到 Lua 解析器执行 Lua 脚本, 因此需要处理的文件就多了, 再继续闷头写 Android.mk 就显得效率很低. 况且 CLion 也是通过 CMake 构建工程的, 因此就打算试试看能不能通过 CMake 来构建 Android 下的可执行文件.

结果当然是 OK, 现将基本配置记录如下.

基础环境

Ubuntu 14.04

CMake 3.3.0

android-ndk-r10e-linux-x86_64

准备 NDK Standalone Toolchain

虽然 NDK 的 prebuilt 目录中有提供编译链工具, 但使用起来并不方便. 所幸 NDK 还提供了一个可生成独立编译链工具的脚本. 因此先通过该脚本生成独立编译链.

$NDK/build/tools/make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-4.8 --install-dir=~/app/ndk_toolchain

该脚本的大部分选项都有默认值, 一般只需指定这两个参数就行了:

--toolchain 该参数用于设置要使用的编译链, 在 $NDK/toolchains 目录下可以看到所有支持的编译链工具

--install-dir 制定生成的编译链工具的安装位置

好, 有了编译链工具后下面就简单了.

编写 CMakeLists.txt

cmake_minimum_required(VERSION 3.3)

project(demo)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")

# Android 5.0 以上需要在此处设置 PIE

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE")

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIE -pie")

# 配置使用 NDK Standalone Toolchain 编译

set(NDK_STANDALONE_TOOLCHAIN ~/app/ndk_toolchain)

set(CMAKE_SYSTEM_NAME AndroidARM)

set(CMAKE_SYSTEM_VERSION 3)

set(CMAKE_C_COMPILER ${NDK_STANDALONE_TOOLCHAIN}/arm-linux-androideabi/bin/gcc)

set(CMAKE_CXX_COMPILER ${NDK_STANDALONE_TOOLCHAIN}/arm-linux-androideabi/bin/g++)

set(CMAKE_FIND_ROOT_PATH ${NDK_STANDALONE_TOOLCHAIN})

# 使用 NDK 提供的头文件

add_definitions("--sysroot=${NDK_STANDALONE_TOOLCHAIN}/sysroot")

aux_source_directory(src SOURCE_FILES)

add_executable(demo ${SOURCE_FILES})

到此就大功告成了, 是不是很简单啊? 当然也可以在 CMakeLists.txt 里加个开关来切换 x86 和 arm 平台, 方便调试, 在此就不再赘述了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值