如何執行套件管理器未提供的需要 ia32-libs 的軟體

如何執行套件管理器未提供的需要 ia32-libs 的軟體

我正在嘗試在 Virtualbox VM 上安裝 Arma 2 OA 專用伺服器,這樣我就可以在沙箱環境中測試我自己的任務,這樣我就可以將它們卸載到網路中的另一台電腦上。 (另一台電腦正在運行虛擬機,但它是一台Windows機器,我不想麻煩它的安裝)它至少需要2個,最好是4GB RAM,所以我想我會安裝AMD64版本的ubuntu 13.10 讓這件事繼續下去。

'如何在 64 位元版本的 Ubuntu 上執行 32 位元程式?' 已經解釋瞭如何透過 apt-get 和/或 dpkg 安裝 32 位元軟體,但這不適用於本例。

該伺服器在 Arma 遊戲開發人員 BI Studio 的網站上以壓縮下載形式提供。它的安裝說明顯然與當前的技術水平稍微過時。 (可能是因為最先進的技術最近已經更新了:))它指出我必須安裝 ia32-libs,它現在顯然已被棄用。現在我必須找出如何安裝正確的軟體包以確保它能夠運作。

當涉及到這些問題時,我的經驗水平相當於新手中級。我已經透過 apt-get 安裝了許多軟體包;我過去已經解決過依賴性問題;我沒有在不使用套件管理器的情況下安裝太多軟體。我可以處理基本的管理工作,例如編輯conf檔案等。

我剛剛嘗試安裝它,而不透過 apt-get 安裝 ia32-libs,而是安裝 gcc 來獲取庫。我的理由是 gcc 將包含用於向後相容編碼的文件,並且在 Linux 上,所有庫(據我所知)都安裝在/libs.到目前為止,似乎已經啟動了。 (我可以透過遊戲內網頁瀏覽器與遊戲伺服器連接,因此它正在通信)我不確定運行遊戲伺服器程式時是否進行任何依賴性檢查,所以我留下了幾個問題:

  • 13.10 是否捕獲任何對 ia32libs 函式庫的呼叫並將這些呼叫轉換為 amd64 上的正確程式碼?
  • 如果它運行,這是否意味著所有必需的庫都已正確加載,或者當所需的庫丟失時,它是否有可能稍後崩潰?
  • 是否有必要採取諸如安裝gcc之類的解決方法? (以及它的 i386 庫)
  • 如何找出運行該軟體可能需要哪些函式庫? (或任何其他未透過套件管理器提供的 32 位元軟體)

  • 答案1

    這主要取決於軟體及其編寫方式。在這種情況下,我會選擇 32 位元 Debian(如果可用)二進位檔案或已編譯的 32 位元二進位檔案。這已經在我的回答中解釋過如何在 64 位元版本的 Ubuntu 上執行 32 位元程式?甚至演示了運行 32 位元系統的 64 位元版本(幾年前這是不可能的)。實際上,在 64 位元系統中運行 32 位元應用程式會更容易。

    通常,當您執行二進位檔案時,它會通知您缺少的庫,您可以在儲存庫中找到這些庫。

    13.10 是否捕獲任何對 ia32libs 函式庫的呼叫並將這些呼叫轉換為 amd64 上的正確程式碼?

    不,開發人員應該這樣做。系統僅顯示使用 GNU Linker 的函式庫ld。如果軟體嘗試使用「硬編碼」庫,那麼您必須欺騙他並將其指向正確的庫。現代的、編寫良好的軟體不需要這個。

    如果它運行,這是否意味著所有必需的庫都已正確加載,或者當所需的庫最終丟失時,是否會發生更改導致崩潰?

    如果能跑起來就完美了透過在可執行檔開始時載入庫,如果沒有它們(即其中一些缺失),它將無法啟動,但即使它們存在,也不是所有調用都會在啟動時調用,因此可能對某個函數進行某個調用改變了它的行為方式並且應用程式不支援這一點,從而導致崩潰。這是極端情況,但它們是可能的,因此您可能會注意到它是否與較新的庫不相容。然而,這完全是另一個問題。要解決這個問題,您必須適應新的程式庫或降級已安裝的程式庫。

    是否有必要採取諸如安裝gcc之類的解決方法?

    gcc是一個編譯器。只有當您將使用 C 或 C++ 編譯程式碼時,才需要安裝它。其他情況可能需要解決方法,但我還沒有看到需要gcc編譯器運行的“二進位”(已編譯的可執行檔)。

    如何找出運行該軟體可能需要哪些函式庫? (或任何其他未透過套件管理器提供的 32 位元軟體)

    有點粗暴,但是如果說明沒有確切說明您需要什麼庫,或者使用該ld-linux.so --list命令。例子:

    $ /lib64/ld-linux-x86-64.so.2 --list /bin/bash
        linux-vdso.so.1 =>  (0x00007fffd479f000)
        libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f0d39138000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0d38f34000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0d38b6a000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f0d3937f000
    

    ldd二進位提供相同的輸出,感謝@ubfan)

    如您所見,bash請使用 linux-vdso、libtinfo.so、libdl.so 和 libc.so。如果這些庫是正確的,那麼bash對它們感到滿意。這是為了動態連結的二進位文件。您可以使用--verify它來檢查二進位檔案是否確實是動態連結的。

    然後你取庫的名稱,比方說libtinfo.so.5,它包含在包中:

    File                                Packages
    /lib/i386-linux-gnu/libtinfo.so.5   libtinfo5 [not amd64]
    /lib/x86_64-linux-gnu/libtinfo.so.5 libtinfo5 [not i386]
    /lib32/libtinfo.so.5                lib32tinfo5 [not i386]
    /lib64/libtinfo.so.5                lib64tinfo5 [not amd64]
    /usr/lib/debug/libtinfo.so.5        libtinfo5-dbg
    /usr/libx32/libtinfo.so.5           libx32tinfo5
    

    因此,我們只需為二進位架構安裝正確的軟體包(如果是 32 位,請新增:i386軟體包名稱 64-bit :amd64),然後就可以開始了。

    不用說,要在 32 位元平台上運行 64 位元二進位文件,您的 CPU 必須支援 64 位元(2008 年及以後的大多數系統都支援),並且很可能需要安裝 64 位元核心。

    相關內容