如何使用新的G ++编译器链接到旧的libstdc ++

时间:2017-06-09 00:12:17

标签: c++ gcc

我正在使用GCC 4.4.7附带的RHEL 6.7,并希望将GCC升级到devtoolset-3附带的4.9.2。我正在使用cmake来编译我的C ++代码。

Red Hat提供的devtoolset-3安装新的GCC:

  

的/ opt / RH / devtoolset-3 /根的/ usr /斌/

我想使用新的编译器GCC 4.9.2编译我的代码,但二进制文件必须在" vanilla" RHEL 6.7安装所以我试图将二进制文件与此版本RHEL附带的标准库链接,这些库来自GCC 4.4.7( libstdc ++。so.6.0.13 )。

我已将这些行添加到CMake:

set(CMAKE_C_COMPILER "/opt/rh/devtoolset-3/root/usr/bin/cc")
set(CMAKE_CXX_COMPILER "/opt/rh/devtoolset-3/root/usr/bin/c++")

我有一些缺少库的链接问题所以我不得不向GCC命令行添加一些参数:

set(COMPILER_UPGRADE_FLAGS "-pthread -luuid -I/usr/include/c++/4.4.7/")
set(CMAKE_CXX_FLAGS_DEBUG "....... {COMPILER_UPGRADE_FLAGS}")

在这些更改后,我能够编译我的代码。但是,在运行单元测试时,我遇到了分段错误。经过一些调试后,我发现二进制文件已正确链接到RHEL 6.7附带的C ++库,但代码是使用错误的包含文件编译的,其中包含:

  

的/ opt / RH / devtoolset-3 /根的/ usr /包括/ C ++ / 4.9.2 /

为了避免这个问题,我想我会让GCC使用库的原始版本附带的头文件,所以我已经将这个命令行选项添加到GCC:

-I/usr/include/c++/4.4.7/

然而,在这样做之后我再也无法编译我的程序了,我发生了很多这样的错误:

  

/ usr / include / c ++ / 4.4.7 / bits / stl_function.h:711:64:错误:运算符   ' ||'没有正确的操作数
  #if!defined(__ GXX_EXPERIMENTAL_CXX0X__)||   _GLIBCXX_DEPRECATED

此时我有点被阻止,想知道是否有人可以帮助我。我想做什么甚至可能?

0 个答案:

没有答案