本章内容对应视频讲解链接(在线观看):
我们写了 linux 上第一个 c 程序 heollo world ,是使用 gcc 编译器进行代码的编译,编译得到的可执行文件只能在 X86 结构的 PC 上运行,我们来看下,在我的 ubuntu 的 test 目录下有一个 hello.c ,这个程序也非常简单,就是一个 hello world ,我们来编译一下,然后运行下可执行文件,这个可执行文件是可以在 PC上运行的。如下图所示。
然后我们使用 file 命令来看下这个文件,这个文件是可以在 X86 上运行的,但是它不能在 ARM 上运行,因为它这里写的是 X86。如下图所示。
如果我们想在 ARM 上运行,就要使用 ARM 的编译器,然后在 X86 上进行编译。因为我们使用 ARM 的编译器编译完了之后,是把我们的可执行程序放到开发板上来运行,而不是在 PC 上运行的,这个过程大家可以把它理解成交叉,然后再和我们的编译器结合起来就叫做交叉编译器。交叉编译器的种类有很多,我
们使用 的 是 Linaro 公 司 的 arm 交 叉 编 译 器 , 这 是 交 叉 编 译 器 的 地 址
我们已经给大家下载好了,打开 i.MX6ULL 终结者光盘资料\01_开发及烧写工具\1.交叉编译器,给大家下载好了一个是 64 位的,一个是 32 位的,如下图所示。
然后我们把交叉编译器拷贝到 ubuntu,因为我们安装的是 64 位的 ubuntu ,所以要安装 64 位的交叉编译器,这里作者不推荐大家安装 32 位的 ubuntu,因为 64 位的 ubuntu,可以安装支持 32 位的依赖包,但是 32 位的 ubuntu 安装不了 64 位的依赖包,所以大家哪怕这里是安装的 64 位的,但是他也是向下兼容32 位的,所以作者这里推荐提供的都是 ubuntu64 位的系统,
接下来我们安装下交叉编译器,我们使用 ssh 把我们交叉编译器的安装包拷贝到 ubuntu 上,进入
/usr/local
cd /usr/local
进到这个目录,然后我们在这个目录下创建一个名为 arm 的文件夹,
sudo mkdir arm
然后我们进到 arm 文件夹里面,我们把我们的交叉编译器放到这个目录上,
cd arm
我们打开 ssh 软件,连接下 ubuntu ,这里大家也可以使用 samba 这个工具来安装,都是可以的,然后我们通过 ssh 软件进到我们刚刚创建的目录 /usr/local/arm 这个目录,然后我们把光盘里面的交叉编译器拖过来,我们这里要用 64 位的,然后我们在 ubuntu 上解压这个文件,解压直接使用 tar 命令就可以了,如下图所示。
sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz
我们要使用管理员的身份来运行,解压成功后,就会在当前目录下看到生成的这个文件,如下图所示。
使用 file 命令来看下,这里显示的架构是 arm ,说明我们这个可执行文件是在开发板上运行的而不是在 X86 上运行的,可以看到,使用 gcc 编译器编译出来的可执行文件,它的架构是 X86 的,所以我们使用 gcc编译器编译完的可执行程序只能在 X86 的 ubuntu 上运行,不能在 arm 上运行。大家通过 file 命令就可以区分了,大家可以自己安装下。如下图所示。