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