使用 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) 代码无论如何都是可移植的,所以我只在几行代码中遇到了重要的问题。结果发现缺少以下符号:
on_exit()
O_SYNC
(与open()
一起使用)
sync()
std::at_quick_exit()
我对 1 并不感到惊讶,因为它不可移植。
但是 2. 和 3. 是 POSIX 符号,而 4. 是 C++11 标准库的一部分。由于 MSYS2 文档说它是 POSIX 并且与 GCC 兼容,所以我希望这些符号被定义。
为什么这些符号不见了?
有没有办法替换缺失的功能(可能使用调用 Windows API)?
我认为 MinGW 从未声称完全 POSIX 兼容性,因此缺少 O_SYNC
和 sync()
是可以预料的。
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
)。
我试图将一些 C/C++ 代码从 Linux 移植到 Windows。在 Linux 上,我正在使用 GCC-10 进行构建,在 Windows 上,我正在尝试使用 MSYS2/MINGW-64。我以前从未使用过 MSYS2,并且我在将 Linux/POSIX 代码移植到 windows.
方面经验很少大多数 (Qt) 代码无论如何都是可移植的,所以我只在几行代码中遇到了重要的问题。结果发现缺少以下符号:
on_exit()
O_SYNC
(与open()
一起使用)sync()
std::at_quick_exit()
我对 1 并不感到惊讶,因为它不可移植。
但是 2. 和 3. 是 POSIX 符号,而 4. 是 C++11 标准库的一部分。由于 MSYS2 文档说它是 POSIX 并且与 GCC 兼容,所以我希望这些符号被定义。
为什么这些符号不见了? 有没有办法替换缺失的功能(可能使用调用 Windows API)?
我认为 MinGW 从未声称完全 POSIX 兼容性,因此缺少 O_SYNC
和 sync()
是可以预料的。
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
)。