не может использовать файловую систему в g ++ / msys2 на windows - PullRequest
0 голосов
/ 07 мая 2020

Итак, я пишу код C ++ на своей машине windows 10. Обычно я использую cmake (3.17.2) и minGW (g ++ 9.3.0). Я узнал о «файловой системе» и решил использовать ее, но продолжал получать ошибку, что она не определена. По-видимому, «файловая система» не была реализована в minGW до версии 9, и в то время я использовал версию 8. Итак, я обновился до версии 9. После обновления моя программа не компилировалась из-за проблемы с потоками, которую я смог решить, установив msys2 и используя его диспетчер пакетов для установки полной цепочки инструментов.

Моя текущая проблема в том, что когда я запрашиваю msys2 об этом, он говорит, что он установлен:

$ pacboy -Ss filesystem

msys/filesystem 2020.02-2 (base) [installed]
    Base filesystem

но когда я пытаюсь чтобы скомпилировать программу из командной строки, я получаю следующее:

   F:\things\software\Template-CMD>g++ main.cpp 
main.cpp: In function 'int main(int, char**)': main.cpp:5:10: error: 'std::filesystem' has not been declared
        5 |     std::filesystem::current_path();
          |          ^~~~~~~~~~

Это результат компиляции следующей небольшой тестовой программы, состоящей из одного файла «main. cpp»:

#include <iostream>
#include <filesystem>

int main(int, char**) {
    std::filesystem::current_path();
    std::cout << "Hello, world!\n";
}

Я могу использовать поиск windows файла, чтобы подтвердить, что файл с именем «файловая система» действительно существует по адресу:

C: \ msys64 \ mingw64 \ include \ c ++ \ 9.3.0 \ filesystem

, поэтому я попытался скопировать его только в папку include:

C: \ msys64 \ mingw64 \ include \ filesystem

, но это тоже не сработало. В моем PATH есть только один компилятор g ++:

C: \ msys64 \ mingw64 \ bin

Чтобы показать, что g ++ - это версия 9:

F:\things\software\Template-CMD>g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.3.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../gcc-9.3.0/configure --prefix=/mingw64 --with-local-prefix=/mingw64/local --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --with-native-system-header-dir=/mingw64/x86_64-w64-mingw32/include --libexecdir=/mingw64/lib --enable-bootstrap --with-arch=x86-64 --with-tune=generic --enable-languages=c,lto,c++,fortran,ada,objc,obj-c++ --enable-shared --enable-static --enable-libatomic --enable-threads=posix --enable-graphite --enable-fully-dynamic-string --enable-libstdcxx-filesystem-ts=yes --enable-libstdcxx-time=yes --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-isl-version-check --enable-lto --enable-libgomp --disable-multilib --enable-checking=release --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --enable-plugin --with-libiconv --with-system-zlib --with-gmp=/mingw64 --with-mpfr=/mingw64 --with-mpc=/mingw64 --with-isl=/mingw64 --with-pkgversion='Rev2, Built by MSYS2 project' --with-bugurl=https://sourceforge.net/projects/msys2 --with-gnu-as --with-gnu-ld
Thread model: posix
gcc version 9.3.0 (Rev2, Built by MSYS2 project)

1 Ответ

1 голос
/ 07 мая 2020

Файловая система - это общий термин в вычислениях, который может означать разные вещи в разных контекстах.

Найденный вами пакет MSYS2 с именем filesystem - это просто базовый c пакет для MSYS2, который устанавливает множество файлов и папок внутри MSYS2. Как и любой другой пакет MSYS2, вы можете исследовать filesystem, чтобы точно узнать, что он устанавливает, запустив pacman -Ql filesystem. Но этот пакет не имеет отношения к рассматриваемой проблеме.

Библиотека, которую вы загружаете, записывая #include <filesystem> внутри программы C ++, является частью стандартной библиотеки C ++ и помогает вам получить доступ к файловым системам вашего компьютера. Эта часть стандартной библиотеки была добавлена ​​в C ++ 17 , но G CC 9.3.0 по умолчанию использует более старую версию C ++, если вы не указываете, какую версию использовать. Чтобы использовать filesystem, вы должны скомпилировать свою программу с помощью такой команды, которая указывает, что вы хотите использовать C ++ 17:

g++ -std=gnu++17 main.cpp
...