编译器版本

时间:2009-11-18 21:30:04

标签: linux gcc multiple-versions

我这里有些人的代码需要用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,代码可以编译和链接,但是当它尝试执行任何字符串操作时会出现段错误。很可能第一次访问任何被破坏的东西恰好是某种字符串操作。

2 个答案:

答案 0 :(得分:2)

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

构建“已损坏”的代码

答案 1 :(得分:0)

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

相关问题