ошибка при компиляции 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 шт):
Хоть filesystem и переведен недавно из experemental - все же работает во многих версиях компилятора gcc (и основанных на них, например MinGW) крайне не стабильно.
Нужно учитывать, что архитектуры CentOS и Fedora отличаются, хоть и основаны на Red Hat Linux. Это же касается и репозиториев. Поэтому вполне возможно, что в Fedora какой-то заголовок #ifdef отработает, а в CentOS - нет.
Первое, что рекомендую - использовать clang компилятор - он вроде вроде получше с filesystem работает. Также я использую в основном boostовскую версию filesystem - она, как ни странно, более стабильно работает.
Также, если компилируете через QTшные средства - там сейчас в новых версия баг висит - -lstdc++fs удалили, но автоматически не подтягивается. Решить эту проблему можно откатом на версию QT назад или ожидая новой версии с багфиксом.