Próbowałem zrozumieć, czym dokładnie są Cygwin i MinGW, i uznają to za bardzo zagmatwane. Jeśli chcesz programować w C++, czy nie potrzebujesz tylko kompilatora C++? Z tego co przeczytałem wydaje się, że starają się zapewnić system operacyjny typu Unix w systemie Windows, ale nie widzę znaczenia tego. Chodzi mi o to jest jakiś powód, że C++ nie może natywnie być skompilowany w systemie Windows? Czytałem również, że zawierają biblioteki, czy to dlatego, że język rdzeniowy C++ nie obsługuje wielu funkcji, więc pojawiają się w nim bardzo popularne biblioteki, takie jak math.h
?Dlaczego potrzebne są Cygwin i MinGW?
Odpowiedz
To wyjaśnienie jest zobowiązany być już zapisane w innym miejscu, ale tu idzie tak ...
Cygwin jest kompatybilny Runtime POSIX zbudowany na Win32 API. Zapewnia w dużej mierze zgodną bibliotekę POSIX C, a dookoła tego jest coś w rodzaju "Cygwin Distro" z menedżerem pakietów, który pozwala zainstalować mnóstwo programów uniksowych, które są uruchamiane pod Cygwin. Należą do nich powłoka Uniksa, GCC (dla Cygwin), X, kilka kompilatorów krzyżowych itp.
MinGW (-w64) to projekty zapewniające bezpłatne nagłówki i biblioteki Win32 (takie jak w domenie publicznej). Możesz to zobaczyć jako darmowy zamiennik nagłówków i bibliotek w Windows SDK (starego). Mogą one być używane w połączeniu z GCC. Zarówno projekty, jak i inne firmy zewnętrzne dostarczają natywne wersje GCC dla systemu Windows, które w ogóle nie wymagają Cygwin. Pakiety te mogą być postrzegane jako "pełne" (w stopniu kompletności MinGW (-w64)) zamiennik dla zestawu Windows SDK.
Należy zauważyć, że Cygwin zapewnia także kompilatory krzyżowe Cygwin-Win32: działają one na platformie Cygwin, ale produkują natywne pliki wykonywalne Win32.
Kolejny odtwarzacz, MSYS, jest lekkim widelcem Cygwin, który zapewnia tylko minimalną ilość narzędzi do uruchamiania autotoolów do budowania skryptów w systemie Windows. MSYS musi być używany w połączeniu z natywnymi narzędziami MinGW (-w64), nie jest to Cygwin i nie można łatwo rozszerzyć MSYS.
Tak więc "MinGW (-w64)" często odnosi się do całego Wolnego Windows GNU Toolchain (natywnego lub cross-kompilatora działającego na Cygwin), chociaż ściśle mówiąc jest to tylko nagłówek i biblioteka.
Aby użyć kompilatora C++ GCC, proponuję użyć albo moich pakietów (aby utworzyć pliki wykonywalne 32-bit i 64-bit) lub mingw-builds. Alternatywnie możesz zainstalować Cygwin i użyć jego setup.exe do zainstalowania cross-kompilatora MinGW-w64 i używać go stamtąd, ale jeśli nie potrzebujesz prawie idealnej emulacji Uniksa do skryptów budujących, zasugerowałbym przeciw.
EDIT Może lub nie może mieć świadomość, że nie ma innej alternatywy, stare Interix, który pomija podsystemu Win32 i buduje bezpośrednio na jądrze NT. Jest on dostarczany jako Windows Services for Unix
lub Subsystem for Unix Applications
(dostępny dla Windows 7 i Windows 8 i older versions of Windows). To rozwiązanie jest dostępne dla klientów wersji systemu Windows Pro/Ultimate i zapewnia najbardziej zbliżoną do rodzimej obsługi systemu Unix, którą otrzymasz. Heck, można nawet użyć Visual Studio do debugowania oprogramowania Unix :)
Czy mógłbyś wyjaśnić, co oznacza to "środowisko wykonawcze kompatybilne z POSIX"? Mam czerwony artykuł w Wikipedii na temat POSIX-u, ale wciąż nie jest to dla mnie jasne. – Celeritas
POSIX definiuje interfejs systemu operacyjnego składający się z wielu funkcji C. Składają się one z biblioteki standardowej C99 (C11?) I każdej dodatkowej funkcji szczegółowo [tutaj] (http://pubs.opengroup.org/onlinepubs/9699919799/). Przykładami są 'fork',' access', wszystkie pthreads (chociaż MinGW (-w64) mają biblioteki opakowujące tę część Win32 API: pthreads-win32 i winpthreads), etc ... POSIX również definiuje powłokę i narzędzia, które jest dostarczany przez Cygwin (i w mniej doskonały sposób, MSYS). To wszystko, co wymaga emulacji, a zatem jest wolniejsze w wykonaniu niż kodowanie w stosunku do natywnego API Win32. – rubenvb
Więc zasadniczo C++ zawiera niektóre funkcje, takie jak 'fork()', które istnieją w systemach operacyjnych Unix, ale nie w systemach operacyjnych Windows? Ponieważ są one technicznie częścią języka, muszą być obsługiwane niezależnie od systemu operacyjnego, więc punktem Cygwin/MinGW jest Windows wie, co zrobić z programem C++, który wykonuje kod 'fork()'? Wydaje się dziwne, że funkcje zależne od systemu operacyjnego są częścią podstawowego języka C++, czy to dlatego, że C/C++ był pierwotnie zaprojektowany dla Uniksa? Na przykład czy nie byłoby sensu pisać "system (fork())"? – Celeritas
UWAGA: ta odpowiedź nie udaje się być wyczerpująca, to po prostu chcą zaprezentować prostego zrozumienia koncepcji, z definicji ideologicznych. Używanie nieprecyzyjnego języka jest zamierzone. Więc guru OS, nie oczekuj doskonałych definicji.
Różnica tkwi w korzeniach POSIX/UNIX i Windows.
POSIX to programujący interfejs C dla systemów operacyjnych (między innymi, jak Shell i narzędzia).
Unix i późniejszy Linux implementują takie interfejsy w sobie, Windows natywnie - nie. Ma własny sposób zarządzania obiektami systemu operacyjnego (Win32). Mac OS również tego nie robi.
GCC to zestaw kompilatorów wspólnych w systemach oferujących interfejs POSIX.
Aby użyć go w systemie Windows, trzeba -w tym punkt-dwóch alternatyw:
Dodaj do okna biblioteki (kod i nagłówki), który zostanie dodany do okna interfejsu POSIX (tłumaczenia POSIX wzywa do Wywołania Windows) i portuj wszystkie programy GNU (oparte na systemie Linux), kompilując je do korzystania z tej biblioteki: to właśnie robi Cygwin.
Przepisuj programy POSIX tak, aby zawierały w sobie wszystko związane z mapowaniem POSIX-Windows, tworząc macierzysty plik wykonywalny systemu Windows: o to chodzi w MinGW i MSYS.
Metody botyczne mają zalety i wady. W skrócie, w Cygwin, jeśli coś kompiluje się pod POSIX-em, kompiluje się pod Cygwin (przynajmniej teoretycznie). Rezultatem jest jednak wyglądający na jeden program działający pod Windowsem.
W MinGW możesz pisać natywne programy Windows (przez natywny interfejs Win32 C), ale nie możesz skompilować wszystkiego, ponieważ używa funkcji POSIX nieobecnych w oknach. Najbardziej oczywistym przypadkiem jest brak standardowego interfejsu MinGW i ograniczonej obsługi <locale>
.
Dzięki temu szukam uproszczenia. "POSIX jest interfejsem programowania C dla systemów operacyjnych" co rozumie się przez * programowanie interfejsu *, co oznacza sposób, w jaki program współdziała z systemem operacyjnym? – Celeritas
@Celeritas: dokładnie. POSIX przedstawia system operacyjny hostowanemu programowi jako zestaw wywoływalnych funkcji C. Zauważ, że Windows robi to samo, ale z innym zestawem funkcji. –
GCC tak naprawdę nie oczekuje interfejsu POSIX: może kompilować na/dla wielu różnych systemów (w tym Windows), i nie wszystkie z nich mają pełne interfejsy POSIX C. Zauważ, że używając winpthreads MinGW-w64, libstdC++ może dostarczyć '
- 1. GCC na Cygwin współistniejący z MinGW
- 2. Dlaczego potrzebne są nagłówki Access-Control-Expose?
- 3. Dlaczego potrzebne są narzędzia parsujące dla DSL?
- 4. Jak korzystać z MinGW-w64 z Cygwin?
- 5. Dlaczego istnieje Mingw?
- 6. Eclipse CDT nie znajduje ani toolguła Cygwin ani MinGW
- 7. Kiedy używać Cygwin lub MinGW do kompilowania kodu C?
- 8. Jak skompilować rozszerzenie PHP w oknach z cygwin/mingw?
- 9. Dlaczego potrzebne są nawiasy w tej funkcji F #?
- 10. Jaka jest różnica między std :: string i std :: basic_string? I dlaczego oba są potrzebne?
- 11. Czy naprawdę potrzebne są tabele relacji?
- 12. vhost.exe. Dlaczego jest to potrzebne?
- 13. Jak skompilować i używać GLib z MinGW
- 14. MinGW i std :: thread
- 15. Czy potrzebne są oba tokeny csrf i captcha?
- 16. Czy są potrzebne parametry SVG, takie jak "xmlns" i "wersja"?
- 17. uint24_t i uint48_t w MinGW
- 18. #ifdef i wyjaśnienie potrzebne
- 19. jak odinstalować MinGW i zrobić 'make' Cygwin jak deafult zrobić program z gcc 3.8.1
- 20. Kafka Quickstart: Jakie zależności są mi potrzebne?
- 21. Dlaczego potrzebne są nawiasy klamrowe podczas używania jQuery do regulacji szerokości i wysokości?
- 22. Czy naprawdę potrzebne są konstruktory rekordów Delphi?
- 23. Prevent CollapsingToolbarLayout upadek jeśli nie są potrzebne
- 24. jQuery UI: jakie pliki są potrzebne?
- 25. Jakie klucze są potrzebne do CNContactFormatter?
- 26. Czy pliki dSYM są potrzebne podczas programowania?
- 27. Jak działają biblioteki importu i dlaczego MinGW ich nie potrzebuje?
- 28. Dlaczego potrzebne jest importowanie i importowanie pliku logging.config?
- 29. strerror z MinGW-W64
- 30. Dlaczego w sockaddr_in potrzebne jest zerowe wypełnienie?
Nie potrzebujesz ich do kompilacji C++ w systemie Windows. Po prostu dostarczają ci GCC. – Blender
@Blender, więc mówisz, że pozwalają na uruchamianie GCC w Oknie i skoro GCC jest tak popularny, to jest to pożądane? – Celeritas
GCC to tylko jeden z wielu kompilatorów C/C++. – Blender