使用 MSYS2/MINGW-64 缺少 POSIX 和标准符号

Missing POSIX and std symbols using MSYS2/MINGW-64

我试图将一些 C/C++ 代码从 Linux 移植到 Windows。在 Linux 上,我正在使用 GCC-10 进行构建,在 Windows 上,我正在尝试使用 MSYS2/MINGW-64。我以前从未使用过 MSYS2,并且我在将 Linux/POSIX 代码移植到 windows.

方面经验很少

大多数 (Qt) 代码无论如何都是可移植的,所以我只在几行代码中遇到了重要的问题。结果发现缺少以下符号:

  1. on_exit()
  2. O_SYNC(与open()一起使用)
  3. sync()
  4. std::at_quick_exit()

我对 1 并不感到惊讶,因为它不可移植。

但是 2. 和 3. 是 POSIX 符号,而 4. 是 C++11 标准库的一部分。由于 MSYS2 文档说它是 POSIX 并且与 GCC 兼容,所以我希望这些符号被定义。

为什么这些符号不见了? 有没有办法替换缺失的功能(可能使用调用 Windows API)?

我认为 MinGW 从未声称完全 POSIX 兼容性,因此缺少 O_SYNCsync() 是可以预料的。

on_exit 有一个标准选项 std::atexit.

根据 this question, at_quick_exit (and quick_exit itself) aren't provided by msvcrt.dll (the old Microsoft C runtime that MINGW64 uses). You can switch to the UCRT64 MSYS2 environment 下的评论判断,它使用了具有这些功能的更现代的 C 运行时 (ucrtbase.dll)。