如何正确地在gcc版本之间切换
How to properly switch between gcc versions?
我想玩c++ 2011,所以我需要未发布的gcc 4.7。我能够成功地获得svn主干并编译它。
为了安全起见,我想保留系统的默认gcc,所以我用——前缀配置gcc4.7,并将其安装在一个非标准位置。现在我应该如何在我的系统默认的gcc上启用gcc 4.7呢?
我已经改变了CC和CXX变量,我更新了我的PATH指向gcc 4.7 bin dir。当我输入gcc——version我得到4.7 OK。
但是gcc不仅仅是一个可执行文件。在gcc install dir中有许多可执行文件。也有默认包含和std库c++。
到目前为止,我找到的关于这个主题的每个博客条目/So问题都只讨论gcc和g++可执行文件。谁能给我一个列表的变化,我需要做的环境完全使用gcc 4.7 ?update LD_LIBRARY_PATH ?如何优先考虑gcc 4.7系统包含?还有其他需要考虑的吗?
我认为c++与使用c++的事情纠缠在一起,因为C库与系统纠缠在一起!c++库类中的任何布局更改都将导致与其他c++程序或库的不兼容。因此,我不会替换系统的c++编译器,或者更重要的是,我不会替换它的标准c++库(除非编译器供应商强有力地声称他们与您要替换的版本保持二进制兼容性)。
要玩甚至使用不同版本的g++,使用前缀方法可以很好地工作。所有特定于编译器的工具都是使用合适的版本从c++内部隐式调用的,像ar、ld、ranblib等工具并不真正依赖于编译器的版本。内部使用的重要组件是标准库(头文件和库)和预处理器。当调用一个版本的g++时,它会找出它真正需要的是哪个。
顺便说一句,当你想玩c++ 2011的时候,你也可以看看clang.
最简单的答案是:什么都不做;它只是工作。:)
GCC首先在相对于自身的位置找到它需要的东西,其次在配置它的"前缀"中找到,最后在标准位置找到。通过这种方式,只要您重新定位所有,就可以安全地将其重新定位到您喜欢的任何地方-但要注意,如果安装不完整,则后退行为可能会隐藏损坏。
查看GCC配置文档。我使用程序后缀来区分不同的GCC版本。要做到这一点,例如,将--progam-suffix=-4.7
添加到./configure
调用中。
- 特征版本 3.2.0 和 3.3.4 之间的数值差异
- 为什么库API+编译器ABI足以确保具有不同版本gcc的对象之间的兼容性
- 检测到 Conan 配置文件设置与 CMake 之间的编译器版本不匹配
- 为什么C++中的表达式类型在不同版本之间会发生变化
- 为什么CRC计算在C和C 版本之间有所不同
- 两个提升版本之间的冲突
- .vcxproj 和 .vcxproj.filters 中的工具版本之间的差异
- boost::v1.59 和 v1.60 之间的序列化存档版本
- g++-8 和早期版本之间的奇怪行为
- 如何在两个版本之间从perforce差异获取C/C 函数名称
- 具有C 接口的C 动态库如何在不同的编译器版本之间不会破坏ABI
- GLIBCXX(libstdc++.so.6)与gcc版本之间的关系
- 游戏"Life"中发布和调试版本之间的加速比例奇怪
- 最新版本的提升和提升几何库 (GGL) 之间的冲突
- 是否可以有一个零成本assert(),这样代码就不必在调试和发布版本之间进行修改
- 如何在不同的MS Office版本之间进行C 应用程序切换
- 如何在本机C++(Windows 7及以前版本)和通用C++(Windows 8及以后版本)应用程序之间共享代码
- 版本之间定义的实现
- C++版本之间的差异
- 调试版本和发布版本之间可能出现的差异