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-libs
Reading 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.0
lib32bz2-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等