Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用新的G++;编译器链接到旧的libstdc++;_C++_Gcc - Fatal编程技术网

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

C++ 如何使用新的G++;编译器链接到旧的libstdc++;,c++,gcc,C++,Gcc,我正在开发GCC4.4.7附带的RHEL6.7,并希望将GCC升级到devtoolset-3附带的4.9.2。我使用CGEL编译我的C++代码。 Red Hat提供的devtoolset-3在以下位置安装新的GCC: /opt/rh/devtoolset-3/root/usr/bin/ 我想使用新的编译器GCC4.9.2来编译我的代码,但是二进制文件必须在“普通”RHEL6.7安装上工作,所以我试图将二进制文件与此版本RHEL附带的标准库联系起来,这些库来自GCC4.4.7(libstdc++.

我正在开发GCC4.4.7附带的RHEL6.7,并希望将GCC升级到devtoolset-3附带的4.9.2。我使用CGEL编译我的C++代码。 Red Hat提供的devtoolset-3在以下位置安装新的GCC:

/opt/rh/devtoolset-3/root/usr/bin/

我想使用新的编译器GCC4.9.2来编译我的代码,但是二进制文件必须在“普通”RHEL6.7安装上工作,所以我试图将二进制文件与此版本RHEL附带的标准库联系起来,这些库来自GCC4.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/root/usr/include/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:错误:运算符 “| |”没有右操作数
#如果!已定义(uuugxx_uucx0x_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuxxx_uuuuuuuuuuuuuuuuuuu|| _GLIBCXX_已弃用


在这一点上,我有点受阻,想知道是否有人可以帮助我。我想做的事情可能吗?

简短回答:不,不可能。编译GCC 4.9的C++代码的机会,并成功地与GCC 4.4的LIbSTDc++连接,可能不完全是数学零,但实际上相当于它。P.S.S.S.,这对于其他任何C++来说都是一样的,在类似的情况下。FWIW,在最后,(我注意到,它们在目标机器上运行时被选中,使用<代码> -WL,-rpATE,'$Orth原原件)。非常好。谢谢你们两位的评论,据我所知,我必须找到另一种方式来分发我们的应用程序。我对这件事感到困惑。这表明:在C++98模式(默认模式)下使用Red Hat Developer Toolset 2和Red Hat Developer Toolset 3编译的对象彼此兼容,并且在C++98模式下使用Red Hat Enterprise Linux系统编译器编译的对象彼此兼容。