【问题标题】:How to properly switch between gcc versions?如何在 gcc 版本之间正确切换?
【发布时间】:2011-12-30 05:19:22
【问题描述】:

我想玩 C++ 2011,所以我需要未发布的 gcc 4.7。我能够成功获得 svn trunk 并编译它。

为了安全起见,我想保留系统默认的 gcc,所以我为 gcc4.7 配置了一个 --prefix 并将其安装在非标准位置。

现在我应该如何在我系统的默认 gcc 上启用 gcc 4.7?

我已经更改了 CCCXX 变量,我更新了我的 PATH 以指向 gcc 4.7 bin 目录第一。当我输入 gcc --version 我得到 4.7 OK。

但是 gcc 不仅仅是一个可执行文件。 gcc 安装目录中有许多可执行文件。还有默认的includes和std lib c++。

到目前为止,我发现的关于这个主题的每个博客条目/SO 问题都只涉及 gccg++ 可执行文件。

谁能给我一份我需要对环境进行更改以充分使用 gcc 4.7 的列表? 更新 LD_LIBRARY_PATH ?如何优先考虑 gcc 4.7 系统包含?还有其他需要考虑的事情吗?

提前致谢。

【问题讨论】:

  • 在 GCC 常见问题解答中回答:gcc.gnu.org/faq.html#multiple
  • 我在使用 gcc 4.7 编译后遇到了奇怪的段错误。这就是为什么我要询问我可能错过的信息。因此,我的问题中的“正确”;)

标签: c++ gcc


【解决方案1】:

我认为 G++ 与使用 C++ 的事物非常纠缠不清,因为 C 库与系统纠缠在一起! C++ 库类中的任何布局更改都会导致与其他 C++ 程序或库不兼容。因此,我根本不会替换系统的 C++ 编译器,或者更重要的是,它的标准 C++ 库(除非编译器供应商强烈声称他们保留了与您要替换的版本的二进制兼容性)。

要播放甚至使用不同版本的 g++,使用前缀方法可以正常工作。所有编译器特定的工具都是在 g++ 中使用适当的版本隐式调用的,而 ar、ld、ranblib 等工具并不真正取决于编译器版本。内部使用的重要组件是标准库(头文件和库)和预处理器。当调用一个版本的 g++ 时,它会找出它真正需要的那些。

顺便说一句,当你想玩 C++2011 时,你也可以看看 clang。

【讨论】:

  • 谢谢,我尝试了 clang,但它未能在我的代码中发现导致崩溃的错误。 gcc 立即发现了它,并带有一个概述问题的编译错误。从那以后我坚持使用 gcc。在 clang 和 gcc 之间切换比在两个 gcc 之间切换更容易。
【解决方案2】:

最简单的答案是:什么都没有;它只是工作。 :)

GCC 首先找到它自己需要的东西,其次是它配置的“前缀”,最后是标准位置。通过这种方式,只要您将其全部重新定位,就可以将其重新定位到任何您喜欢的地方是完全安全的 - 但请注意,如果安装不完整,回退行为可能会隐藏损坏。

【讨论】:

  • 好的,所以我遇到的问题很可能来自其他问题。会再试一次。
【解决方案3】:

查看GCC Configuration docs。我使用程序后缀来区分不同的 GCC 版本。为此,将 --progam-suffix=-4.7 添加到您的 ./configure 调用中。

【讨论】:

    猜你喜欢
    • 2017-05-04
    • 2023-03-25
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 2012-03-29
    • 2017-06-23
    • 2015-09-18
    相关资源
    最近更新 更多