![CentOS 7:安装了 devtoolset-7,但 GCC 7.8 正在使用 GCC 4.8 安装的旧 C++ 包含文件](https://linux22.com/image/1574944/CentOS%207%EF%BC%9A%E5%AE%89%E8%A3%85%E4%BA%86%20devtoolset-7%EF%BC%8C%E4%BD%86%20GCC%207.8%20%E6%AD%A3%E5%9C%A8%E4%BD%BF%E7%94%A8%20GCC%204.8%20%E5%AE%89%E8%A3%85%E7%9A%84%E6%97%A7%20C%2B%2B%20%E5%8C%85%E5%90%AB%E6%96%87%E4%BB%B6.png)
我正在尝试编译并安装开心果在 CentOS 7 机器上,按照他们的说明进行操作。
这是一个需要 C++ 11 的软件包,因此由于 CentOS 7 上的开发工具包安装了不支持 C++ 11 功能的旧版 gcc (4.8.3),因此我安装了 devtoolset-7 并使用 启用了它scl enable devtoolset-7 bash
。它似乎运行正常,如gcc --version
显示 所示gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)
。
但是,当我尝试make
Pistache 源时,出现此编译错误:
/root/compiler_installation_script/pistache/src/server/router.cc:102:45: error: no matching function for call to ‘regex_replace(const string&, std::regex&, const char [2])’
SegmentTreeNode::multiple_slash, "/");
^
/root/compiler_installation_script/pistache/src/server/router.cc:102:45: note: candidates are:
In file included from /usr/include/c++/4.8.2/regex:62:0,
除非我理解错误,否则这似乎表明我的编译器正在使用与 gcc 4.8.3 兼容的过时 C++ 包含头文件,从而导致错误。我该如何修复?
注意:我确信问题不在于 Pistache 源本身,因为我已经在其他机器上成功编译了它,包括昨天的一台全新的 CentOS 7 机器。
答案1
搞清楚了。 使用的是旧版本的 gcc/g++,而不是我自己cmake
运行时命令行选择的版本。因此,在运行 cmake 之前,我必须将 CC 和 CXX 导出到适当的路径。gcc
g++
export CC=/opt/rh/devtoolset-7/root/usr/bin/gcc
export CXX=/opt/rh/devtoolset-7/root/usr/bin/g++
cmake3 -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ..
以前,我只运行上面的最后一行。