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
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 已经是最新的版本了。
确认下是否安装成功。
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的主要内容,如果未能解决你的问题,请参考以下文章