У меня есть файл, в который я пытаюсь включить <filesystem>
. Я пытался включить <expirimental/filesystem>
и добавить -lc++fs
в команду компиляции, но это не работает. Я использовал -std=c++17
, и он все еще не работает. Погуглив этот вопрос, я пришел к выводу, что это связано с тем, что мой компилятор поставляется с модулем <filesystem>
(я использую mingw gcc 6.3.0
). Мне было интересно, есть ли какое-либо решение для установки модуля без переключения компиляторов (и я не собираюсь переходить на Linux, я останусь с Windows). Кроме того, я все еще новичок в Stack Overflow, поэтому не возражайте, если этот вопрос не в правильном формате.
GCC 6 очень устарел. Вы должны обновить его. Стабильные дистрибутивы (то есть настоящий Linux) поставляются с GCC 11, но 12-я версия — самая новая.
Удалите текущую старую версию MinGW и используйте msys2 для установки текущей версии. Если вы используете VSCode, официальная документация говорит вам об этом. Вот сайт msys2: https://www.msys2.org/#installation Вот инструкции VSCode MinGW: https://code.visualstudio.com/docs/cpp/config-mingw
Примечание: подумайте об установке clang, а не gcc. В нем есть несколько дополнительных инструментов для очистки кода и поиска ошибок, которые еще не вошли в gcc для Windows. -fsanitize=address,undefined
может резко сократить количество вопросов по C++, которые вам нужно задать, точно сообщив вам, что пошло не так, и где вам остается только выяснить «Как мне это исправить?» часть. Выглядите как гений в своем классе программирования, используя те же инструменты, что и профессионалы.
Использование этой библиотеки может потребовать дополнительных опций компилятора/компоновщика. Реализация GNU до 9.1 требует связывания с
-lstdc++fs
, а реализация LLVM до LLVM 9.0 требует связывания с-lc++fs
.
MinGW — это порт GCC (GNU), и ваша версия достаточно старая, вам нужен флаг ссылки, но вам нужен флаг ссылки -lstdc++fs
, а не -lc++fs
. Между этим и размещением #include <filesystem>
в верхней части ваших исходных файлов это должно работать.
Конечно, если вы обновитесь до более поздней версии MinGW (9.1 или выше), вам вообще не понадобится флаг компоновщика, и вы, вероятно, получите лучшую поддержку C++17 во всем; 6.3 была выпущена в декабре 2016 года, до черновика стандарта C++17 от марта 2017 года (который был принят с минимальными изменениями в декабре 2017 года), поэтому почти наверняка будут другие небольшие проблемы с полной версией C++17. поддерживать.
«Я пытался включить
<expirimental/filesystem>
». Вы так написали? Потому что пишетсяexperimental
, а неexpirimental
. Имейте в виду, это должно быть просто<filesystem>
для C++ 17 и выше, но если ваш компилятор слишком старый, стоит проверить правописание.