【发布时间】:2021-11-05 08:08:19
【问题描述】:
我尝试将一些 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 的调用)?
【问题讨论】:
-
On_exit可以是这样的快速评论,也可以是根据细节自行回答的问题。 Windows 有一种恼人的倾向,即在 POSIX 内容前加上下划线。对于on_exit,他们有点移动它并得到了_onexit。但这仍然有点因为on_exit不是POSIX。atexit是 POSIX。但是这些功能都没有真正匹配 1:1,所以请查阅文档。 -
@user4581301 知道 MSYS2 是否可能以某种奇怪的方式提供它们吗?
-
我很确定你对 4 不走运。大多数情况下对 2 都不走运。你将不得不做很多重写。我会专门问一个关于这个的问题。 3
_flushall可能会满足您的需求。 Consult the documentation 确保。
标签: c++ posix porting mingw-w64 msys2