Под Astra Linux CE 2.12.46 (Orel) Clang 10 C++ 17 отсутствует variant

gor

New member
Сообщения
8
#1
привет всем, столкнулся с проблемой, она наверняка как то решается впервые столкнулся с таким. Под Windows, Kubuntu, Ubuntu все ок под Astra Linux CE 2.12.46 (Orel) возникла проблема. В репозитарии есть gcc 6.3.0 и clang 10. Я выбрал clang 10 потому как он поддерживает c++ 17, а мне нужен как раз был тип std::variant из этого стандарта C++, использую cmake при компиляции получаю:
Код:
[build] [1/1   0% :: 0.001] Re-running CMake...
[build] -- Enabled С++17 standard
[build] CMAKE_CXX_COMPILER_VERSION = 10.0.0
[build] -- Configuring done
[build] -- Generating done
[build] -- Build files have been written to: /home/gor/Документы/projects/toris2corba/build
[build] [5/6  16% :: 0.351] Building CXX object toris2_server/CMakeFiles/toris2_server.dir/storage.cpp.o
[build] FAILED: toris2_server/CMakeFiles/toris2_server.dir/storage.cpp.o
[build] /usr/bin/clang++-10  -DACE_LACKS_AUTO_PTR -DTORIS2_EXTERNAL -I../toris2_server/../include -I../toris2_server/../toris_idl -I/home/gor/libraries/ACE_wrappers -I/home/gor/libraries/ACE_wrappers/TAO -O3 -DNDEBUG   -std=gnu++17 -MD -MT toris2_server/CMakeFiles/toris2_server.dir/storage.cpp.o -MF toris2_server/CMakeFiles/toris2_server.dir/storage.cpp.o.d -o toris2_server/CMakeFiles/toris2_server.dir/storage.cpp.o -c ../toris2_server/storage.cpp
[build] In file included from ../toris2_server/storage.cpp:1:
[build] In file included from ../toris2_server/storage.h:3:
[build] In file included from ../toris2_server/storage_types.h:5:
[build] ../toris2_server/../include/tvariant.h:3:10: fatal error: 'variant' file not found
[build] #include <variant>
На просторах интернета нашел вот такую конструкцию вроде как решающую данную проблему, якобы что clang 10 по умолчанию пользует библиотеку stl из gcc и нужно что бы пользовал свою, не знаю правда это или нет, попробовал:
Код:
# Using libc++ for clang less 11.0.0
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11.0.0)
target_compile_options(${PROJECT_NAME} INTERFACE -stdlib=libc++)
add_link_options(-stdlib=libc++)
endif ()
Но увы проблема не решилась, если кто-нибудь знает как решить эту проблему буду премного благодарен за помощь.
СПАСИБО КОЛЛЕГИ ! )
 
Последнее редактирование:

countmein

New member
Сообщения
326
#2
Если заголовочного файла нету, то, наверно, никакая конструкция не поможет.
Код:
$ find /usr/include -type f -name variant
/usr/include/c++/10/variant
Но это на Альте.
 

gor

New member
Сообщения
8
#3
Я подключил stl поставляемый с clang с помощью двух строк в cmake:
add_compile_options(-stdlibc=libc++)
add_link_options(-stdlib=libc++)

Но от этого легче не стало, тип std::variant есть, но в проекте использовались 2 библиотеки ACE + TAO, они законфликтовали потому что собраны clang но с stl от gcc 6.3. Почистил сборку библиотеки, добавил опции компилятора в настройки библиотеки что бы использовалась stl поставляемая с clang. Начал сборку ACE + TAO оказалось что требует заголовки от gcc... Пока начало разработки проекта, приходим к выводу что наверно выбрать другую ОС в качестве отечественной на которой будет работать наш продукт, где gcc поддерживает последние версии C++, например Alt.