linux - 编译器版本

标签 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)

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

最佳答案

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

构建“损坏的”代码

关于linux - 编译器版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1759215/

相关文章:

linux - date -d 在 Mac 上不工作

Linux 内核汇编和逻辑

c - 有关 C 语言文件和 I/O 系统调用的基础问题(在 Linux/UNIX 上)

linux - 我可以通过 Apache 服务器切换 bash 文件吗?

gcc - 如何在 Cygwin 中使用 MinGW-w64?

c++ - 为什么 gcc 和 clang 都会为这个程序产生不同的输出? (转换运算符与构造函数)

c++ - const_reference_type 不编译但 const value_type& 编译

javascript - jquery 插件适用于不同的 jquery 版本

php - MAMP Pro 中有多个 MySQL 版本?

ruby-on-rails - 如何在同一台机器上使用多个版本的 Rails