Câu trả lời:
Để đơn giản hóa, nó như thế này:
Biên dịch một cái gì đó trong Cygwin và bạn đang biên dịch nó cho Cygwin .
Biên dịch một cái gì đó trong MinGW và bạn đang biên dịch nó cho Windows .
Về Cygwin
Mục đích của Cygwin là làm cho việc chuyển các ứng dụng dựa trên Unix sang Windows dễ dàng hơn nhiều, bằng cách mô phỏng nhiều chi tiết nhỏ mà các hệ điều hành dựa trên Unix cung cấp và được ghi lại theo tiêu chuẩn POSIX . Ứng dụng của bạn có thể sử dụng tính năng Unix như ống dẫn, truy cập tệp và thư mục kiểu Unix, v.v. và nó có thể được biên dịch với Cygwin, nó sẽ hoạt động như một lớp tương thích xung quanh ứng dụng của bạn, để nhiều mô hình cụ thể của Unix có thể tiếp tục được sử dụng
Khi bạn phân phối phần mềm của mình, người nhận sẽ cần chạy phần mềm cùng với môi trường thời gian chạy Cygwin (được cung cấp bởi tệp cygwin1.dll
). Bạn có thể phân phối phần mềm này với phần mềm của bạn, nhưng phần mềm của bạn sẽ phải tuân thủ giấy phép nguồn mở. Thậm chí có thể là trường hợp thậm chí chỉ liên kết phần mềm của bạn với nó, nhưng phân phối dll riêng biệt, vẫn có thể yêu cầu bạn tôn trọng giấy phép nguồn mở.
Giới thiệu về MinGW
MinGW nhằm mục đích đơn giản là một cổng Windows của các công cụ biên dịch GNU, như GCC, Make, Bash, v.v. Nó không cố gắng mô phỏng hoặc cung cấp khả năng tương thích toàn diện với Unix, nhưng thay vào đó, nó cung cấp môi trường cần thiết tối thiểu để sử dụng GCC (trình biên dịch GNU) và một số lượng nhỏ các công cụ khác trên Windows. Nó không có lớp mô phỏng Unix như Cygwin, nhưng kết quả là ứng dụng của bạn cần được lập trình cụ thể để có thể chạy trong Windows, điều này có thể có nghĩa là thay đổi đáng kể nếu nó được tạo ra để chạy trong môi trường Unix tiêu chuẩn và sử dụng các tính năng dành riêng cho Unix như các tính năng được đề cập trước đó. Theo mặc định, mã được biên dịch trong GCC của MinGW sẽ biên dịch sang mục tiêu Windows X86 riêng, bao gồm các tệp .exe và. Tuy nhiên, bạn cũng có thể biên dịch chéo với các cài đặt phù hợp, vì về cơ bản bạn đang sử dụng bộ công cụ biên dịch GNU.
MinGW về cơ bản là một sự thay thế cho trình biên dịch Microsoft Visual C ++ và các công cụ liên kết / tạo liên kết của nó. Trong một số trường hợp, có thể sử dụng MinGW để biên dịch thứ gì đó được dùng để biên dịch với Microsoft Visual C ++, với các thư viện phù hợp và trong một số trường hợp có sửa đổi khác.
MinGW bao gồm một số thư viện tiêu chuẩn cơ bản để tương tác với hệ điều hành Windows, nhưng với các thư viện tiêu chuẩn thông thường có trong bộ sưu tập trình biên dịch GNU, những điều này không áp đặt các hạn chế cấp phép đối với phần mềm bạn đã tạo.
Đối với các ứng dụng phần mềm không tầm thường, làm cho chúng trở thành đa nền tảng có thể là một thách thức đáng kể trừ khi bạn sử dụng khung đa nền tảng toàn diện. Vào thời điểm tôi viết bài này, khung Qt là một trong những khung phổ biến nhất cho mục đích này, cho phép xây dựng các ứng dụng đồ họa hoạt động trên các hệ điều hành bao gồm Windows, nhưng cũng có các tùy chọn khác. Nếu bạn sử dụng một khung như vậy ngay từ đầu, bạn không chỉ giảm đau đầu khi đến lúc chuyển sang nền tảng khác mà còn có thể sử dụng cùng các tiện ích đồ họa - cửa sổ, menu và điều khiển - trên tất cả các nền tảng nếu bạn đang viết Ứng dụng GUI và có chúng xuất hiện tự nhiên cho người dùng.
Cygwin là một nỗ lực để tạo ra một môi trường UNIX / POSIX hoàn chỉnh trên Windows. Để làm điều này, nó sử dụng các DLL khác nhau. Mặc dù các DLL này được bao phủ bởi GPLv3 +, giấy phép của chúng chứa một ngoại lệ không bắt buộc một tác phẩm phái sinh phải được bảo vệ bởi GPLv3 +. MinGW là bộ trình biên dịch C / C ++, cho phép bạn tạo các tệp thực thi Windows mà không phụ thuộc vào các DLL đó - bạn chỉ cần các thời gian chạy MSVC bình thường, là một phần của bất kỳ cài đặt Microsoft Windows thông thường nào.
Bạn cũng có thể có được một môi trường UNIX / POSIX nhỏ, được biên dịch với MinGW được gọi là MSYS . Nó không có bất cứ nơi nào gần tất cả các tính năng của Cygwin, nhưng lý tưởng cho các lập trình viên muốn sử dụng MinGW.
Để thêm vào các câu trả lời khác, Cygwin đi kèm với các thư viện và tiêu đề MinGW và bạn có thể biên dịch mà không cần liên kết với cygwin1.dll bằng cách sử dụng cờ -mno-cygwin với gcc. Tôi rất thích điều này để sử dụng MinGW và MSYS đơn giản.
gcc-3 -mno-cygwin
mingw64-x86_64-gcc-core
gói Cygwin. MinGW-64 sau đó sẽ có sẵn dưới dạng x86_64-w64-mingw32-gcc
lệnh được đặt tên vụng về . Xin Chúa, ai đó thống nhất tên của những thứ đẫm máu này.
Wikipedia có một so sánh ở đây .
Từ trang web của Cygwin :
- Cygwin là một môi trường giống như Linux cho Windows. Nó bao gồm hai phần: Một DLL (cygwin1.dll) hoạt động như một lớp mô phỏng API Linux cung cấp chức năng API Linux đáng kể.
- Một bộ sưu tập các công cụ cung cấp giao diện Linux.
Từ trang web của Mingw :
MinGW ("GNU tối giản cho Windows") là một tập hợp các tệp tiêu đề và thư viện nhập cụ thể của Windows có thể phân phối miễn phí và kết hợp với các bộ công cụ GNU cho phép một người tạo các chương trình Windows gốc không dựa vào bất kỳ DLL thời gian chạy C của bên thứ 3 nào
Cygwin sử dụng một DLL, cygwin.dll, (hoặc có thể là một tập hợp các DLL) để cung cấp thời gian chạy giống như POSIX trên Windows.
MinGW biên dịch thành ứng dụng Win32 gốc.
Nếu bạn xây dựng một cái gì đó với Cygwin, bất kỳ hệ thống nào bạn cài đặt nó cũng sẽ cần (các) DLL Cygwin. Một ứng dụng MinGW không cần bất kỳ thời gian chạy đặc biệt nào.
Đọc những câu hỏi được trả lời này để hiểu sự khác biệt giữa Cygwin và MinGW.
Câu hỏi số 1: Tôi muốn tạo một ứng dụng mà tôi viết mã nguồn một lần, biên dịch nó một lần và chạy nó trong bất kỳ nền tảng nào (ví dụ: Windows, Linux và Mac OS X mộc).
Câu trả lời số 1: Viết mã nguồn của bạn trong JAVA. Biên dịch mã nguồn một lần và chạy nó ở bất cứ đâu.
Câu hỏi số 2: Tôi muốn tạo một ứng dụng mà tôi viết mã nguồn một lần nhưng không có vấn đề gì khi tôi biên dịch mã nguồn cho bất kỳ nền tảng nào một cách riêng biệt (ví dụ: Windows, Linux và Mac OS X,).
Câu trả lời số 2: Viết mã nguồn của bạn bằng C hoặc C ++. Chỉ sử dụng tệp tiêu đề. Sử dụng trình biên dịch phù hợp cho mọi nền tảng (ví dụ Visual Studio cho Windows, GCC cho Linux và XCode cho Mac). Lưu ý rằng bạn không nên sử dụng bất kỳ tính năng lập trình nâng cao nào để biên dịch mã nguồn của mình trong tất cả các nền tảng thành công. Nếu bạn không sử dụng các lớp hoặc hàm tiêu chuẩn C hoặc C ++, mã nguồn của bạn sẽ không biên dịch trong các nền tảng khác.
Câu hỏi số 3: Trong câu trả lời của câu hỏi số 2, rất khó sử dụng trình biên dịch khác nhau cho mỗi nền tảng, có trình biên dịch đa nền tảng nào không?
Trả lời # 3: Có, Sử dụng trình biên dịch GCC. Nó là một trình biên dịch đa nền tảng. Để biên dịch mã nguồn của bạn trong Windows, hãy sử dụng MinGW cung cấp trình biên dịch GCC cho Windows và biên dịch mã nguồn của bạn sang chương trình Windows gốc. Không sử dụng bất kỳ tính năng lập trình nâng cao nào (như API Windows) để biên dịch mã nguồn của bạn trong tất cả các nền tảng thành công. Nếu bạn sử dụng các hàm Windows API, mã nguồn của bạn sẽ không biên dịch trong các nền tảng khác.
Câu hỏi số 4: Các tệp tiêu đề chuẩn C hoặc C ++ không cung cấp bất kỳ tính năng lập trình nâng cao nào như đa luồng. Tôi có thể làm gì?
Trả lời # 4: Bạn nên sử dụng tiêu chuẩn POSIX (Giao diện hệ điều hành di động [cho UNIX]). Nó cung cấp nhiều tính năng và công cụ lập trình tiên tiến. Nhiều hệ điều hành tương thích hoàn toàn hoặc một phần POSIX (như Mac OS X, Solaris, BSD / OS và ...). Một số hệ điều hành trong khi không được chứng nhận chính thức là tương thích POSIX, phù hợp với phần lớn (như Linux, FreeBSD, OpenSolaris và ...). Cygwin cung cấp môi trường thời gian chạy và thời gian chạy phần lớn tuân thủ POSIX cho Microsoft Windows.
Như vậy:
Từ quan điểm chuyển một chương trình C, một cách tốt để hiểu điều này là lấy một ví dụ:
#include <sys/stat.h>
#include <stdlib.h>
int main(void)
{
struct stat stbuf;
stat("c:foo.txt", &stbuf);
system("command");
printf("Hello, World\n");
return 0;
}
Nếu chúng tôi thay đổi stat
thành _stat
, chúng tôi có thể biên dịch chương trình này với Microsoft Visual C. Chúng tôi cũng có thể biên dịch chương trình này với MinGW và với Cygwin.
Trong Microsoft Visual C, chương trình sẽ được liên kết với thư viện thời gian chạy phân phối lại MSVC : mxvcrtnn.dll
, trong đó nn
có một số hậu tố phiên bản. Để gửi chương trình này, chúng tôi sẽ phải bao gồm DLL đó. DLL đó cung cấp _stat
, system
và printf
. (Chúng tôi cũng có tùy chọn liên kết tĩnh thời gian chạy.)
Theo MinGW, chương trình sẽ được liên kết đến msvcrt.dll
, đây là một thư viện nội bộ, không có giấy tờ, không bị đảo ngược, là một phần của Windows và không giới hạn sử dụng ứng dụng. Thư viện đó thực chất là một nhánh của thư viện thời gian chạy có thể phân phối lại từ MS Visual C để sử dụng cho chính Windows.
Theo cả hai điều này, chương trình sẽ có những hành vi tương tự nhau:
stat
chức năng sẽ trả về thông tin rất hạn chế, không có quyền hoặc số inode hữu ích.c:file.txt
được giải quyết theo thư mục làm việc hiện tại được liên kết với ổ đĩa c:
.system
sử dụng cmd.exe /c
để chạy lệnh bên ngoài.Chúng tôi cũng có thể biên dịch chương trình theo Cygwin. Tương tự như thời gian chạy có thể phân phối lại được sử dụng bởi MS Visual C, chương trình Cygwin sẽ được liên kết với các thư viện thời gian chạy của Cygwin: cygwin1.dll
(Cygwin thích hợp) và cyggcc_s-1.dll
(hỗ trợ thời gian chạy GCC). Vì Cygwin hiện thuộc LGPL, chúng tôi có thể đóng gói với chương trình của chúng tôi, ngay cả khi đó không phải là phần mềm miễn phí tương thích GPL và gửi chương trình.
Theo Cygwin, các chức năng thư viện sẽ hoạt động khác nhau:
stat
chức năng có chức năng phong phú, trở về giá trị có ý nghĩa trong hầu hết các lĩnh vực.c:file.txt
không được hiểu là chứa tham chiếu ký tự ổ đĩa, vì c:
không được theo sau bởi dấu gạch chéo. Dấu hai chấm được coi là một phần của tên và bằng cách nào đó đọc vào nó. Không có khái niệm về một đường dẫn tương đối so với ổ đĩa hoặc ổ đĩa trong Cygwin, không có khái niệm "ổ đĩa hiện tại được ghi lại" và không có thư mục làm việc hiện tại trên mỗi ổ đĩa.system
chức năng cố gắng sử dụng các /bin/sh -c
thông dịch viên. Cygwin sẽ giải quyết /
đường dẫn theo vị trí thực thi của bạn và mong muốn một sh.exe
chương trình được đặt cùng với tệp thực thi của bạn.Cả Cygwin và MinGW đều cho phép bạn sử dụng các chức năng Win32. Nếu bạn muốn gọi MessageBox
hoặc CreateProcess
, bạn có thể làm điều đó. Bạn cũng có thể dễ dàng xây dựng một chương trình không yêu cầu cửa sổ giao diện điều khiển, sử dụng gcc -mwindows
, dưới MinGW và Cygwin.
Cygwin không hoàn toàn POSIX. Ngoài việc cung cấp quyền truy cập vào API Windows, nó cũng cung cấp các triển khai riêng của một số chức năng Microsoft C (nội dung được tìm thấy trong msvcrt.dll
hoặc msvcrtnn.dll
thời gian chạy lại có thể phân phối lại ). Một ví dụ về điều này là spawn*
gia đình của các chức năng như thế nào spawnvp
. Đây là một ý tưởng tốt để sử dụng thay vì fork
và exec
trên Cygwin vì chúng ánh xạ tốt hơn đến mô hình tạo quy trình Windows không có khái niệm fork
.
Như vậy:
Các chương trình Cygwin không kém "bản địa" so với các chương trình MS Visual C với lý do yêu cầu đệm thư viện. Việc triển khai ngôn ngữ lập trình trên Windows dự kiến sẽ cung cấp thời gian thực hiện, thậm chí là triển khai ngôn ngữ C. Không có "libc" trên Windows để sử dụng công cộng.
Việc MinGW không yêu cầu DLL của bên thứ ba thực sự là một bất lợi; nó phụ thuộc vào một ngã ba nội bộ Windows không có giấy tờ của thời gian chạy Visual C. MinGW thực hiện điều này bởi vì ngoại lệ thư viện hệ thống GPL áp dụng msvcrt.dll
, điều đó có nghĩa là các chương trình GPL có thể được biên dịch và phân phối lại với MinGW.
Do sự hỗ trợ rộng rãi và sâu sắc hơn nhiều cho POSIX so với msvcrt.dll
, Cygwin cho đến nay là môi trường ưu việt để chuyển các chương trình POSIX. Vì hiện tại thuộc LGPL, nó cho phép các ứng dụng với tất cả các loại giấy phép, nguồn mở hoặc đóng, được phân phối lại. Cygwin thậm chí còn có phần mô phỏng VT100 và termios
, hoạt động với bảng điều khiển của Microsoft! Ứng dụng POSIX thiết lập chế độ thô với tcsetattr
và sử dụng mã VT100 để điều khiển con trỏ sẽ hoạt động ngay trong cmd.exe
cửa sổ. Đối với người dùng cuối, đây là một ứng dụng bảng điều khiển gốc thực hiện các cuộc gọi Win32 để điều khiển bảng điều khiển.
Tuy nhiên:
/bin/sh
và các vấn đề khác. Những khác biệt này là những gì làm cho các chương trình Cygwin "không bản địa". Nếu một chương trình lấy một đường dẫn làm đối số hoặc nhập từ hộp thoại, người dùng Windows mong muốn đường dẫn đó hoạt động giống như trong các chương trình Windows khác. Nếu nó không hoạt động theo cách đó, đó là một vấn đề.Plug: Ngay sau thông báo LGPL, tôi đã bắt đầu dự án Cygnal (Thư viện ứng dụng gốc Cygwin) để cung cấp một nhánh của DLL Cygwin nhằm khắc phục các vấn đề này. Các chương trình có thể được phát triển theo Cygwin, và sau đó được triển khai với phiên bản Cygnal cygwin1.dll
mà không cần biên dịch lại. Khi thư viện này được cải thiện, nó sẽ dần dần loại bỏ nhu cầu về MinGW.
Khi Cygnal giải quyết vấn đề xử lý đường dẫn, có thể phát triển một tệp thực thi duy nhất hoạt động với các đường dẫn Windows khi được vận chuyển dưới dạng một ứng dụng Windows với Cygnal và hoạt động liền mạch với các đường dẫn Cygwin khi được cài đặt trong /usr/bin
Cygwin của bạn . Theo Cygwin, tệp thực thi sẽ hoạt động trong suốt với một đường dẫn như thế nào /cygdrive/c/Users/bob
. Trong triển khai gốc nơi liên kết với phiên bản Cygnal cygwin1.dll
, đường dẫn đó sẽ không có ý nghĩa, trong khi nó sẽ hiểu c:foo.txt
.
MinGW
rẽ nhánh từ phiên bản 1.3.3 củaCygwin
. Mặc dù cả haiCygwin
vàMinGW
có thể được sử dụng để cổngUNIX
phần mềm đểWindows
, họ có cách tiếp cận khác nhau:Cygwin
mục đích để cung cấp hoàn toànPOSIX layer
cung cấp độ giả lập của một số cuộc gọi hệ thống và thư viện mà tồn tại trênLinux
,UNIX
và cácBSD
biến thể. ViệcPOSIX layer
chạy trên đầu trangWindows
, hy sinh hiệu suất khi cần thiết để tương thích. Theo đó, cách tiếp cận này yêu cầuWindows
các chương trình được viếtCygwin
để chạy trên đầu thư viện tương thích sao chép phải được phân phối cùng với chương trình, cùng với chương trìnhsource code
.MinGW
nhằm mục đích cung cấp chức năng và hiệu suất bản địa thông qua trực tiếpWindows API calls
. Không giống nhưCygwin
,MinGW
không yêu cầu lớp tương thíchDLL
và do đó các chương trình không cần phải được phân phốisource code
.Bởi vì
MinGW
phụ thuộc vàoWindows API calls
, nó không thể cung cấp đầy đủPOSIX API
; nó không thể biên dịch một sốUNIX applications
có thể được biên dịch vớiCygwin
. Cụ thể, điều này áp dụng cho các ứng dụng đòi hỏi phải cóPOSIX
chức năng nhưfork()
,mmap()
hayioctl()
và những người mong đợi để được chạy trong mộtPOSIX environment
. Ứng dụng được viết bằng cách sử dụngcross-platform library
mà đã tự được chuyển đếnMinGW
, chẳng hạn nhưSDL
,wxWidgets
,Qt
, hayGTK+
, thường sẽ biên dịch một cách dễ dàng trongMinGW
khi họ sẽ ởCygwin
.Sự kết hợp
MinGW
vàMSYS
cung cấp một môi trường nhỏ, khép kín có thể được tải lên phương tiện lưu động mà không để lại các mục trong sổ đăng ký hoặc tệp trên máy tính.Cygwin
Portable cung cấp một tính năng tương tự. Bằng cách cung cấp nhiều chức năng hơn,Cygwin
trở nên phức tạp hơn để cài đặt và bảo trì.Nó cũng có thể
cross-compile Windows applications
vớiMinGW-GCC under POSIX systems
. Điều này có nghĩa là các nhà phát triển không cần cài đặt WindowsMSYS
để biên dịch phần mềm sẽ chạyWindows
mà không cầnCygwin
.
Đừng bỏ qua phần mềm U / Win của AT & T , được thiết kế để giúp bạn biên dịch các ứng dụng Unix trên windows (phiên bản mới nhất - 2012-08-06; sử dụng Giấy phép công cộng Eclipse, Phiên bản 1.0).
Giống như Cygwin, họ phải chạy đua với một thư viện; trong trường hợp của họ POSIX.DLL
. Các anh chàng AT & T là những kỹ sư tuyệt vời (cùng nhóm đã mang đến cho bạn ksh và dot ) và nội dung của họ rất đáng để kiểm tra.
Cygwin mô phỏng toàn bộ môi trường POSIX, trong khi MinGW là công cụ tối thiểu được thiết lập chỉ để biên dịch (biên dịch ứng dụng Win gốc.) Vì vậy, nếu bạn muốn làm cho dự án của mình đa nền tảng, sự lựa chọn giữa hai là rõ ràng, MinGW.
Mặc dù bạn có thể cân nhắc sử dụng VS trên Windows, GCC trên Linux / Unices. Hầu hết các dự án nguồn mở làm điều đó (ví dụ Firefox hoặc Python).
clang
là một giải pháp đa nền tảng khả thi.
Lưu ý rằng hành vi tiện ích thực sự có thể khác nhau giữa hai.
Ví dụ, Cygwin tar có thể rẽ nhánh - vì fork () được hỗ trợ trong DLL - nơi phiên bản mingw không thể. Đây là một vấn đề khi cố gắng biên dịch mysql từ nguồn.
Để sử dụng Cygwin trong một ứng dụng thương mại / độc quyền / không phải nguồn mở, bạn sẽ cần bỏ ra hàng chục ngàn đô la để " mua giấy phép " từ Red Hat; điều này làm mất hiệu lực các điều khoản cấp phép tiêu chuẩn với chi phí đáng kể. Google "chi phí giấy phép cygwin" và xem một vài kết quả đầu tiên.
Đối với mingw, không có chi phí nào phát sinh và các giấy phép (PD, BSD, MIT) cực kỳ dễ dãi. Nhiều nhất bạn có thể phải cung cấp chi tiết giấy phép với ứng dụng của mình, chẳng hạn như giấy phép winpthreads cần có khi sử dụng mingw64-tdm.
EDIT nhờ vào Izzy Helianthus: Giấy phép thương mại không còn có sẵn hoặc cần thiết vì thư viện API được tìm thấy trong thư mục con chiến thắng của Cygwin hiện đang được phân phối theo LGPL, trái ngược với GPL đầy đủ.
Cygwin được thiết kế để cung cấp một môi trường POSIX hoàn chỉnh ít nhiều cho Windows, bao gồm một bộ công cụ mở rộng được thiết kế để cung cấp một nền tảng giống như Linux đầy đủ. Trong khi đó, MinGW và MSYS cung cấp một trọng lượng nhẹ, nhỏ gọn POSIX giống như lớp, chỉ với những công cụ cần thiết giống như gcc
và bash
có sẵn. Do cách tiếp cận tối giản hơn của MinGW, nó không cung cấp mức độ bao phủ API POSIX mà Cygwin cung cấp và do đó không thể xây dựng một số chương trình nhất định có thể được biên dịch trên Cygwin.
Về mặt mã do hai người tạo ra, chuỗi công cụ Cygwin dựa vào liên kết động với thư viện thời gian chạy lớn cygwin1.dll
, trong khi chuỗi công cụ MinGW biên dịch mã thành các nhị phân liên kết động với thư viện C gốc của Windows msvcrt.dll
cũng như tĩnh với các phần của glibc
. Do đó, các tệp thực thi của Cygwin nhỏ gọn hơn nhưng yêu cầu một DLL phân phối lại riêng biệt, trong khi các nhị phân MinGW có thể được vận chuyển độc lập nhưng có xu hướng lớn hơn.
Việc các chương trình dựa trên Cygwin yêu cầu một DLL riêng để chạy cũng dẫn đến các hạn chế cấp phép. Thư viện thời gian chạy Cygwin được cấp phép theo GPLv3 với ngoại lệ liên kết cho các ứng dụng có giấy phép tuân thủ OSI, vì vậy các nhà phát triển muốn xây dựng một ứng dụng nguồn đóng xung quanh Cygwin phải có giấy phép thương mại từ Red Hat. Mặt khác, mã MinGW có thể được sử dụng trong cả ứng dụng nguồn mở và nguồn đóng, vì các tiêu đề và thư viện được cấp phép cho phép.
Cygwin là một môi trường và giao diện dòng lệnh giống như Unix cho Microsoft Windows.
Mingw là một cổng phần mềm riêng của Bộ sưu tập Trình biên dịch GNU (GCC) cho Microsoft Windows, cùng với một bộ thư viện nhập và các tệp tiêu đề có thể phân phối tự do cho API Windows. MinGW cho phép các nhà phát triển tạo các ứng dụng Microsoft Windows gốc.
Bạn có thể chạy các tệp nhị phân được tạo mingw
mà không có cygwin
môi trường, miễn là tất cả các thư viện cần thiết (DLL) đều có mặt.
Cygwin
sử dụng một lớp tương thích, trong khi MinGW
là bản địa. Đó là một trong những khác biệt chính.