MinGW-w64 8.1.0 rev 0 在包含 <filesystem> 时无法编译
MinGW-w64 8.1.0 rev 0 doesn't compile when including <filesystem>
2 天前,我很高兴地注意到 MinGW-w64 发布了它的 gcc 8.1.0,修订版 0。不幸的是,一个简单的程序
#include <filesystem>
int main() {}
不编译。它会导致 <filesystem>
中出现一堆错误,从
开始
C:/MinGW/mingw32/lib/gcc/i686-w64-mingw32/8.1.0/include/c++/bits/fs_path.h: In member function 'std::filesystem::__cxx11::path& std::filesystem::__cxx11::path::operator/=(const std::filesystem::__cxx11::path&)':
C:/MinGW/mingw32/lib/gcc/i686-w64-mingw32/8.1.0/include/c++/bits/fs_path.h:237:47: error: no match for 'operator!=' (operand types are 'std::filesystem::__cxx11::path' and 'std::filesystem::__cxx11::path')
|| (__p.has_root_name() && __p.root_name() != root_name()))
~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
谁该为此负责?或者更好的是,该错误要报告给谁?
这个问题可能是由于 gcc 发行版 (mingw-w64) 或编译器本身 (gcc) 造成的。
作为第一个更可能的假设,我认为这可能是发行版的问题,所以我刚刚将它作为错误添加到 mingw-w64 的 sourceforge 网站上。
https://sourceforge.net/p/mingw-w64/bugs/737/
如果他们发现这是 gcc 的问题,可以将其重新定位到编译器网站 (gcc.gnu.org)。
让我们拭目以待,看看他们在 sourceforge 上的回答。
马可
这是 c++17 和文件系统之间的问题,也许这个 link 会有所帮助。
issue regarding MinGW-w64 8.1.0 compile issue
因此,我将为您提供针对此类似错误的完整证明解决方案,当有人尝试使用 STL 头文件时也会出现该错误 #include
因此,出现此错误是因为您当前使用的是 GCC 版本 8.2.0,这是 MinGW 网站上的默认版本。
要解决这个问题你需要更新到 GCC 10.2.0
以下是您需要遵循的步骤:-
1.) 从 https://www.msys2.org/ 下载并安装 Msys2
2.) 运行 或启动它并输入 pacman -Syu 并按回车,然后它会要求您输入 Y/N 继续,只需输入回车而不按 Y/n。
3.) 关闭它并再次启动 msys2 至少 运行 这个命令 2-3 次,直到它显示无关或没有更新。
4.) 为了做同样的事情,我还分享了一个 link 到 youtube 视频。
https://www.youtube.com/watch?v=aXF4A5UeSeM&
5.) 要检查您是否已成功安装 GCC 10.2.0,只需打开 cmd 并键入 GCC --version 并在显示 10.2.0 时按回车键,万岁,你做到了,等等,这还没有结束。
6.) 现在卸载 Clion 或您正在使用的任何 IDE。
7.) 在重新安装之前,您需要删除程序文件文件夹(名称 Jetbrains)中显示的一些剩余 Jetbrains 转储文件。删除该文件夹并重新安装。
8.) 现在 select Msys2/MingW-64,而不是安装时系统中已有的上一个(正常的 MinGW)。
9.) 现在你可以去你的添加或删除程序部分,可以删除那个浪费正常的 MinGW-64,而不是 msys2(不要删除 msys2)只删除 ming64 前一个。
10.) 现在您可以运行使用那个性感的 stl 库而不会出现任何错误。
不过,如果您在执行这些步骤时遇到任何问题,请在评论中问我。
谢谢,伙计们。
2 天前,我很高兴地注意到 MinGW-w64 发布了它的 gcc 8.1.0,修订版 0。不幸的是,一个简单的程序
#include <filesystem>
int main() {}
不编译。它会导致 <filesystem>
中出现一堆错误,从
C:/MinGW/mingw32/lib/gcc/i686-w64-mingw32/8.1.0/include/c++/bits/fs_path.h: In member function 'std::filesystem::__cxx11::path& std::filesystem::__cxx11::path::operator/=(const std::filesystem::__cxx11::path&)':
C:/MinGW/mingw32/lib/gcc/i686-w64-mingw32/8.1.0/include/c++/bits/fs_path.h:237:47: error: no match for 'operator!=' (operand types are 'std::filesystem::__cxx11::path' and 'std::filesystem::__cxx11::path')
|| (__p.has_root_name() && __p.root_name() != root_name()))
~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
谁该为此负责?或者更好的是,该错误要报告给谁?
这个问题可能是由于 gcc 发行版 (mingw-w64) 或编译器本身 (gcc) 造成的。
作为第一个更可能的假设,我认为这可能是发行版的问题,所以我刚刚将它作为错误添加到 mingw-w64 的 sourceforge 网站上。
https://sourceforge.net/p/mingw-w64/bugs/737/
如果他们发现这是 gcc 的问题,可以将其重新定位到编译器网站 (gcc.gnu.org)。
让我们拭目以待,看看他们在 sourceforge 上的回答。
马可
这是 c++17 和文件系统之间的问题,也许这个 link 会有所帮助。 issue regarding MinGW-w64 8.1.0 compile issue
因此,我将为您提供针对此类似错误的完整证明解决方案,当有人尝试使用 STL 头文件时也会出现该错误 #include
因此,出现此错误是因为您当前使用的是 GCC 版本 8.2.0,这是 MinGW 网站上的默认版本。 要解决这个问题你需要更新到 GCC 10.2.0
以下是您需要遵循的步骤:- 1.) 从 https://www.msys2.org/ 下载并安装 Msys2 2.) 运行 或启动它并输入 pacman -Syu 并按回车,然后它会要求您输入 Y/N 继续,只需输入回车而不按 Y/n。 3.) 关闭它并再次启动 msys2 至少 运行 这个命令 2-3 次,直到它显示无关或没有更新。 4.) 为了做同样的事情,我还分享了一个 link 到 youtube 视频。 https://www.youtube.com/watch?v=aXF4A5UeSeM&
5.) 要检查您是否已成功安装 GCC 10.2.0,只需打开 cmd 并键入 GCC --version 并在显示 10.2.0 时按回车键,万岁,你做到了,等等,这还没有结束。 6.) 现在卸载 Clion 或您正在使用的任何 IDE。 7.) 在重新安装之前,您需要删除程序文件文件夹(名称 Jetbrains)中显示的一些剩余 Jetbrains 转储文件。删除该文件夹并重新安装。 8.) 现在 select Msys2/MingW-64,而不是安装时系统中已有的上一个(正常的 MinGW)。 9.) 现在你可以去你的添加或删除程序部分,可以删除那个浪费正常的 MinGW-64,而不是 msys2(不要删除 msys2)只删除 ming64 前一个。 10.) 现在您可以运行使用那个性感的 stl 库而不会出现任何错误。
不过,如果您在执行这些步骤时遇到任何问题,请在评论中问我。 谢谢,伙计们。