嗯干活的时候就是会遇到一些奇奇怪怪的问题。
运行32位程序
在普通的64位Ubuntu机器上直接运行32位的ELF程序会出现这样的问题:
yy@yy-DELL:~$ ./cjpeg 115.bmp
bash: ./cjpeg: 没有那个文件或目录
然而目录下明明有这个文件,这是因为64位系统中缺少32位程序运行时必要的库。在Ubuntu12.04之前可以通过安装库ia32-libs
来解决此问题,在Ubuntu12.04之后的版本可以通过安装lib32ncurses5
和lib32z1
来解决。
sudo apt-get install lib32ncurses5 lib32z1
下载安装指定依赖库
许多elf程序的运行会依赖一些共享库,如果没有安装会有如下提示:
yy@yy-DELL:~$ ./cjpeg 115.bmp
./cjpeg: error while loading shared libraries: libjpeg.so.8: cannot open shared object file: No such file or directory
此时就需要先安装共享库libjpeg.so.8,可以通过apt-file找到想要安装的共享库在哪个包里, 然后安装这个包。
首先安装apt-file:
sudo apt-get install apt-file
apt-file update
然后用apt-file的search选项来查找共享库:
yy@yy-DELL:~$ apt-file search libjpeg.so.8
libjpeg-turbo8: /usr/lib/x86_64-linux-gnu/libjpeg.so.8
libjpeg-turbo8: /usr/lib/x86_64-linux-gnu/libjpeg.so.8.0.2
安装libjpeg-turbo8,注意对于32位的cjpeg程序,需要安装32位的libjpeg-turbo8:
sudo apt-get install libjpeg-turbo8:i386
其中i386指定了软件包为32位。安装完毕后再次运行cjpeg,可以看到cjpeg能够正常运行啦。