Windows下Linux子系统构造交叉编译工具链(arm-linux-gcc)

一、下载arm-linux-gcc-4.3.2.tar.bz2,然后解压到/usr/local/目录下,使用命令:

  sudo tar -jxvf arm-linux-gcc-4.3.2.tar.bz2 -C / 

默认安装到/usr/local/arm 目录下

二、然后赋予/usr/local/arm/ 文件夹全部权限

sudo chmod 777 /usr/local/arm

三、然后用vim打开 /etc/profile 文件

sudo vi /etc/profile 

在最后添加如下内容

export PATH=/usr/local/arm/4.3.2/bin/:$PATH

添加过后,执行

source /etc/profile

使配置生效

五、然后执行 arm-linux-gcc -v 查看交叉工具版本,但是会出现问题如下
arm-linux-gnueabihf-gcc: cannot execute binary file: Exec format error
之后在各种论坛找解决方法,有的说是ubuntu64位的系统,而arm-linux-gcc是32位的包,于是采用在ubunt下安装32的包兼容arm-linux-gcc,
比如

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386
sudo apt-get install lib32ncurses5 ​lib32ncurses5-dev
sudo apt-get install lib32z1

全部都不好使,依旧会出现cannot execute binary file: Exec format error,这个问题。
在快要放弃的那一刻,找到了一个贴子
附上源链接: https://www.cnblogs.com/JiuHuan/p/10073632.html
以示尊重知识产权。

解决方案

通过 readelf -a arm-linux-gcc 检查程序导出表发现问题
readelf 命令报错:Not an ELF file - it has the wrong magic bytes at the start
初步确定问题来源,子系统不支持原生linux文件头。
解决方式如下:
添加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-linux-gcc -v,终于正常了

在这里插入图片描述

Logo

更多推荐