之前没有接触过交叉编译,后来因为在实验室要在机器人上跑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
则表示编译成功。
参考链接:
http://blog.youkuaiyun.com/robertbaker/article/details/11573295
http://blog.youkuaiyun.com/richu123/article/details/51140810