用NDK在Ubuntu14.04上安裝arm交叉編譯環境
之前沒有接觸過交叉編譯,後來因為在實驗室要在機器人上跑arm程式,所以就嘗試著用Ubuntu來編譯arm的程式,自己上網查方法並諮詢了很多同學同事,最終搭建成功了這個交叉編譯環境。
由於NDK中帶有一整套arm的gcc和g++編譯器,庫和檔案,所以用NDK安裝更加的方便。
1. 下載NDK安裝包
有VPN或者是用hosts訪問外網的人可以訪問
如果沒有科學上網工具的話,就只能自己百度上找了,我自己是在學校的bt站下載的 android-ndk-r10e-linux-x86_64.bin。
2. 解壓NDK安裝包
將bin檔案拷貝到Ubuntu的某一個資料夾下,比如/home/xf/
在控制檯中的該資料夾路徑下執行chmod +x android-ndk-r10e-linux-x86_64.bin
控制檯會打印出一對解壓資料引數,如果電腦容量不足,會報錯,如果成功會顯示everything is ok
3. 配置環境變數
修改環境變數有很多方式,我們這裡修改/etc/profile
來控制環境變數。
sudo vim /etc/profile
在profile檔案的尾部新增
export NDK=/home/xf/android-ndk-r10e-linux #這裡的資料夾是我的NDK解壓目錄
export SYSROOT=$NDK/platforms/android-18/arch-arm #android-18是android開發版本
之後執行
source /etc/profile
就可以在當前執行source的控制檯中使用這些環境變量了
4. toolchain目錄的建立
在剛才執行source的terminal中執行
$NDK/build/tools/make-standalone-toolchain.sh –platform=android-18 –install-dir=/home/xf/AndroidToolChain
其中--platform
是安裝的交叉編譯環境的安卓版本號,--install
是要將交叉編譯環境安裝到的目錄,這個目錄最好寫絕對路徑,我曾經把這個目錄寫成~/AndroidToolChain
~
資料夾,裡面建了一個AndroidToolChain
資料夾,沒有正確的將~
識別為使用者空間根目錄。
如果上面的語句出錯,提示
Unable to auto-config arch from toolchain
說明需要手動配置
vim $NDK/build/tools/make-standalone-toolchain.sh
將其中第一個TOOLCHAIN_NAME改成
TOOLCHAIN_NAME=arm-linux-androideabi-4.9
之後再執行,上面的語句就可以了。成功之後,就可以在AndroidToolChain中看到交叉編譯工具了。
5. 配置交叉編譯環境變數
交叉編譯工具安裝好了之後,我們需要使用它,我習慣於將其新增到環境變數中,這樣可以在系統的任何地方呼叫它,不過著看個人喜好。
在/etc/profile
中新增如下語句並執行source /etc/profile
export ANDROIDPATH=/home/xf/AndroidToolChain
export SYSROOT=$ANDROIDPATH/sysroot
export ANDROIDBIN=$ANDROIDPATH/bin
export ANDROIDLIB=$SYSROOT/usr/lib
export PATH=$PATH:$ANDROIDPATH:$ANDROIDBIN:$SYSROOT
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ANDROIDLIB
上面的語句不一定都是必須的,不過我也沒有測試哪些是無用的。
至此交叉編譯環境就已經安裝成功了。
6. 測試
隨便找一個目錄測試一下
vim test.cpp
在test.cpp檔案中輸入
#include<iostream>
using namespace std;
int main()
{
cout<<"helloword"<<endl;
}
再執行
arm-linux-androideabi-g++ test.cpp
在當前資料夾會生成一個a.out
檔案
file a.out
控制檯會顯示
a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), not stripped
則表示編譯成功。