代码之家  ›  专栏  ›  技术社区  ›  Pras

在windows中使用在cygwin上编译的linux代码进行生产可以吗?

  •  0
  • Pras  · 技术社区  · 8 年前

    我在linux上有一个工作模块,其中一个客户希望它在windows上运行。 这里对类似的话题进行了很好的讨论( https://ask.slashdot.org/story/04/08/12/1932246/cygwin-in-a-production-environment ),我想它倾向于避免在制作中使用cygwin,但它大约有13年的历史了,可能有一些问题,但在大约13年的时间里,我希望cygwin可能已经改进、成熟,并适合生产使用。

    代码编译得很好,在cygwin下似乎可以正常工作,因此很容易将其向前推进,而不是在windows本机代码中重做。 但是,如果真的有任何无法解决的已知问题,人们正在避免它的生产,我想知道。

    2 回复  |  直到 8 年前
        1
  •  1
  •   Kevin Boone    8 年前

    我用过Cygwin一段时间,发现它基本上没有问题。我知道一些报告中的问题,但我自己没有经历过。关于Cygwin的一些事情是 比Linux上的相同代码慢——我在目录扫描中注意到的最多,但这可能不是唯一的事情。人们抱怨 fork() 速度很慢,但这并不奇怪,因为“分叉”在Windows中并不是一个固有的概念。如果你只是在使用 分叉() 为了启动子进程,可以有选择地将整个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中是否可行。

        2
  •  1
  •   tim18    8 年前

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