从 Debian 到 Ubuntu 的二进制可执行文件?

从 Debian 到 Ubuntu 的二进制可执行文件?

我在 Debian 上使用 gcc 4.9 编译了一些大型 C++ 程序。我想知道可执行二进制代码在 ubuntu 上是否兼容且安全,或者必须在 Ubuntu 上重新编译程序?

答案1

问题在于当前所有 Linux 中广泛使用的核心库 - glibc。它包含了一项名为“符号版本控制”的“功能”,该功能增加了在 libc 共享库中为每个标准函数提供多个版本的能力,并支持 glibc 附带的库。

例如,生成的二进制文件可能依赖于“GLIBC_2.15”符号版本,而您的目标系统最多提供“GLIBC_2.14”。然后您将收到一条致命错误消息,仅此而已。

一些 glibc 版本甚至拒绝在旧内核甚至硬件上运行,但这种情况很少见。

对于 glibc,静态编译也不是一个选项(如果您考虑过这一点),因为某些 glibc 部分甚至可以从静态程序中需要动态库(在编译和链接期间,如果它占用了空间,您将收到警告)。

如果您需要使一个二进制文件在许多系统上运行,您需要使用另一个 libc。如果您只想让一个二进制文件在其他系统上运行,最好在该系统上重建它。

在某些情况下(不适用于 glibc),如果您的目标非常慢,您可以复制已编译的源代码树,触摸所有对象(*.o)文件并删除二进制文件。然后运行make只会重新链接它。

另请注意,许多(但不是全部!)第三方库也可以强制执行符号版本控制要求,这也适用于它们。

相关内容