Я пытаюсь скомпилировать и установить Pistache на компьютере CentOS 7, следуя их инструкциям.

Это пакет, для которого требуется C++ 11, поэтому, поскольку пакет инструментов разработки в CentOS 7 устанавливает старую версию gcc (4.8.3), которая не поддерживает функции C++ 11, я установил 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,

Если я не понимаю, это, кажется, указывает на то, что мой компилятор использует устаревшие заголовочные файлы C++, совместимые с gcc 4.8.3, что приводит к ошибке. Как я могу это исправить?

Примечание: я уверен, что проблема не в самом исходном коде Pistache, так как я успешно скомпилировал его на других машинах, включая вчерашнюю свежую машину CentOS 7.

1 ответ1

0

Догадаться. cmake использовал старую версию gcc/g++, а не ту, которую брала моя командная строка, когда я сам запускал gcc или g++ . Поэтому мне пришлось экспортировать CC и CXX по соответствующим путям, прежде чем запускать cmake.

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 ..

Ранее я выполнял только последнюю строчку выше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .