Linux

安裝在一個 linux 發行版中的軟體是否可以在另一個 linux 發行版中執行?

  • November 18, 2013

假設,我為“/usr”目錄創建了單獨的分區。這是包含所有使用者程序的目錄。如果我從一個作業系統切換到另一個(例如,從 Ubuntu 到 Arch Linux,反之亦然),Arch linux 可以執行該程序嗎?

我在 Ubuntu 上安裝的 blender 可以在 Arch Linux 上執行嗎?

您可以通過一些工作使它們在不同的發行版上執行。

程序依賴的主要東西是庫。這些庫將儲存在不同發行版中的不同位置,但您可以使用 ldd 命令找出這些庫的連結位置。

例如,這是 ldd/usr/bin/vlc在 Debian 上執行時的輸出

linux-vdso.so.1 (0x00007fff11969000)
libvlc.so.5 => /usr/lib/libvlc.so.5 (0x00007f597eb01000)
libvlccore.so.5 => /usr/lib/libvlccore.so.5 (0x00007f597e819000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f597e5fd000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f597e3f9000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f597e0f5000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f597ddf7000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f597dbe1000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f597d834000)
libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007f597d5ee000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f597d3e6000)
/lib64/ld-linux-x86-64.so.2 (0x00007f597ed37000)

你可以看到所有的庫都/lib/x86_64-linux-gnu

在 Arch 中,vlc 的庫位於/usr/lib

linux-vdso.so.1 (0x00007fff5a1fe000)
libvlc.so.5 => /usr/lib/libvlc.so.5 (0x00007f84fd7c2000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f84fd5a4000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f84fd3a0000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f84fcff5000)
libvlccore.so.7 => /usr/lib/libvlccore.so.7 (0x00007f84fcce1000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007f84fcad9000)
libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0x00007f84fc892000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f84fc58f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f84fd9e0000)

如您所見,這些二進製文件位於稍微不同的位置,而 vlc 二進製文件本身俱有不同的依賴關係。所以理論上使用 Arch 安裝的 VLC,我可以通過將庫連結到正確的位置在 Debian 上執行它。

您還可以通過設置 LD_LIBRARY_PATH 變數來擴展系統查找庫的位置,如下所示 -

export LD_LIBRARY_PATH=/usr/local/libs:$LD_LIBRARY_PATH

引用自:https://unix.stackexchange.com/questions/101595