要想編譯出arm環境的C++可執行文件主要就是利用交叉編譯器進行編譯。編譯過程本身都大同小異。
1.安裝交叉編譯器,交叉編譯器的安裝方法大致有下面幾種:
A.debian/ubuntu 系統可以直接輸入命令安裝:
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目錄
C.下載Android NDK,NDK里面自帶了適用於Android的交叉編譯工具鏈,下載后在prebuilt目錄可以找到
D.下載gcc源代碼,手動編譯安裝
以上幾種方法除了手動編譯可能會遇到各種依賴問題以外,其余的都比較簡單,我這里剛好使用的是ubuntu 18.04的系統,就采用A方法安裝的。
2.用交叉編譯器編譯代碼,現在寫一段很古老的程序,然后用交叉編譯器編譯:
#include<iostream> using namespace std; int main() { cout << "hello world, from Android C++" << endl; return 0; }
執行命令編譯:
arm-linux-gnueabihf-g++-8 -static helloworld.cpp # 一定要加上 -static 靜態鏈接的選項,不然編譯出來的a.out執行不了
3.將Android設備需要連上電腦,然后通過下面的步驟重新掛載Android為可讀寫的
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++" 。