我可以运行从更高版本的gcc编译的二进制文件吗?

时间:2015-09-18 23:54:13

标签: linux gcc compilation

例如,我的本地计算机只有gcc 4.4。我可以运行从gcc 4.8编译的二进制文件吗?

2 个答案:

答案 0 :(得分:3)

运行二进制文件取决于您的库,而不是您的编译器,因此安装Company has_one :incorporation无关紧要。检查您的库版本。

答案 1 :(得分:2)

根据具体情况,这里有几种可能的答案:

首先,一个重要因素是所讨论的二进制文件是C还是C ++。 C ++ ABI与编译器紧密耦合。您不太可能运行由更高版本的gcc构建的C ++代码。 C ++标准库随编译器一起提供。如果你没有安装gcc 4.8,你也不会安装该版本的libstdc ++,并且不太可能运行任何gcc 4.8 C ++代码。通常,libstdc ++更有可能具有向前兼容性,而不是向后兼容性。

相反,C ABI与编译器的结合程度较低,并且纯C代码运行的可能性很小,只要它不使用C标准库中任何特定的符号即可。到更高版本的libc。对于所讨论的特定代码使用的每个其他共享库也是如此。

但还有另外一个答案:

简单地说" no",就是这样。这个问题经常被问到是否拥有旧版本的商业Linux发行版的既定位置,该发行版附带了一些流行软件包(通常是Apache)的陈旧版本,或者它也可能是Mysql,也许是PHP或类似的东西;并且需要安装另一个需要更新版本组件的产品,该产品可以在当前版本的商业Linux发行版中使用,但不能在旧版本中使用。

所以这个问题试图弄清楚是否有可能从当前版本的发行版中简单地抓取Apache或其他东西,并以某种方式将其塞进旧版本中。当我听到这里提出的问题时,我的经验是,这类问题实际上是这类XY问题的一种表现。

正确的答案是将商业Linux发行版更新为当前版本,或者将源代码获取到相关软件包的较新版本,并使用商业Linux发行版的打包工具构建它然后使用商业Linux发行版的常规包更新过程继续执行该系统组件的标准更新;而不是试图从较新版本的Linux发行版执行这种半心半意的移植,因为缺乏本地开发人员和/或系统管理员资源,这些资源具备准备适当的软件更新构建所必需的知识。这种脑移植很少有效,最多会造成随机的不稳定和崩溃,并成为支持资源的永久消耗。

这里的答案必须是正确答案:正确更新Linux发行版,或使用系统编译器从源代码构建相关软件的较新版本。