2010-06-12 74 views
4

我的.deb軟件包,構建於32位Ubuntu上,包含用gcc編譯的可執行文件,不會安裝在64位版本的操作系統上(錯誤消息顯示爲'錯誤的架構i386')。這讓我感到困惑,因爲我認爲一般來說32位軟件在64位硬件上工作,反之則不然。爲什麼在64位Ubuntu上不安裝32位.deb軟件包?

是否可以生成一個.deb文件,我可以使用我的32位機器在64位操作系統上安裝?是否只是使用適當的編譯器標誌來生成可執行文件(如果是的話),還是.deb文件本身對某個處理器體系結構有某種特定性?

回答

6

deb安裝程序可能拒絕安裝您的軟件包,因爲它(正確)標有衝突的體系結構:字段。 i386代碼可以在amd64機器上執行,但它要求存在所有適當的依賴關係(32位庫等)。最好爲每個體系結構構建獨立的包。

是的,你可以在你的32位機器上構建64位。這就是所謂的交叉編譯,它需要你爲此創建一個構建環境。要開始,您可能需要查看dpkg-cross和apt-cross工具。

或者,您可以安裝運行64位操作系統的虛擬機,然後爲您的輔助體系結構進行構建。

2

該體系結構只是debian軟件包的配置文件中的一個選項。默認情況下它使用uname中的那些。你可以重寫它,但有一個更簡單的方法。

通常,大多數32位程序在64位上運行良好。但是,除非您有一臺非常舊的PC,否則在虛擬機虛擬機中安裝一個小型64位debian也非常容易。你可能只需要base + build essentials + dev庫。這不會佔用大量的磁盤空間。如果您可以騰出2G磁盤空間,只需安裝一個桌面debian。

還有更多的選項可以進行交叉編譯,具有不同程度的自動化。

我經常使用virtualbox方法。它很容易和快速。

如果你運行64位linux做一個32位環境就像mkdebootstrap + linux32 + chroot一樣簡單。

+0

任何事情都是可能的。我已經看到了解決方案的架構依賴的東西在不同的目錄中,這些目錄是在postinst中選擇的,並將它們放在符號鏈接的位置。您也可以將您的軟件包拆分成共享軟件包,並將獨立於架構的pkgs分開。所有這些選項都是「非標準實踐」,導致返工和複雜的程序。這是迄今爲止創建2個軟件包的最佳選擇。 – 2010-06-12 07:22:07

相關問題