CentOS 7: установлен devtoolset-7, но GCC 7.8 использует старые установочные файлы C ++ для установки GCC 4.8

641
Josh1billion

Я пытаюсь скомпилировать и установить 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.

0

1 ответ на вопрос

0
Josh1billion

Догадаться. 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 .. 

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

Вам не нужно экспортировать компилятор C или C ++ (CC или CXX). У меня какое-то время был devtoolset-7 в моей машине CentOS 7 (у меня также есть GCC 8.2, который я скомпилировал), и мне никогда не приходилось экспортировать компиляторы после запуска scl enable devtoolset-7 bash. Когда вы `echo $ PATH` и echo` $ LD_LIBRARY_PATH`, вы получаете пути к исполняемым файлам и библиотекам, таким как: `/ opt / rh / devtoolset-7 / root / usr / bin`,` / opt / rh / devtoolset-7 / root / usr / lib64` и `/ opt / rh / devtoolset-7 / root / usr / lib`? Nasir Riley 5 лет назад 0
@NasirRiley Да, пути devtoolset-7 обнаруживаются, когда я повторяю как $ PATH, так и $ LD_LIBRARY_PATH. Интересно, не в этом ли причина, связанная с конфигурацией cmake Pistache? Josh1billion 5 лет назад 0
Я только что скомпилировал Pistache на своем компьютере CentOS 7.5 после включения `devtoolset-7` той же командой, что и вы. Я смог запустить ту же команду `cmake3`, что и вы, с той лишь разницей, что я добавил` -D CMAKE_INSTALL_PREFIX = `, чтобы установить ее в другом месте. Все закончилось, и я без проблем запустил make и make install. Кажется, что-то не так с вашей средой. Nasir Riley 5 лет назад 0
Да, определенно что-то конкретное для этой коробки. Я сделал те же шаги с другой, свежей машиной CentOS 7 на днях и не столкнулся с проблемой. Josh1billion 5 лет назад 0

Похожие вопросы