这Linux 标准库该项目致力于在不同的 Linux 发行版之间创建二进制兼容性。但为什么这是必要的呢?这意味着该包的源代码适用于任何发行版,但编译后,它将不再适用于除为其编译的发行版之外的任何发行版。我认为 Linux 内核是整体的,并且在不同的发行版之间都没有变化。为什么一个发行版上的内核二进制挂钩与另一发行版上的二进制挂钩有所不同?
答案1
在对这个问题进行了更多研究之后,我发现二进制文件有时无法在不同的发行版(具有相同的硬件)上运行的基本上有两个原因,并且都涉及共享库。由于其他类似的问题有相当迟钝的公认答案,没有明确说明这一点,因此我在这里发布一个简化的答案。
(1) 第一个问题是共享库可能位于不同发行版的不同位置。这应该不重要,因为应用程序应该始终在 LD_LIBRARY_PATH 上查找库。然而,显然一些写得不好的应用程序不使用 LD_LIBRARY_PATH,而是使用硬编码的库路径,从而导致发行版级别的不兼容性。
(2) 第二个问题是共享库可能因发行版而异。通常,只有相对晦涩或高级的功能有所不同,但如果应用程序使用的 API 调用由于某种原因位于一个发行版的 .so 中,但不存在于另一个发行版的 .so 中,那么就会出现不兼容性。它有点类似于 PC 上的“DLL 地狱”。