本章内容对应视频讲解链接(在线观看):?
我们写了 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
我们要使用管理员的身份来运行,解压成功后,就会在当前目录下看到生成的这个文件,如下图所示。
解压完之后下一步就要添加环境变量了,这里之前给大家讲过了,ubuntu 修改的是这个文件,我们也可以修改 .bashrc 文件,我们之前讲到了修改环境变量的方法,参考第十七章,我们修改的这个文件是对所有用户生效的,就是说我在这里添加完了环境变量,不管是在 topeet 用户还是在 root 用户都可以找到arm 交叉编译器,如果是在 bashrc 这个文件下修改,那么你当前是哪个用户你就仅对当前这个用户生效,所以我们来改下这个文件,打开文件如图所示。
然后我们进到这个文件的最后,输入 export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
修改完了之后,我们要重启下 ubuntu,这样交叉编译环境才能生效,环境变量才可以生效。使用命令 sudo reboot
重启成功后,我们来检查我们的交叉编译器有没有成功安装,我们可以在控制台上输入 arm- 输入一个Tap 他会自动帮我们补全,然后我们输入一个 gcc -v , arm-linux-gnueabihf-gcc -v 如果这里显示了 gcc 的版本号 4.9.4 说明我们的交叉编译器是成功的,如下图所示。如果这里大家跟我显示的不太一样,大家可以看下环境变量有没有设置对,还有大家安装的 ubuntu 是不是 64 位的,因为我这里安装的是 64 位的交叉编译器。
然后我们进到 test 目录下,我们使用交叉编译器来编译下 hello.c ,编译方法和我们之前使用 gcc 编译方法是一样的,gcc 加 hello.c 这个源文件,然后后边跟上-o 指定的文件名称,格式是一摸一样的,只不过把 gcc 编译器换成了交叉编译器,使用 arm-linux-gnueabihf- 后边跟上 gcc 和我们要编译的原文件的名字,-o 指定下我们要生成的可执行文件,这样我们就编译成功了,如下图所示。
然后我们可以来运行下这个 hello ,大家看他这里是提示错误的,我们不能执行,如下图所示。
使用 file 命令来看下,这里显示的架构是 arm ,说明我们这个可执行文件是在开发板上运行的而不是在 X86 上运行的,可以看到,使用 gcc 编译器编译出来的可执行文件,它的架构是 X86 的,所以我们使用 gcc编译器编译完的可执行程序只能在 X86 的 ubuntu 上运行,不能在 arm 上运行。大家通过 file 命令就可以区分了,大家可以自己安装下。如下图所示。
|