发行版之间是否存在任何会影响在一个发行版上直接在另一个发行版上使用 GCC 4.7.x 编译的 C++ 二进制文件的特性或变化?我知道理想的情况是在第二个发行版上从源代码编译,但我真的不想担心在我的生产机器上编译新的 GCC 版本和程序源代码。我是一个相对缺乏经验的 linux 用户(因此提出了问题!)并且仍然更喜欢 IDE,而不是命令行编译,ssh 是我真正可以用来访问生产机器的全部。
代码本身没有什么有趣的,但它确实利用了一些运行的操作系统工具,比如阻塞套接字等。
任何建议将不胜感激!
除非二进制文件构建在完全相同的操作系统(包括版本)和完全相同的硬件上,否则无法保证。
在实践中:
如果硬件是同一系列的芯片,它应该可以工作。
如果操作系统具有相同的主要编号,那么它应该(可能)工作。
我的建议是从源头构建的。
README
只需阅读文件即可轻松构建。但通常它涉及运行两个命令./configure
和make
. 如果你不想要任何特别的东西,你通常不需要做任何其他事情。使用静态链接,必须满足两个条件:
1)目标系统和构建系统必须具有相同的架构(例外:您可以在许多 64 位主机上运行 32 位二进制文件)
2) 目标系统上的 (g)libc 包不能是比构建系统上的旧版本(有时您可以避免微小的版本差异)
动态链接变得更加复杂。
G++ 已经拥有稳定的 ABI 很长一段时间了,所以这不会引起问题。可能导致问题的是使用动态链接库。运行该程序的系统将需要具有编译可执行文件所针对的任何共享库的兼容版本。如果你只使用静态链接,你应该没有问题。-static
您可以使用该选项打开静态链接。
通常,基于较新发行版构建的二进制文件不适用于旧版本,但基于旧发行版构建的二进制文件将适用于较新发行版。目前,如果您在 RedHat EL4 上构建二进制文件,它将适用于大多数受支持的发行版。(如果缺少,您可能需要复制 libstdc++)