1. 程式人生 > >64位Ubuntu執行32位程式及下載依賴庫

64位Ubuntu執行32位程式及下載依賴庫

嗯幹活的時候就是會遇到一些奇奇怪怪的問題。

執行32位程式

在普通的64位Ubuntu機器上直接執行32位的ELF程式會出現這樣的問題:

yy@yy-DELL:~$ ./cjpeg 115.bmp
bash: ./cjpeg: 沒有那個檔案或目錄

然而目錄下明明有這個檔案,這是因為64位系統中缺少32位程式執行時必要的庫。在Ubuntu12.04之前可以通過安裝庫ia32-libs來解決此問題,在Ubuntu12.04之後的版本可以通過安裝lib32ncurses5lib32z1來解決。

sudo apt-get install lib32ncurses5 lib32z1

下載安裝指定依賴庫

許多elf程式的執行會依賴一些共享庫,如果沒有安裝會有如下提示:

[email protected]:~$ ./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選項來查詢共享庫:

[email protected]-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能夠正常執行啦。