為ARM安卓設備交叉編譯C/C++語言程序


最近調試安卓上的 ARM 程序,涉及到一些 C 語言內容。為了方便調試,看看打印啥的,希望能自己寫個簡單的C程序,在本地(Ubuntu主機)交叉編譯后傳到手機上運行,看結果。

為了實現交叉編譯,需要 Google 官方的NDK(Native Development Kit)。使用 NDK 提供的編譯器進行編譯,然后通過 adb 上傳到手機運行。

具體做法如下:

1、安裝 Android Studio

網上有很多帖子介紹安裝方法,Android studio官網也有安裝方法介紹。這里簡單說一下 Ubuntu 18.04 (64 bit) 上的安裝過程。

  • 安裝依賴庫:
sudo apt update
sudo apt install openjdk-8-jdk # Must be openjdk 8
java -version # Check java version
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386 # For 64-bit Ubuntu
  • 下載 Android Studio:去官網下載, 得到壓縮文件(.tar.gz)。

  • 將文件解壓合適目錄:例如:全局安裝可解壓到/opt/目錄下。給自己安裝可解壓到/usr/local//home/YourName/

sudo tar xzvf android-studio-ide-xxx.xxxxx-linux.tar.gz -C /opt/
  • 運行安裝腳本(會啟動圖形界面)
/opt/android-studio/bin/studio.sh
  • 按照提示進行操作
  • 最后安裝的目錄和解壓目錄不同,可能是~/Android/Sdk目錄下。

2、安裝 NDK

可參考官網介紹。安裝好 Android Studio 后,同樣通過以下命令啟動 Android Studio:

/opt/android-studio/bin/studio.sh

注意第一次啟動要先建立一個 Android 項目。這個按照提示建立一個空的項目即可,后面不會用到這個項目。

打開任意項目后(例如剛才新建的空項目),進入主界面。上方菜單選擇:Tools > SDK Manager

在打開的窗口的右上方,選擇SDK Tools標簽。復選框中選擇NDK (Side by side)CMake,然后點OK

后續按照提示操作即可安裝。假設安裝 NDK 的目錄為$NDK_DIR

Image of SDK Manager

3、編寫C程序並編譯

用任意編輯器編寫一個簡單的C語言程序,例如 hello_world.c

#include <stdio.h>

int main()
{
    printf("Hello, world!");
    return 0;
}

接下來用工具鏈編譯。注意如果是比較早的NDK版本,需要先手動生成工具鏈:

$NDK_DIR/build/tools/make_standalone_toolchain.py --arch arm --api 21 --install-dir ./toolchain

參數中指定了目標平台(arm)、API水平(21)和生成目錄。生成的工具鏈位於./toolchain目錄下。

不過現在新版本的NDK已經不需要這樣了。可以直接使用$NDK_DIR/toolchains/llvm/prebuilt/linux-x86_64/bin目錄下的工具鏈。

然后使用生成的或者新版本預編譯好的工具鏈進行編譯。

$NDK_DIR/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android21-clang hello_world.c -o hello_world_arm

然后得到可執行文件 hello_world_arm

4、傳送到設備並運行

將Android設備(如手機)通過USB或局域網連接主機。將編譯好的可執行文件通過adb上傳到設備,然后用adb shell命令行運行。假設主機和手機已經建立了adb連接,命令行中執行:

adb push ./hello_world_arm /data/local/tmp
adb shell

接下來在adb shell中執行:

cd /data/local/tmp
./hello_world_arm

就可以看到打印出Hello, world!了。

參考資料


免責聲明!

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



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