c++ - 使用 MSYS2/MINGW-64 缺少 POSIX 和 std 符号
问题描述
我试图将一些 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
。
从这个问题下的评论来看,at_quick_exit
(以及quick_exit
它本身)不是由msvcrt.dll
(MINGW64 使用的旧 Microsoft C 运行时)提供的。您可以切换到UCRT64 MSYS2 环境ucrtbase.dll
,它使用具有这些功能的更现代的 C 运行时 ( )。
推荐阅读
- python - 如何根据第一次出现从 DataFrame 中检索行
- vim - vim 颜色方案不在 Windows 命令行中呈现
- javascript - TypeError:无法读取未定义 React.js 的属性“用户名”
- http - [HTTP]为什么分号参数不再常用?
- window-functions - 在 Presto 中进行基于范围的交叉连接的最佳方法是什么?
- linux - Linux alsa:更改 alsa 输出中左/右声道的音量
- python - 测试单元素列表以避免 IndexErrors 的 Pythonic 方法
- python - 将浮点数列表转换为逗号分隔的字符串 | Python
- javascript - 在 vue 中设置整个 data() 对象以填充表单
- regex - 在 RegEx 中捕获字符串部分