我想让我的c++项目跨平台,我正在考虑使用Cygwin/MinGW。 但是它们之间有什么区别呢?
另一个问题是,我是否能够在没有Cygwin/MinGW的系统上运行二进制文件?
我想让我的c++项目跨平台,我正在考虑使用Cygwin/MinGW。 但是它们之间有什么区别呢?
另一个问题是,我是否能够在没有Cygwin/MinGW的系统上运行二进制文件?
当前回答
Cygwin是Microsoft Windows的类unix环境和命令行界面。
Mingw是GNU Compiler Collection (GCC)到Microsoft Windows的原生软件移植,以及一组用于Windows API的可自由分发的导入库和头文件。MinGW允许开发人员创建本地Microsoft Windows应用程序。
您可以在没有cygwin环境的情况下运行用mingw生成的二进制文件,前提是提供了所有必要的库(dll)。
其他回答
请注意,两者之间的效用行为确实不同。
例如,Cygwin tar可以fork -,因为DLL中支持fork(),而mingw版本则不支持。当试图从源代码编译mysql时,这是一个问题。
Cygwin模拟整个POSIX环境,而MinGW是仅用于编译的最小工具集(编译本地Win应用程序)。所以,如果你想让你的项目跨平台,MinGW显然是两个选择之一。
尽管你可能会考虑在Windows上使用VS,在Linux/ unix上使用GCC。大多数开源项目都这样做(例如Firefox或Python)。
MinGW (or MinGW-w64) Cygwin
-------------------- ------
Your program written Your program written
for Unix and GNU/Linux for Unix and GNU/Linux
| |
| |
V V
Heavy modifications Almost no modifications
| |
| |
V V
Compilation Compilation
Program compiled with Cygwin ---> Compatibility layer ---> Windows API
Program compiled with MinGW (or MingGW-w64) -------------> Windows API
为了补充其他答案,Cygwin附带了MinGW库和头文件,你可以在不链接到cygwin1.dll的情况下使用-mno-cygwin标志与gcc进行编译。比起使用普通的MinGW和MSYS,我更喜欢这个。
Cygwin使用一个DLL, Cygwin . DLL,(或者可能是一组DLL)在Windows上提供类似posix的运行时。
MinGW编译为本地Win32应用程序。
如果您使用Cygwin构建某个东西,那么您安装它的任何系统也将需要Cygwin DLL。MinGW应用程序不需要任何特殊的运行时。