无法在Windows的g ++ / msys2中使用文件系统

问题描述 投票:0回答:1

因此,我正在Windows 10计算机上编写C ++代码。我通常使用cmake(3.17.2)和minGW(g ++ 9.3.0),我发现有关“文件系统”的问题并决定使用它,但始终收到未定义的错误。显然直到min 9才在minGW上实现“文件系统”,当时我使用的是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

所以我试图将其复制到包含文件夹中:

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)
c++ g++ filesystems mingw msys2
1个回答
1
投票
File system是计算中的通用术语,在不同的上下文中可能表示不同的事物。

您找到的名为filesystem的MSYS2软件包只是MSYS2的基本软件包,它在MSYS2内安装了一堆文件和文件夹。像任何其他MSYS2软件包一样,您可以通过运行filesystem研究pacman -Ql filesystem,以确切了解其安装的内容。但是,此软件包与当前的问题无关。

您通过在C ++程序中编写#include <filesystem>来加载的库是C ++标准库的一部分,它可以帮助您访问计算机的文件系统。标准库的此部分已添加到C++17中,但是当您不指定使用哪个版本时,GCC 9.3.0默认使用某些旧版本的C ++。要使用filesystem,应使用如下命令编译程序,该命令指定要使用C ++ 17:

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

© www.soinside.com 2019 - 2024. All rights reserved.