編譯出arm Android環境下的C++可執行文件


 要想編譯出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++"  。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM