【ndk】直接使用ndk提供的arm-linux-androideabi-gcc編譯android可執行程式
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
相關文章
- android NDK 交叉編譯Android編譯
- Android NDK 提供的交叉工具鏈手動編譯原始碼Android編譯原始碼
- libusb android ndk編譯--編譯mipsAndroid編譯
- 交叉編譯-Mac環境使用NDK編譯FFmpeg編譯Mac
- Android NDK開發(二) 使用ndk-build構建工具進行NDK開發AndroidUI
- Android NDK開發掃盲及最新CMake的編譯使用Android編譯
- 用 NDK 編譯 ffmpeg 到 Android 平臺編譯Android
- cygwin下ndk編譯protobuf編譯
- Android-NDK-11-C語言編譯原理AndroidC語言編譯原理
- 【譯】Android NDK API 規範AndroidAPI
- NDK clang編譯器的一個bug編譯
- 用Android NDK r6編譯Python 3.2Android編譯Python
- AndroidStudio使用NDK編譯C/C++程式碼使用原生庫Android編譯C++
- Android NDKAndroid
- FFmpeg系列(一)-Mac環境下使用NDK編譯FFmpegMac編譯
- 使用NDK編譯含JNI的Android專案常見問題解決方案編譯Android
- Android NDK開發之旅15 NDK Eclipse下NDK開發流程AndroidEclipse
- Android NDK祕籍--編譯靜態庫、呼叫靜態庫Android編譯
- android ndk整合Android
- NDK 知識梳理(2) 使用 CMake 進行 NDK 開發之如何編寫 CMakeLists txt 指令碼指令碼
- Android NDK祕籍--初識NDK、JNI、Makefile/CMakeAndroid
- 編譯Android下可執行命令的FFmpeg編譯Android
- Windows下搭建Android NDK開發環境及命令列編譯WindowsAndroid開發環境命令列編譯
- Eclipse自動編譯NDK/JNI的三種方法Eclipse編譯
- MXFlutter0.2.5支援直接編譯FlutterUI為可執行的JS程式碼Flutter編譯UIJS
- NDK 知識梳理(1) 使用 CMake 進行 NDK 開發之初體驗
- Android NDK初識Android
- Cocos2d-x 2.2.3 使用NDK配置編譯環境編譯
- Android NDK開發之旅29 NDK FFmpeg視訊播放Android
- Andorid Studio NDK開發-使用NDK庫
- AndroidStudio之NDK常見編譯錯誤Android編譯
- ndk編譯錯誤:error: 'override' does not name a type編譯ErrorIDE
- ndk編譯C++,提示找不到標頭檔案(ndk-build error string No such file or directory)編譯C++UIError
- Android:JNI與NDK(二)交叉編譯與動態庫,靜態庫Android編譯
- 簡單實現Android NDK編譯jni呼叫動態庫開發Android編譯
- Android中的NDK總結Android
- Ndk 初步開發 In AndroidAndroid
- Android NDK學習(2)Android