要想編譯出arm環境的C++可執行文件主要就是利用交叉編譯器進行編譯。編譯過程自己都大同小異。linux
1.安裝交叉編譯器,交叉編譯器的安裝方法大體有下面幾種:ios
A.debian/ubuntu 系統能夠直接輸入命令安裝:shell
sudo apt install g++-arm-linux-gnueabihf sudo apt install g++-8-arm-linux-gnueabihf #這種方式還能夠指定版本
B.直接下載交叉編譯器的二進制文件,arm官網下載地址,這個網站的下載速度比較慢,能夠baidu關鍵字gcc-arm-none-eabi尋找國內的下載地址,下載解壓,把解壓目錄加入PATH環境變量或者把解壓出來的文件複製到/usr/bin目錄ubuntu
C.下載Android NDK,NDK裏面自帶了適用於Android的交叉編譯工具鏈,下載後在prebuilt目錄能夠找到工具
D.下載gcc源代碼,手動編譯安裝測試
以上幾種方法除了手動編譯可能會遇到各類依賴問題之外,其他的都比較簡單,我這裏恰好使用的是ubuntu 18.04的系統,就採用A方法安裝的。網站
2.用交叉編譯器編譯代碼,如今寫一段很古老的程序,而後用交叉編譯器編譯:ui
#include<iostream> using namespace std; int main() { cout << "hello world, from Android C++" << endl; return 0; }
執行命令編譯: spa
arm-linux-gnueabihf-g++-8 -static helloworld.cpp # 必定要加上 -static 靜態連接的選項,否則編譯出來的a.out執行不了
3.將Android設備須要連上電腦,而後經過下面的步驟從新掛載Android爲可讀寫的code
adb root # 該命令須要手機已經root adb remount adb shell "mount -o rw,remount /system" # rw 表示掛載爲可讀寫read/write
掛載好了之後使用adb shell登陸到Android的shell環境,建立一個咱們本次測試使用的文件夾"helloworld"
而後使用adb命令把文件push到Android設備中去
adb push ./a.out /data/helloworld
4.再次登陸Android shell環境,爲a.out文件賦權限(若是已經有了可執行的權限就能夠不用再次賦權限了),而後運行a.out
adb shell #登陸Android shell環境 cd /data/helloworld #進入a.out所在目錄 chmod 777 a.out #賦權限爲777 ./a.out #運行a.out
能夠看到,最終成功輸出了 "hello world, from Android C++" 。