linux gcc交叉编译器的安装

在Ubuntu环境中,进行ARM嵌入式开发时,Ubuntu自带的x86gcc编译器编译出来的程序不能在ARM芯片上运行,我们需要安装一个交叉编译器gcc,是得编译出来的软件运行在ARM芯片中

1. 下载gcc编译器

我学习使用的gcc交叉编译器下载地址(点此下载)是这个https://www.linaro.org/downloads/,点进去,向下滑动页面,可以看到:
在这里插入图片描述
这是一个开源的符合GUN标准的gcc编译器,蓝色的框是不同版本的gcc名字,黑的圈起来的是针对不用版本指令的ARM芯片所对应的编译器,有32位ARMv7指令集的、有32位ARMv8指令集的、还有64位ARMv8指令集的,这是截止到当前ARM公司所有商用的指令集,我的芯片的Contex-A7内核,是32位ARMv7指令集的,所以我用第一个。红色圈起来的框是编译器二进制文件,也就是我们要下载的文件,蓝色的框是编译器的源码文件,点击红色框进去,可以看到,
在这里插入图片描述
绿色当前最新版本的gcc编译器下载地址,点击,浏览器就会自动弹出下载,(PS:科学上网速度可能快一点,或者上午速度可能快一点),红色圈是返回上一文件界面,通过这个可以找到老版本下载地址,点击可以看到:
在这里插入图片描述
这个界面我也不知道是啥,点击黑色框就会返回上一个界面,点击红色的可以返回历史版本的gcc编译器下载界面,点击可以看到:
在这里插入图片描述
这就是历史版本的gcc编译器下载地址,需要哪个版本下载就可以。

2. 安装编译器

下载完成以后,通过发送到Ubuntu的系统中去,
然后将其复制到/usr/local/arm/下,由于默认没有arm文件夹,可以先创建一个,有操作的linux系统文件夹,所以每条命令前都需要加上 sudo

sudo mkdir /usr/local/arm
sudo cp gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/

拷贝完成之后,解压

sudo tar -vxf gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz

解压出来的就是编译器内容,不需要安装,只需要将此目录放在PATH中去即可,

sudo vi /etc/profile
在最后一行添加
expert PATH=$PATH:/usr/local/arm/gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf/bin
此处是绝对路径,按实际添加,因为所以的编译软件都在bin目录下,所以添加最终文件夹就是bin
如果想要测试一下是否能用,需要重启一下,shell中输入
reboot
不想重启的话,也可以在shell中手动的,将上面的命令在输入一遍:
expert PATH=$PATH:/usr/local/arm/gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf/bin
在shell中输入此命令,是在当前shell中有效,关闭shell重新打开就无效了
最后测试前还需要装一些gcc交叉编译器所依赖的库文件,(PS:我也不知道为什么需要装,但是不装好像编译出问题),在shell中输入:
sudo apt-get install lsb-core lib32stdc++6
等待安装完成即可

然后就是进行简单的测试一下

cd ~	#进入home目录
arm-linux-gnueabihf-gcc -v
就会显示当前gcc编译器的版本
也可以编写一个.c测试一下

hello.c文件内容:

#include <stdio.h>

int main(int argc, char *argv[])
{
	if (argc = 2) {
		printf("hello %s\r\n",argv[1]);
	}
	else {
		printf("hello worled!\r\n");
	}
	return 0;
}

如果使用Ubuntu自带gcc编译器,编译如下:

gcc -o hello hello.c
如果提示没有gcc编译器,就就是用sudo apt-get install gcc 下载即可,会下载最新的gcc编译器。
编译完成以后,查看文件类型:
file hello
hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), 
可以看出Ubuntu自带编译器编译出来是x86-64类型。

如果使用arm-linux-gnueabihf-gcc交叉编译器,编译如下:

arm-linux-gnueabihf-gcc -o hello1 hello.c
编译完成,查看文件类型:
file hello1
hello1: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV)
可以看出是ARM类型,这就可以在ARM芯片是运行。

至此,交叉编译器算是安装完成,可以正常运行了。

发布了15 篇原创文章 · 获赞 7 · 访问量 273

猜你喜欢

转载自blog.csdn.net/weixin_42397613/article/details/104946879