【问题标题】:compiler versions编译器版本
【发布时间】:2009-11-18 21:30:04
【问题描述】:

我这里有些人的代码需要用 gcc-3.3 编译。我们有一个 CentOS 5.2。

当我们用他们的 make 文件编译它时,它在链接过程中失败,他们说这是因为它不适用于已经安装的 gcc-3.4。有什么我需要告诉他们更改以使其运行的东西,还是可以找到 gcc-3.3 作为 rpm 并安装它?我想,最初我问的是 gcc-3.3 和 gcc-3.4 之间有多大区别,因为 3.3 不在 CentOS 5.2 安装媒体中。

或者,compat-gcc-3.2 可以安装在也有 compat-gcc-3.4 的发行版上吗?

添加:

错误是

/usr/include/c++/3.2.3/bits/stl_alloc.h:248: undefined reference to std::__default_alloc_template<true, 0>::deallocate(void *, unsigned int)

所以我怀疑可能链接了错误的标题或库。通过安装 compat-gcc-32,代码可以编译和链接,但是当它尝试执行任何字符串操作时会出现段错误。很可能对任何被破坏的东西的第一次访问恰好是某种字符串操作。

【问题讨论】:

  • 您可能想发布一些错误消息。如果我们看到错误,我们也许能够提供线索,说明真正的错误。没有它,我们就无法真正评论修复代码。
  • 对,尝试使用旧编译器进行编译是个坏主意,因为随着时间的推移,旧代码会继续出现更多问题。应该很容易为新的 gcc 修复它。
  • 它甚至可能没有那么难修复,具体取决于错误。我当前的代码库无法使用 gcc-3.4 进行编译,并且一个承包商花了几个月的时间对其进行黑客攻击(最终破坏了很多东西)。当我得到它时,我查找了错误,发现它是警告消息中更改默认值的结果,并将适当的咒语添加到我们的 makefile 中。我现在可以使用较新的编译器进行构建,并在闲暇时以小增量修复潜在问题。

标签: linux gcc multiple-versions


【解决方案1】:

gcc-3.3和3.4内部的区别很大:gcc-3.4完全重新实现了C/C++前端。

合理地符合标准的程序应该不存在差异。使用 3.3 构建而无法使用 3.4 构建的代码很可能已损坏,最好的办法是让开发人员修复该代码。

如果你不能这样做,那么只需从源代码构建 GCC-3.3:

tar xzf gcc-3.3.tar.gz && cd gcc-3.3 &&
./configure --prefix /usr/local/gcc-3.3 --enable-languages=c,c++ &&
make && make install

然后用PATH=/usr/local/gcc-3.3/bin:$PATH make构建“损坏”的代码

【讨论】:

    【解决方案2】:

    我怀疑您是否会在您的 CentOS 安装中找到可以与现有 GCC 3.4 RPM 一起安装的 GCC 3.3 RPM。我可能会从源代码安装 GCC 3.3,以避免在 RPM 数据库中弄乱不同的 GCC 版本。

    【讨论】:

      猜你喜欢
      • 2011-04-05
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多