linux可执行文件执行时提示No such file or directory(docker环境中运行的ubuntu镜像)

本文主要是介绍linux可执行文件执行时提示No such file or directory(docker环境中运行的ubuntu镜像),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

linux下在转换system.img文件类型时,提示

首先进入到了可执行文件所在目录下,并将system.img也放在同一目录下:

查看文件信息,可以看到文件是存在的,并且是可以执行的。

于是执行如下命令:

执行后提示:bash: ./simg2img: No such file or directory

觉得很纳闷,不知道为什么明明在却提示没有这样的文件,

于是在网上各种查,因为我是在docker中运行的,所以最初一直以为跑在docker的容器中才会有这个问题,其实跟docker半毛钱关系都没有,是因为可执行文件是32位的,而容器是64位的ubuntu,系统位数与该可执行文件需要的lib库位数不匹配。,所以提示可执行文件不存在:

用uname命令打印系统信息,发现系统是64位系统

r# uname -a
Linux ecb7b6d39077 3.13.0-32-generic #57~precise1-Ubuntu SMP Tue Jul 15 03:51:20 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

用file命令查看文件信息,发现是一个32位可执行文件。

file simg2img 
simg2img: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, BuildID[sha1]=d8a290a25c675ee17f378e4cdb1205790b78d63a, not stripped
dynamically linked (uses shared libs), for GNU/Linux 2.2.5, not stripped

要想在64位系统上与运行32位程序,则需要安装32位lib库。
对于Ubuntu用户可以使用下面的命令安装。

sudo apt-get install ia32-libsReading package lists... Done
Building dependency tree       
Reading state information... Done
Package ia32-libs is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:lib32z1 lib32ncurses5 lib32bz2-1.0

过程中有可能找不到需要的库,但是会有几个替代包,选择安装其中一个。

sudo apt-get install lib32bz2-1.0lib32bz2-1.0

然后可以运行,不再提示No such file or directory,但是报错:

./simg2img system.img s.img
./simg2img: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

那就安装提示不存在的库:

sudo apt-get install lib32stdc++6

然后就可以正常运行之前的可执行文件了。

遇到这种问题先把所需要的32位lib库安装好,当然也可能是其他问题,如编码可是问题等。


也提醒我一定要准备个完整的docker镜像,安装一些常用的工具,如vim。32bit libs等



这篇关于linux可执行文件执行时提示No such file or directory(docker环境中运行的ubuntu镜像)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/211312

相关文章

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

python 线程池顺序执行的方法实现

《python线程池顺序执行的方法实现》在Python中,线程池默认是并发执行任务的,但若需要实现任务的顺序执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录方案一:强制单线程(伪顺序执行)方案二:按提交顺序获取结果方案三:任务间依赖控制方案四:队列顺序消

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

linux安装、更新、卸载anaconda实践

《linux安装、更新、卸载anaconda实践》Anaconda是基于conda的科学计算环境,集成1400+包及依赖,安装需下载脚本、接受协议、设置路径、配置环境变量,更新与卸载通过conda命令... 目录随意找一个目录下载安装脚本检查许可证协议,ENTER就可以安装完毕之后激活anaconda安装更

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详