何时使用Cygwin或MinGW编译C代码?

sim*_*mon 7 c windows cygwin mingw

我想知道在什么情况下使用Cygwin编译C代码以及何时会选择MinGW.我找到了Cygwin和MinGW有什么区别?描述Cygwin和MinGW之间的差异.

据我了解,可以说以下内容:

  • Cygwin:允许编译符合POSIX标准的操作系统的C源代码在Windows上运行(需要cygwin1.dll).例如,我可以使用适用于Windows的pthreads API编译应用程序,尽管Windows本身并未实现API.
  • MinGW:允许编译符合Windows的C源代码.因此,使用上面的示例,我在MinGW中使用gcc进行编译时无法使用pthreads API,但是需要使用Windows提供的线程API.我也可以使用不同的编译器,例如VC++附带的编译器,而不是使用MinGW gcc编译器.

但是,我的理解似乎是错误的,因为我能够使用MinGW编译包含pthread.h的虚拟程序.我错误地理解了什么?

Chr*_*oph 4

你的理解基本上是正确的。然而,有一个 win32 pthreads 端口,它是本机线程 API 的一个薄包装器。

一个更合适的例子是fork(),它不能在 win32 上轻易模拟。为此,Cygwin 强制执行固定的 DLL 内存布局,如果无法将库加载到它应该去的地方(提示rebaseall),事情就会爆炸。