ошибка при компиляции cpp файла

Создаю файл,допустим /home/user/cptest.cpp Помещаю в него следующий код:

#include <iostream>
#include <filesystem>
using namespace std; 
int main(int argc, char* argv[]){
    string path;
    path=getenv("HOME");
    path+="/";
    path+= argv[argc-2]; 
    std::filesystem::create_directories(path);
}

Захоожу в терминал и делаю

c++ --std=c++17 cptest.cpp

Делаю я это все в CentOS 8. В Fedore 32 все без проблем компилилось, с явным указанием флага компиляции. Сейчас получаю ошибку

cptest.cpp:(.text+0x8f): undefined reference to `std::filesystem::create_directories(std::filesystem::__cxx11::path const&)'
/tmp/ccbiLQw1.o: In function `std::filesystem::__cxx11::path::path<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::filesystem::__cxx11::path>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::filesystem::__cxx11::path::format)':
cptest.cpp:(.text._ZNSt10filesystem7__cxx114pathC2INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_EERKT_NS1_6formatE[_ZNSt10filesystem7__cxx114pathC5INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_EERKT_NS1_6formatE]+0x64): undefined reference to `std::filesystem::__cxx11::path::_M_split_cmpts()'
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
   -

Что не так сделал?


Ответы (2 шт):

Автор решения: dIm0n

Попробуйте добавить флаг -lstdc++fs.

→ Ссылка
Автор решения: Alrott SlimRG

Хоть filesystem и переведен недавно из experemental - все же работает во многих версиях компилятора gcc (и основанных на них, например MinGW) крайне не стабильно.

Нужно учитывать, что архитектуры CentOS и Fedora отличаются, хоть и основаны на Red Hat Linux. Это же касается и репозиториев. Поэтому вполне возможно, что в Fedora какой-то заголовок #ifdef отработает, а в CentOS - нет.

Первое, что рекомендую - использовать clang компилятор - он вроде вроде получше с filesystem работает. Также я использую в основном boostовскую версию filesystem - она, как ни странно, более стабильно работает.

Также, если компилируете через QTшные средства - там сейчас в новых версия баг висит - -lstdc++fs удалили, но автоматически не подтягивается. Решить эту проблему можно откатом на версию QT назад или ожидая новой версии с багфиксом.

→ Ссылка