【ndk】直接使用ndk提供的arm-linux-androideabi-gcc編譯android可執行程式

yingxian_Fei發表於2017-06-24

1、背景

經常使用linux交叉工具類的朋友都知道,在已安裝交叉編譯工具鏈後要交叉編譯得到linux可執行檔案只需要執行如下類似的命令(如編譯hello.c生成hello可執行檔案):

arm-linux-gcc hello.c -o hello
hello.c的程式碼非常簡單,完整的程式碼如下:

#include <stdio.h>

int main() {
  printf("hello,world!");
  return 0;
}
但是在android上安裝ndk後直接執行如上的命令編譯時會提示找不到一堆標頭檔案,如:

stdio.h: No such file or directory

本文介紹幾種解決該問題的簡單方法。

2、解決辦法

1、下載ndk

首先下載android提供的ndk工具包,如本文下載的工具包名為android-ndk32-r10b-linux-x86_64.tar.bz2。下載後解壓可以得到android-ndk-r10b類似的工具目錄。

2、方法一、呼叫命令時指定需要的標頭檔案或庫

使用--sysroot指定編譯時使用的標頭檔案和庫檔案。比如更新後的編譯命令為:

arm-linux-androideabi-gcc --sysroot=$NDK_BASE/platforms/android-19/arch-arm hello.c -o hello

如下為下載ndk後使用這種方法的完整流程如下:

(1)、進入android-ndk-r10b目錄;

cd android-ndk-r10b

(2)、設定要使用的交叉工具鏈的路徑到環境變數中,如使用4.6版本的ndk命令如下:

export PATH=$PATH:toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/
之後可以執行如下命令驗證工具是否能識別:

arm-linux-androideabi-gcc -v
如下為本文的輸出:


(3)、進入hello.c所在的原始碼目錄執行如下命令進行編譯

arm-linux-androideabi-gcc --sysroot=$NDK_BASE/platforms/android-19/arch-arm hello.c -o hello


編譯成功後push生成的hello可執行檔案到裝置執行測試即可。

3、方法二、使用ndk中提供的工具安裝指定版本的ndk鏈

使用ndk中提供的安裝工具安裝指定版本的ndk工具鏈和相關庫和依賴到指定目錄,然後使用安裝的完整工具鏈進行編譯。安裝完整的工具鏈後就可以使用類似與linux下使用交叉編譯鏈的方式進行編譯了,如下為操作步驟:

(1)、安裝完整工具鏈

安裝指定版本的工具到指定目錄(如安裝到/home/feiyingxian/workspace/iot/android/ndk目錄)

./build/tools/make-standalone-toolchain.sh --platform=android-19 --install-dir=/home/feiyingxian/workspace/iot/android/ndk
(2)、新增臨時變數

執行如下命令設定臨時的環境變數:

export PATH=$PATH:/home/feiyingxian/workspace/iot/android/ndk/bin
設定完成後可以使用如下命令進行測試工具是否可用:

arm-linux-androideabi-gcc -v

(3)、編譯測試

安裝完成後可以直接使用如下命令進行編譯:

arm-linux-androideabi-gcc hello.c -o hello


相關文章