Ubuntu 64系统执行二进制文件提示No such file or directory

这几天想在Ubuntu 64位系统上配置高通801板子的交叉编译工具链,板子是linaro系统,armv7,32位,我的编译环境是Ubuntu16.04 LTS.

按照指定的步骤配置好g++编辑工具(arm-linux-gnueabihf-g++),make时提示command not found。

直接到arm-linux-gnueabihf-g++这个bin文件下执行./arm-linux-gnueabihf-g++,提示No such file or directory.令我百思不得其解,即使这个二进制文件错误,也不应该提示这个错误呀,明明这个文件存在的。

废了好大劲儿,各种尝试,后来终于找到了错误-运行兼容linux standard base(LSB)程序问题。

有很多商业软件在发布时按照LSB规范来分发二进制。如果系统不符合LSB规范则这些程序都无法运行,比如下面这个过程
$ ./arm-linux-gnueabihf-g++
-bash: ./arm-linux-gnueabihf-g++: No such file or directory
查看文件存在
$ file ./arm-linux-gnueabihf-g++
./arm-linux-gnueabihf-g++: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
执行权限也正确
$ ls -lha ./arm-linux-gnueabihf-g++
-rwxr-xr-x 1 em em 854K Jun 8 2009 ./arm-linux-gnueabihf-g++
用LDD检查,无法查看内容
$ ldd ./arm-linux-gnueabihf-g++
/usr/bin/ldd: line 116: ./arm-linux-gnueabihf-g++: No such file or directory
也就是说有这么一个程序,束手无策。

这是因为这些程序在编译阶段和lsb的一坨东西绑在一起了,所以当缺失这些基本的库文件的时候根本不会知道出什么错误了。
一般来说通过lsb_release会检查出发行版对LSB的支持情况。在对LSB的支持态度上,Redhat、Debian这些发行版比较积极,Arch稍麻烦(好像AUR有lsb-core),而gentoo基本持批评态度,开发者态度也及其糟糕(可自行google gentoo lsb,很快就能找到一大堆战贴)

解决方案
------------------------------------------------------
Fedora/Debian/arch等
搜索lsb-core并安装就没有问题了apt-get upate apt-get install lsb-core

(虽然这类程序往往只“支持”RHEL),有了lsb-core后可以使用ldd+程序名可以很容易检查到缺失的库文件,安装缺失的依赖软件运行起来一般不会有问题。


对于这个交叉编译安装错误,用ldd查看得到

ldd ./arm-linux-gnueabihf-g++
    linux-gate.so.1 =>  (0xf77a4000)
    libstdc++.so.6 => not found
    libm.so.6 => /lib32/libm.so.6 (0xf7731000)
    libpthread.so.0 => /lib32/libpthread.so.0 (0xf7714000)
    libdl.so.2 => /lib32/libdl.so.2 (0xf770f000)
    libgcc_s.so.1 => not found
    libc.so.6 => /lib32/libc.so.6 (0xf755b000)
    /lib/ld-linux.so.2 (0x5660e000)
在网上搜了下,大概是64位系统需要一个包,就安装了libc6-i386,$sudo apt-get install libc6-i386

安装完了还是不对,又提示新的错误,编译找不到 libstdc++.so.6 文件,到/usr/lib文件下看下有这个文件 

一直在找资料,找了一天,在官方文件中发现有两个包包含这个文件 

一个是libstdc++6 
一个事lib32stdc++6 
于是

$sudo apt-get install libstdc++6 
$sudo apt-get install lib32stdc++6

问题顺利解决


### Ubuntu "No such file or directory" 错误解决方案 当在Ubuntu系统中尝试执行某个程序时如果遇到"No such file or directory"错误,可能的原因包括但不限于缺少可执行权限、文件类型与操作系统不兼容以及文件本身的损坏等问题[^4]。 对于缺乏可执行权限的情况,可以通过命令`chmod +x 文件名`来赋予该文件相应的执行权利。这允许用户运行此二进制文件作为应用程序的一部分操作流程。 针对文件格式同系统架构之间的差异所引发的问题——比如试图在一个64位版本的操作系统上启动专为32位设计的应用而未安装必要的库支持,则需确认目标平台特性是否满足需求。利用`file ./filename`可以获取有关特定文件类型的详情;与此同时借助`uname -a`能够了解主机当前使用的内核及其他重要参数信息。一旦确定两者之间存在冲突,应当考虑下载适配于现有环境的新副本或是通过额外配置使得旧版得以正常运作。 另外,在某些情况下,即使路径正确无误且具备适当属性,仍会遭遇此类异常现象。此时应排查是否存在依赖项缺失的情形。特别是涉及到跨平台开发工具链的时候,像ARM Linux GCC这类编译器若未能正确设置PATH变量指向其所在位置也会抛出相似的警告消息。因此建议核查相关软件包是否已妥善部署完毕,并确保shell初始化脚本里包含了正确的搜索路径定义[^2]。 最后一种可能性涉及到了底层存储介质层面的数据一致性问题。假如怀疑硬盘内部结构遭到破坏进而影响到关键组件加载过程的话,那么运用诸如fsck这样的磁盘检测实用程序来进行全面扫描不失为明智之举。具体做法是从单用户模式进入之后依次对各个分区实施强制性的健康状况评估工作,例如: ```bash sudo fsck -f /dev/sda1 sudo fsck -f /dev/sda6 sudo fsck -f /dev/sda7 ``` 上述措施有助于恢复潜在受损之处从而保障整个系统的稳定性和可靠性[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值