【问题标题】:Cygwin is better for cross-platform C++ application?Cygwin 更适合跨平台 C++ 应用程序?
【发布时间】:2020-07-08 21:21:35
【问题描述】:

我正在考虑一个跨平台的 C++ 服务器应用程序,它可能涉及大量的互联网流量和多线程密集型计算。我已经阅读了一些关于 Cygwin 和 MinGW 的跨平台 C++ 应用程序的比较。根据来自 Kaz 的 5th answer of this StackOverflow question 的新信息,我可以说 Cygwin 有更好的未来吗?

2019 年 7 月 19 日,Kaz 添加了以下新信息(从那里复制):


插件:在 LGPL 发布后不久,我启动了 Cygnal(Cygwin 本地应用程序库)项目,以提供旨在解决这些问题的 Cygwin DLL 的分支。程序可以在 Cygwin 下开发,然后用 Cygnal 版本的 cygwin1.dll 部署,无需重新编译。随着这个库的改进,它将逐渐消除对 MinGW 的需求。

当 Cygnal 解决了路径处理问题时,可以开发一个单一的可执行文件,当作为 Windows 应用程序与 Cygnal 一起发布时,它可以与 Windows 路径一起使用,并且当安装在 /usr/ 中时,它可以无缝地与 Cygwin 路径一起使用Cygwin 下的 bin。在 Cygwin 下,可执行文件将透明地使用 /cygdrive/c/Users/bob 之类的路径。在与 Cygwin1.dll 的 Cygnal 版本链接的本机部署中,该路径将毫无意义,但它会理解 c:foo.txt。


他说:随着这个库的改进,它将逐渐消除对 MinGW 的需求。这究竟意味着什么?

【问题讨论】:

    标签: c++ cygwin mingw cross-platform


    【解决方案1】:

    我不这么认为。

    首先,我不再考虑使用 MinGW,因为 MinGW-w64 是一个更好、更新的替代方案。

    其次,Cygwin 和 MinGW-w64 有不同的目标。 Cygwin 希望提供足够的 Unix/POSIX 仿真来编译难以移植到本机 Windows 的代码。所以 Cygwin 二进制文件依赖于这个仿真层,这意味着它们并不是真正的原生 Windows,因为仿真层总是存在的,这也有性能开销。 但 MinGW-w64 旨在允许编译为本机 Windows 二进制文件。缺点是并非所有 Unix/Linux/POSIX 源都可以使用它进行编译(例如,fork() 不存在),但很多东西都可以编译,它们会生成高性能的原生 Windows 二进制文件。

    就我个人而言,在过去的十年里,我根本不需要使用 Cygwin。 我现在用 MinGW-w64 构建一切。事实上,我的电脑上什至没有 MSVC 或任何其他编译器(如 Borland 或 Intel)。

    我的建议始终是:仅在必要时才使用 Cygwin。否则,MinGW-w64,尤其是与 MSYS2 结合使用始终是您的最佳选择。 如果您计划构建用于商业发行的软件,则尤其如此。如果我购买软件并注意到 Cygwin DLL 是其中的一部分,那会让我皱起眉头,想知道该软件是否真的是为 Windows 设计的。

    虽然 MSYS2 提供了一个不错的 MinGW-w64 GCC 编译器,但我决定启动 http://winlibs.com/ 项目来提供我自己的 MinGW-w64 GCC 构建,甚至是 LLVM/Clang,并且希望将来有很多库适用于这两者原生 win32 为 win64。

    关于您的问题的结论: 如果您打算构建需要资源高效的东西,我真的建议您不要承担 Cygwin 的性能开销,而是使用 MinGW-w64 来实现最大的本机性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-24
      • 2016-01-19
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      相关资源
      最近更新 更多