C++ 如何使用新的G++;编译器链接到旧的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中添加了以下行: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++.
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系统编译器编译的对象彼此兼容。