在 ubuntu 的 test 目录下有一个 hello.c , 这个程序也非常简单, 就是一个 hello world , 我们来编译一下, 然后运行下可执行文件, 这个可执行文件是可以在 PC上运行的。 如下图所示。

java c 交叉编译 交叉编译器使用_linux

        然后我们使用 file 命令来看下这个文件, 这个文件是可以在 X86 上运行的, 但是它不能在 ARM 上运行,因为它这里写的是 X86。 如下图所示。

java c 交叉编译 交叉编译器使用_linux_02

        如果想在 ARM 上运行, 就要使用 ARM 的编译器, 然后在 X86 上进行编译。 因为使用 ARM 的编译器编译完了之后, 是把可执行程序放到开发板上来运行, 而不是在 PC 上运行的, 这个过程可以把它理解成交叉, 然后再和编译器结合起来就叫做交叉编译器。 交叉编译器的种类有很多, 一般使 用 的 是 Linaro 公 司 的 arm 交 叉 编 译 器 , 这 是 交 叉 编 译 器 的 地 址 ,https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/。交叉编译器,大家根据自己情况下载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

java c 交叉编译 交叉编译器使用_java c 交叉编译_03



        要使用管理员的身份来运行, 解压成功后, 就会在当前目录下看到生成的这个文件, 如下图所示。

java c 交叉编译 交叉编译器使用_交叉编译器_04


        解压完之后下一步就要添加环境变量了,打开文件如图所示。

java c 交叉编译 交叉编译器使用_linux_05

         然后我们进到这个文件的最后, 输入

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

 

java c 交叉编译 交叉编译器使用_编译器_06

        修改完了之后, 要重启下 ubuntu, 这样交叉编译环境才能生效, 环境变量才可以生效。 使用命令sudo reboot
         重启成功后, 来检查交叉编译器有没有成功安装, 可以在控制台上输入 arm- 输入一个Tap 他会自动帮我们补全, 然后我们输入一个 gcc -v ,
arm-linux-gnueabihf-gcc -v
        如果这里显示了 gcc 的版本号 4.9.4 说明我们的交叉编译器是成功的, 如下图所示。 如果这里大家跟我显示的不太一样, 大家可以看下环境变量有没有设置对, 还有大家安装的 ubuntu 是不是 64 位的, 因为我这里安装的是 64 位的交叉编译器。

java c 交叉编译 交叉编译器使用_ubuntu_07

         然后我们进到 test 目录下, 使用交叉编译器来编译下 hello.c , 编译方法和之前使用 gcc 编译方法是一样的, gcc 加 hello.c 这个源文件, 然后后边跟上-o 指定的文件名称, 格式是一摸一样的, 只不过把 gcc 编译器换成了交叉编译器, 使用 arm-linux-gnueabihf- 后边跟上 gcc 和要编译的原文件的名字,-o 指定下我们要生成的可执行文件, 这样就编译成功了, 如下图所示。

java c 交叉编译 交叉编译器使用_编译器_08

 后可以来运行下这个 hello , 大家看他这里是提示错误的, 不能执行, 如下图所示。

java c 交叉编译 交叉编译器使用_交叉编译器_09

        使用 file 命令来看下, 这里显示的架构是 arm , 说明这个可执行文件是在开发板上运行的而不是在 X86 上运行的, 可以看到, 使用 gcc 编译器编译出来的可执行文件, 它的架构是 X86 的, 所以使用 gcc编译器编译完的可执行程序只能在 X86 的 ubuntu 上运行, 不能在 arm 上运行。 大家通过 file 命令就可以区分了, 大家可以自己安装下。 如下图所示。

java c 交叉编译 交叉编译器使用_linux_10