MinGW 可以毫不费力地复制大多数 unix 系统调用吗?

Posted

技术标签:

【中文标题】MinGW 可以毫不费力地复制大多数 unix 系统调用吗?【英文标题】:Can MinGW replicate most unix system calls with no effort? 【发布时间】:2016-08-09 02:47:45 【问题描述】:

背景:我正在移植一个专门为 unix 系统使用 C++ 开发的大型项目,以便与 Windows 兼容,从而为最终的 Windows 发行版让路。我在 Windows 开发方面没有太多经验,但我想在高级开发人员进入并接手之前完成我能做的一切,把事情做好。

问题:有一段时间,我一直在查找软件中使用的所有 unix/posix 调用的 Windows 版本,大多数来自 dirent.h、unistd.h,还有一些在 sys 下,例如sys/stat.h 或 sys/types.h。尽管修改程序以采用新的 Win32 API 调用约定和返回类型(有时是所有新函数)需要大量工作,但它最终可能会起作用。

但我经常看到这种情况出现,我猜,MinGW 包含许多本机 unix 调用和功能作为 GCC 环境的一部分,并且可以将它们转换为与 Windows 兼容的调用,因此您可以在Windows,并在 Windows 上轻松使用所述编译程序。事实上,我在侧边栏中看到的一个类似问题就是关于这一点的。我不明白并且似乎难以理解的是这个内置翻译功能的范围,以及我可以在哪里找到可以使用它的系统内容列表。

抱歉,这篇文章有点不规范,我对此很陌生,但在我与高级开发人员交换之前,我只有 2 周的时间来尝试完成一些事情。

【问题讨论】:

我不认为你可以依赖新的 Windows 10 Linux 子系统? :-) 鉴于此市场通常是研究实验室,如果他们都拥有 Windows 7,我会认为这是幸运的。 【参考方案1】:

没有。 MinGW 不会尝试在 Windows 上实现 UNIX 功能。它无法轻松复制大多数系统调用。

但是,Cygwin 确实做到了。

【讨论】:

但是请注意,Cygwin 是一种创可贴和胶带解决方案。它在大多数情况下都有效,但并不优雅。 (它也与disturbingly long list of third-party applications 不兼容。) @HarryJohnston 那是因为没有优雅的方法可以在 Win32 下复制 Unix。 (WSL不在Win32下) 是的,但似乎 OP 可以选择实际移植代码。我只是想确保他们意识到看似更简单的解决方案的缺点。 (虚拟化可以让 IMO 采用更好的方法。但是 Cygwin 出于历史原因当然不会使用这种方法,而且我不确定对全新解决方案的需求是否足够。)跨度> 这是用于出售给人们的代码,因此不易出错的解决方案优先于易于移植。这也是完全公司拥有的代码,所以我可以对源代码进行任何更改。无论如何,人们会建议坚持我正在做的事情并“手动”手动移植呼叫吗?另外,当人们说 MinGW 可以移植诸如 dirent.h 组系统调用或 _S_ISDIR 宏之类的东西时,他们在谈论什么?

以上是关于MinGW 可以毫不费力地复制大多数 unix 系统调用吗?的主要内容,如果未能解决你的问题,请参考以下文章

[cross compile]cygwin和mingw

MinGW GCC.exe 从路径中删除所有 \

使用 MinGW 64 位在非 unix 系统上安装 FFTW 库

Unix和Linux操作系统有什么区别?

是否有将 AppEngine 应用程序移植到非 Google 基础架构的兼容层? [复制]

mingw能在linux上运行么