【ndk】直接使用ndk提供的arm-linux-androideabi-gcc編譯android可執行程式
阿新 • • 發佈:2019-01-10
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
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