在一个Linux发行版上使用g ++编译的可执行文件是否受到限制?

Ell*_*ott 8 c c++ linux gcc g++

在一个发行版直接在另一个发行版上使用GCC 4.7.x编译的C++二进制文件的发行版之间是否有任何特性或变化?我理解理想的情况是在第二个发行版上从源代码编译,但我真的不想担心在我的生产机器上编译新的GCC版本和程序源代码.我是一个相对缺乏经验的linux用户(因此问题!)并且仍然更喜欢IDE而不是命令行编译,ssh是我真正可以用来访问生产机器的.

代码本身并不是什么有趣的东西,但它确实利用了一些工厂OS设施,如阻塞套接字等.

任何建议将不胜感激!

Mar*_*ork 5

除非二进制文件构建在完全相同的操作系统(包括版本)和完全相同的硬件上,否则无法保证.

在实践中:

  1. 如果硬件是同一系列的芯片,它应该工作.

    • 这是因为大多数人没有打开硬件特定的优化(但他们可以).
    • 跨芯片组移动二进制文件的可能性很小
    • 将二进制文件从硬件系列的较旧成员移动到较新的成员可能会起作用
    • 将二进制文件从硬件系列的较新成员移动到较旧成员的可能性较小(但将取决于优化和编译器设置(从64位移植到32位架构不太可能起作用).
  2. 如果操作系统具有相同的主要编号,则应该(可能)工作.

    • 二进制文件可以使用的操作系统版本取决于用于构建它的编译器的版本和主机操作系统.
    • 如果编译器在其生成的ABI中有更改,则所有投注都将关闭.但通常编译器生成的ABI的变化将是一个主要问题,因此只发生在OS路线图中的主要点(而不是小幅增加).
  3. 我的建议来自源头.

    • 不要特意外出并更新开发环境(使用分发附带的开发环境(如果你进行默认更新,它们不会破坏向后兼容性)).
    • 建筑很容易只读README文件.但通常它涉及运行两个命令./configuremake.如果你不想要任何特别的东西,你通常不需要做任何其他事情.