1. 程式人生 > >Ubuntu 64位安裝32位執行庫

Ubuntu 64位安裝32位執行庫

 學嵌入式時安裝了 Ubuntu 16.04 x64 ,安裝交叉編譯工具鏈的時候出了問題:

$ ./arm-none-linux-gnueabi-gcc -v
-bash: ./arm-none-linux-gnueabi-gcc: No such file or directory

因為以前裝的時候也遇到過這種問題,其實就是這個工具鏈是32位程式,而Ubuntu 16.04 已經預設不安裝32位執行庫了,所以需要重新安裝32位執行庫 ia32-libs。常規安裝命令:

$ sudo apt-get install ia32-libs

大致會遇到這樣的錯誤:

Some packages could not be installed. This may mean that you have 
requested an impossible situation or if you are using the unstable 
distribution that some required packages have not yet been created 
or been moved out of Incoming.The following information may help 
to resolve the situation:

The following packages have unmet dependencies:
 ia32-libs : Depends: ia32-libs-multiarch
E: Unable to correct problems, you have held broken packages.

這裡要注意,不同的Linux版本的解決方案實際上是不同的,建議大家在搜尋的時候附加上自己的Linux版本。

著急的同學可以直接看參考部落格3、4、5(這裡直接貼出對應的命令)建議嘗試順序參考5,參考4,參考3。

參考5:

$ apt-get install lib32ncurses5 ​
$ apt-get install lib32z1

參考4:

$ sudo apt-get install g++-multilib
$ sudo apt-get install libncurses5:i386
$ sudo apt-get install libc6:i386 libgcc1:i386 gcc-4.6-base:i386 libstdc++5:i386 libstdc++6:i386

參考3:這種方法比較慢,添加了i386架構

// 判斷自己的架構(我的輸出amd64)
$ dpkg --print-architecture
// 新增i386架構
$ dpkg --add-architecture i386
// update 一下
$ sudo apt-get update
// 安裝i386
$ apt-get install iceweasel:i386

想了解原因的童鞋可以接著往下看:

解決方案參考及自己測試:

參考1:http://blog.sina.com.cn/s/blog_96a11ddf0101skaa.html

結果:autoclean 和 autoremove 執行成功,update成功,結果還是和上述錯誤一樣。

上述參考部落格裡有以下一段(做了谷歌翻譯):

“由於ia32-libs現在是一個過渡包裝程式包,它包含以前在ia32-libs中捆綁的一組支援multiarch的庫,所有這些庫包都必須是可安裝的。 在Ubuntu的釋出版本中(例如在精確和精確更新的口袋中),包將始終可單獨安裝; 但是,multiarch對可安裝性施加了額外的限制:庫包必須與要安裝它的所有體系結構完全相同。”

參考2:https://blog.csdn.net/hj74535099/article/details/50220207

還是無法安裝成功。

參考3:https://www.91linux.org/89.html

這裡講到了解決方案:“Multiarch(多架構)術語被用於指一個系統能安裝和執行有多個不同二進位制檔案的應用程式,例如i386-linux-gnu程式能執行在 amd64-linux-gnu系統上。Multiarch還簡化了跨架構編譯。Debian在年度會議DebConf11上作出了引入 Multiarch支援的決定。開發者表示,它大大增強了Debian實現通用作業系統承諾的能力,加強了新的64位系統對32位應用程式的支援。”

參考4:https://blog.csdn.net/hackerwin7/article/details/37878007

這個部落格直接給出瞭解決方案,即安裝 multilib 和 i386 感覺是可行的,因為我試到參考3的時候就可以執行32位程式了。

參考5:https://blog.csdn.net/bfboys/article/details/53013662

未親測,但是我以前好像就是永的這種方法解決的。