安装在一个 Linux 发行版中的软件是否可以在另一 Linux 发行版中运行?

安装在一个 Linux 发行版中的软件是否可以在另一 Linux 发行版中运行?

假设我为“/usr”目录创建单独的分区。这是包含所有用户程序的目录。如果我从一种操作系统切换到另一种操作系统(例如从 Ubuntu 切换到 Arch Linux,反之亦然),Arch Linux 可以运行该程序吗?

我在 Ubuntu 上安装的 Blender 可以在 Arch Linux 上运行吗?

答案1

您可以通过一些工作让它们在不同的发行版上运行。
程序主要依赖的东西是库。这些库将存储在不同发行版中的不同位置,但是您可以使用 ldd 命令找到这些库的链接位置。例如,这是 ldd在 Debian 上
运行时的输出/usr/bin/vlc

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 二进制文件本身具有不同的依赖性。因此理论上,通过 VLC 的 Arch 安装,我可以通过将库链接到正确的位置来在 Debian 上运行它。
您还可以通过设置 LD_LIBRARY_PATH 变量来扩展系统查找库的位置,如下所示 -
export LD_LIBRARY_PATH=/usr/local/libs:$LD_LIBRARY_PATH

答案2

我认为他们不会。将分区与不同的包管理器混合使用/usr可能会导致冲突和不兼容。我认为它可以工作的唯一方法是如果您从通用.tar.gz文件安装软件,/opt在这种情况下它应该工作(未经测试)

答案3

不同的发行版通常(但并非总是)将文件放在不同的位置。您可以使用转换包外星人

如果您的磁盘空间确实不足,您可以在 Arch 和 Ubuntu 分区上安装 Blender,检查哪些内容相同,并从相同的文件和目录(以及所有子目录)创建软链接。

答案4

首先,不要混合使用/usr不同的发行版。每个发行版都希望控制其中的内容,并且发行版将不断覆盖彼此的文件。/usr不包含用户程序(是的,这就是名字的由来,但这不是该目录在过去 40 年左右所包含的内容),它包含系统程序。

一种发行版的程序可能在另一种发行版下运行,也可能不运行。这取决于发行版是否具有与程序使用的库足够接近的版本。

如果您在主目录下安装程序/usr/local,并且它们不需要太特定版本的库,那么它们将在两个发行版下工作。

相关内容