使用在cygwin上编译的linux代码在Windows中生产是没关系的吗?

时间:2017-10-04 04:41:15

标签: c cygwin

我在linux上有一个工作模块,其中一个客户端想要它在Windows上。 这里有关于类似主题的非常好的讨论(https://ask.slashdot.org/story/04/08/12/1932246/cygwin-in-a-production-environment),我想它倾向于避免使用cygwin进行制作,但是它大约有13年的讨论,可能会有问题,但在大约13年后我希望cygwin可能已经改进,成熟,有利于生产使用。

代码编译得很好,似乎在cygwin下工作正常,所以它非常诱人,而不是在Windows本机代码中重做它。 但是,如果确实存在任何无法解决的已知问题,并且人们会将其用于制作,我想知道。 代码在无等待

中大量使用pthreads,套接字

2 个答案:

答案 0 :(得分:1)

我已经很好地使用了Cygwin,并且发现它几乎没有问题。我知道一些报道的问题,但我自己没有经历过。 Cygwin上的一些东西很多比Linux上的相同代码慢 - 我注意到目录扫描最多,但这可能不是唯一的。人们抱怨fork()变慢,但这并不奇怪,因为'分叉'不是Windows中的原生概念。如果您只是使用fork()来启动子进程,那么可以想象整个fork / exec事物可以选择性地替换为对本机Windows API的调用。

Cygwin的一个潜在限制是它在运行时需要Cygwin,或者至少需要一小部分Cygwin基础设施。 MinGW可能会删除此限制,但代价是让您在代码中进行大量与兼容性相关的更改(例如,文件位置)。我最后一次看,MinGW也没有像Cygwin那样广泛的工具,但它可能已经足够用于许多目的了。

我想这几天考虑的另一种可能性是Windows 10上的Windows子系统Linux(WSL)。我发现为Cygwin构建的代码通常在WSL上没有更改的情况下构建和运行,但我还没有真正想到了解Cygwin和WSL的相对优势和劣势。

我没有注意到Cygwin,MinGW或WSL中的pthreads问题;虽然我猜任何问题都可能取决于你使用线程的确切方式。我无法评论无等待套接字问题,因为这不是我尝试过的。

顺便提一下,如果需要,Cygwin和MinGW都允许您调用本机Windows API和DLL中的其他功能。因此,存在创建一种使用POSIX类型函数和Win32 API的“混合”应用程序的可能性。如果事实证明使用Win32功能有些事情要快得多,这可能会有用。我不确定WSL是否可行。

答案 1 :(得分:1)

我应该说我对耗时更新的评论同样指的是在运行wsl之前需要执行完整的Windows更新以及apt-get更新 脚本将超过午夜。每4小时左右运行一个单独的内存恢复脚本是一个部分解决方案。我只有“6GB内存”。