用NDK在Ubuntu14.04上安装arm交叉编译环境

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chishuideyu/article/details/73477325

之前没有接触过交叉编译,后来因为在实验室要在机器人上跑arm程序,所以就尝试着用Ubuntu来编译arm的程序,自己上网查方法并咨询了很多同学同事,最终搭建成功了这个交叉编译环境。

由于NDK中带有一整套arm的gcc和g++编译器,库和文件,所以用NDK安装更加的方便。

1. 下载NDK安装包

有VPN或者是用hosts访问外网的人可以访问

https://developer.android.com/ndk/downloads/index.html

如果没有科学上网工具的话,就只能自己百度上找了,我自己是在学校的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.csdn.net/robertbaker/article/details/11573295
http://blog.csdn.net/richu123/article/details/51140810

猜你喜欢

转载自blog.csdn.net/chishuideyu/article/details/73477325