ubuntu 16 LTS 安装32交叉编译工具报错:cannot execute binary file: Exec format error

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubuntu 16 LTS 安装32交叉编译工具报错:cannot execute binary file: Exec format error相关的知识,希望对你有一定的参考价值。

apt-get install lib32z1​
apt-get install lib32ncurses5 lib32z1
apt-get install gcc-multilib g++-multilib

本人在win10自带ubuntu 16子系统下安装32位交叉编译工具后,执行arm-none-linux-gnueabi-gcc -v命令,报cannot execute binary file: Exec format error错,不知论坛有没有大神知道是什么原因,求帮忙解答,不甚?以下是我已经尝试过的方法,都无效。。。内心都奔溃了。

1、原以为ubuntu 16 LTS是64位,交叉编译工具是32位,是不兼容导致的,但是我安装了下面这些32位兼容库还是有问题:
apt-get install lib32ncurses5
apt-get install lib32z1
apt-get install lib32ncurses5 lib32z1
apt-get install gcc-multilib g++-multilib

2、这个是ubuntu系统的信息
root@DESKTOP-1TTG50K:/etc/apt# lsb_release -a
LSB Version: core-9.20160110ubuntu0.2-amd64:core-9.20160110ubuntu0.2-noarch:security-9.20160110ubuntu0.2-amd64:security-9.20160110ubuntu0.2-noarch
Distributor ID: Ubuntu
Description: Ubuntu 16.04.6 LTS
Release: 16.04
Codename: xenial

3、这个是交叉编译工具的头信息
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Intel 80386
Version: 0x1
Entry point address: 0x80493e0
Start of program headers: 52 (bytes into file)
Start of section headers: 206868 (bytes into file)
Flags: 0x0
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 8
Size of section headers: 40 (bytes)
Number of section headers: 27
Section header string table index: 26

1.使用错误的命令,如gcc -c hello.c -o hello,这样得到的是.o文件,而不是可执行程序,此时使用./hello就会报上述错误!此时应改用gcc hello.c -o hello就可以啦!
2.如果不是上述错误,就可能是版本问题,如本来是32位操作系统,偏偏使用64位软件,此时需要的就是使用正确的软件版本!
参考技术A win10自带的ubuntu子系统并不是真正的ubuntu,你要用win的交叉编译工具 参考技术B 楼主,你这个问题最后是怎么解决的? 我也遇到了,搞了1天也没弄好,脑袋都大了....... 跪求! 参考技术C 找到这个交叉编译工具的源码,在你的wsl下重新编译安装,试试能不能解决这个问题。

64位的ubuntu14.04 LTS安装 Linux交叉编译工具链及32位“ia32-libs”依赖库

ubuntu又迎来了其新一代的长期支持版本 14.04 LTS,其带来了许多令人期待的新特新,遂决定进行升级。

装好了64位版本及安装 Linux交叉编译工具链

运行GCC,${CROSS_COMPILE}gcc -v

依然会提示那经典的“没有那个文件或目录”提示。

 

根据以往的经验,对于64位版本ubuntu我们需要安装“ia32-libs”依赖库。

遂输入:

sudo apt-get install ia32-lib

却提示查无此货?

 貌似网上有两种方法,第一种有点笨,第二种我暂时还没有试验。

一、第一种方法

参考ubuntukylin.com wuy069的解决方案

1。切换到root权限

       sudo -i

2。进入apt源列表

      cd /etc/apt/sources.list.d

3。添加ubuntu 13.04的源,因为13.10的后续版本废弃了ia32-libs

echo "deb http://archive.ubuntu.com/ubuntu/ raring main restricted universe multiverse" > ia32-libs-raring.list

 

4。更新源并安装ia32-libs

      apt-get update

      apt-get install ia32-libs

 

5。恢复源

      rm ia32-libs-raring.list

      apt-get update

 

再次执行gli@gli:~$ sudo apt-get install ia32-libs
[sudo] password for gli:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树      
正在读取状态信息... 完成      
ia32-libs 已经是最新的版本了。

确认下是否安装成功。

 
最后我们来重新安装Linux交叉编译工具链

root@gli:/home/gli/my-imx6# cd 02tools/
root@gli:/home/gli/my-imx6/02tools# source gcc-linaro-arm-linux-gnueabihf-492-env
root@gli:/home/gli/my-imx6/02tools# ${CROSS_COMPILE}gcc -v


这下可以看到GCC版本了,表示 Linux交叉编译工具链安装好了。

二、第二种方法:

刚开始在Ubuntu 64位下运行 ./XXX文件可能说 bash 没有那个文件或目录,但是确实存在;

原因是没有32位的运行库;

解决方案:

$sudo apt-get install ia32-libs

如果它说没有可用的软件包,那么安装替代的:

$sudo apt-get install libc6:i386 libgcc1:i386 gcc-4.6-base:i386 libstdc++5:i386 libstdc++6:i386

即可解决!

 

以上是关于ubuntu 16 LTS 安装32交叉编译工具报错:cannot execute binary file: Exec format error的主要内容,如果未能解决你的问题,请参考以下文章

linux 下安装arm-linux-gnueabi交叉编译器

LINUX之安装交叉编译工具链问题

LINUX之安装交叉编译工具链问题

QtCreator配置交叉编译工具链

Ubuntu 16.04LTS下内核编译与安装

小米笔记本安装Win10+Ubuntu16.04 LTS 双系统