linux上装交叉编译,如何在Linux系统中手动安装arm-linux-gcc交叉编译工具

源文件需要经过编译才能生成可执行文件。PC上的编译工具链为gcc、ld、objcopy、objdump等。嵌入式开发少不了arm开发平台。要编译出能在arm平台上运行的程序,必须使用交叉编译工具arm-linux-gcc、arm-linux-ld、arm-linux-objcopy、arm-linux-objdump等。arm-linux-gcc是干什么的?gcc是linux系统下面用来将代码编译成一个可执行程序的手段。编译出来的是适用于linux系统的可执行二进制文件。可执行程序其实就是一堆的0101二进制机器码。这些机器码代表什么含义只有机器本身能理解。所以你用gcc编译出来的可执行程序只有在linux系统下面可以运行。举个例子你的可执行程序里面有一句01011.这句在linux下面可能是吃饭的意思,但是在windows下面可能01011是撒尿的意思。那你说linux的可执行程序放在window下面能正常运行吗?肯定不能嘛。你要的目的是吃饭,它帮你执行撒尿很显然就不对了。同样的可能01011在ARM下面的意思是睡觉。不同系统的机器码含义是不一样的。所以你在linux系统下面写的代码要怎样才能在ARM系统上面跑呢。这就需要用到交叉编译。arm-linux-gcc是什么意思?就是告诉你的编译器,我编写的环境是linux,但是我希望生成的可执行程序是在arm上面跑的。这就是交叉编译。编写环境和执行环境分离的一种手段。——来源网络

arm-linux-gcc的参数都有哪些?

ff4a238d63af19c9e3311ba0e7d7a9ef.png

d6cc8dc89b5f4b6ef39d3641b0d16b97.pngarm-linux-gcc的参数

那么,如何安装arm-linux-gcc呢?现在,就来 跟着我的步骤一起实践一下吧!(懒人可直接跳至文章末尾)

(我的系统:Windwos10 Ubuntu子系统,版本:Ubuntu 18.04.4 LTS x64)

linux下如何查看版本信息

一、下载arm-linux-gcc-4.4.3.tar.gz安装包

链接:后台回复"arm-linux-gcc"

二、解压安装包

下载完成后,将安装包上传到Linux系统中。我的安装包放在了C:\Users\56414\Downloads目录下,那么上传到Linux系统的命令是:~$ cd ~~$ cp /mnt/c/Users/56414/Downloads/arm-linux-gcc-4.4.3-20100728.tar.gz ./~$ ls

解压~$ tar -zxvf arm-linux-gcc-4.4.3-20100728.tar.g

84cbe3d1b503c702b47e1ae46666b4d2.png

三、配置目录

在/usr/local目录下新建arm-linux-gcc目录,并拷贝~/opt/FriendlyARM/toolschain/路径下的4.4.3到arm目录(需超级用户权限):~$ sudo mkdir /usr/local/arm-linux-gcc~$ sudo cp ./opt/FriendlyARM/toolschain/4.4.3 /usr/local/arm-linux-gcc/ -r

进入/usr/local/arm-linux-gcc目录查~看是否有4.4.3这个目录。~$ cd /usr/local/arm-linux-gcc

4f0f1689dcf48435c7185005bdb67681.png

四、修改环境变量,把arm-linux-gcc添加到PATH中:

用vi打开/etc/profile(需超级用户权限);~$ sudo vi /etc/profile

按下i,在文件最后添加两行,并输入以下代码(第一行是添加执行程序的环境变量,第二行是库文件路径),然后:wq保存退出。export PATH=$PATH:/usr/local/arm-linux-gcc/4.4.3/binexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm-linux-gcc/4.4.3/lib

2cfbc1863fb87327df7e455997f454d3.png

五、使用source命令重新加载生效该配置文件

~$ source /etc/profile

六、检查环境变量添加是否正确

~$ echo $PATH

如果可以显示/usr/local/arm-linux-gcc/4.4.3/bin,那么环境变量添加成功。

七、检查arm-linux-gcc是否安装正确

~$ arm-linux-gcc -v

5284eec1d2e64afed4d955c425498346.png

出现版本号则说明安装成功,可以开心的编译了

八、常见问题

在Ubuntu系统下arm-none-linux-gnueabi-gcc: not found的解决办法

出现这种情况的原因是:在64位Linux系统下无法兼容32位交叉编译器。因此,解决上述问题的办法是安装32位的库,使64位的Linux系统能够兼容arm-linux-gcc交叉编译器。安装32位库的正确命令是:~$ sudo apt-get install libc6-i386

安装完成之后再使用arm-linux-gcc -v 命令来测试交叉编译器,就不会再出现问题。Win10 Ubuntu子系统中运行32bit Linux原生程序报Exec format erro错误

按照我的步骤,正常情况下会出现如下报错:/usr/local/arm-linux-gcc/4.4.3/bin/arm-linux-gcc: 15: exec: /usr/local/arm-linux-gcc/4.4.3/bin/.arm-none-linux-gnueabi-gcc: Exec format error

通过readelf -a arm-linux-gcc检查程序导出表发现问题:(需要进入到/usr/local/arm-linux-gcc/4.4.3/bin目录下)readelf: Error: Not an ELF file - it has the wrong magic bytes at the start

初步确定问题来源,子系统不支持原生linux文件头。而后通过搜索此错误找到相关english网页。此问题解决方式如下添加xxx形式文件头支持:~$ sudo apt update~$ sudo apt install qemu-user-static~$ sudo update-binfmts --install i386 /usr/bin/qemu-i386-static --magic '\x7fELF\x01\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x01\x00\x00\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xf8\xff\xff\xff\xff\xff\xff\xff'~$ arm-liunx-gcc -

3fb6a91923c7eadc2b49086b4284903b.png完美解决!

此方法来自九环

九、视频教学

11:42

链接直达:手把手教你如何在Ubuntu中安装arm-linux-gcc交叉编译工具

小彩蛋

懒人福利,命令一键安装:

(我使用GEC-6818开发板,安装其他arm平台编译器会出错,这个就不会o(╯□╰)o。其他开发板请自测,类似的还有gcc-arm-linux-gnueabihf等,区别主要是架构不同,策略不同。

~$ sudo apt-get install gcc-arm-linux-gnueabi

谢谢支持!

举报/反馈

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值