日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發布時間:2025/3/20 Android 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用 CMake 和 NDK 交叉编译 Android 下的可执行程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

之前開發 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 平臺, 方便調試, 在此就不再贅述了.

轉載于:https://my.oschina.net/gotax/blog/516861

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的利用 CMake 和 NDK 交叉编译 Android 下的可执行程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。