我正在尝试编译并安装开心果在 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 ..
以前,我只运行上面的最后一行。