我想让我的c++项目跨平台,我正在考虑使用Cygwin/MinGW。 但是它们之间有什么区别呢?
另一个问题是,我是否能够在没有Cygwin/MinGW的系统上运行二进制文件?
我想让我的c++项目跨平台,我正在考虑使用Cygwin/MinGW。 但是它们之间有什么区别呢?
另一个问题是,我是否能够在没有Cygwin/MinGW的系统上运行二进制文件?
当前回答
为了补充其他答案,Cygwin附带了MinGW库和头文件,你可以在不链接到cygwin1.dll的情况下使用-mno-cygwin标志与gcc进行编译。比起使用普通的MinGW和MSYS,我更喜欢这个。
其他回答
Cygwin模拟整个POSIX环境,而MinGW是仅用于编译的最小工具集(编译本地Win应用程序)。所以,如果你想让你的项目跨平台,MinGW显然是两个选择之一。
尽管你可能会考虑在Windows上使用VS,在Linux/ unix上使用GCC。大多数开源项目都这样做(例如Firefox或Python)。
Cygwin使用一个DLL, Cygwin . DLL,(或者可能是一组DLL)在Windows上提供类似posix的运行时。
MinGW编译为本地Win32应用程序。
如果您使用Cygwin构建某个东西,那么您安装它的任何系统也将需要Cygwin DLL。MinGW应用程序不需要任何特殊的运行时。
其他答案已经击中了目标。我只是想增加一个快速捕捉的例子。
阅读这些已回答的问题,了解Cygwin和MinGW之间的区别。
问题#1:我想创建一个应用程序,我写源代码一次,编译一次,并在任何平台上运行(例如Windows, Linux和Mac OS X…)
答案#1:把源代码写进去 JAVA。编译源代码一次,然后 在任何地方运行它。
问题2:我想创建一个应用程序,我只写一次源代码,但我可以分别为任何平台编译源代码(例如Windows, Linux和Mac OS X…)
答案#2:用C语言编写源代码 或c++。使用标准头文件 只有。使用合适的编译器 平台(如Visual Studio for Windows, GCC for Linux, XCode for Mac)。注意,您不应该使用任何一种 高级编程特性 全部编译源代码 成功的平台。如果你使用 没有C或c++标准类或 函数,你的源代码没有 在其他平台编译。
问题#3:回答问题#2,在每个平台上使用不同的编译器是困难的,有跨平台的编译器吗?
答案#3:是的,使用GCC编译器。它 是一个跨平台编译器。来 在Windows中编译源代码 使用MinGW提供GCC编译器 并编译您的源代码 代码转换为本地Windows程序。不 使用任何高级编程特性 (如Windows API)来编译你的 所有平台的源代码 成功。如果你使用Windows API 函数,你的源代码没有 在其他平台编译。
问题4:C或c++标准头文件不提供任何高级编程特性,如多线程。我该怎么办?
Answer #4: You should use POSIX (Portable Operating System Interface [for UNIX]) standard. It provides many advanced programming features and tools. Many operating systems fully or partly POSIX compatible (like Mac OS X, Solaris, BSD/OS and ...). Some operating systems while not officially certified as POSIX compatible, conform in large part (like Linux, FreeBSD, OpenSolaris and ...). Cygwin provides a largely POSIX-compliant development and run-time environment for Microsoft Windows.
因此:
要在Windows下充分利用GCC跨平台编译器的优势,请使用MinGW。
要在Windows中使用POSIX标准高级编程特性和工具的优势,请使用Cygwin。
为了补充其他答案,Cygwin附带了MinGW库和头文件,你可以在不链接到cygwin1.dll的情况下使用-mno-cygwin标志与gcc进行编译。比起使用普通的MinGW和MSYS,我更喜欢这个。