2017-02-02 32 views
5

Obecnie korzystam z systemu Windows 8.1 i chciałem zainstalować GCC. Dowiedziałem się, że można to zrobić za pomocą MinGW i CygWin (najpopularniejszego). Teraz wpadłem na podsystem Windows na Linux (WSL) i Bash oferowanego w Windows w systemie Windows 10.GCC w systemie Windows - Bash w systemie Ubuntu w systemie Windows (WSL), CygWin, MinGW

Pytanie 1., czy możliwe jest, aby mieć zainstalowaną przez Bash w systemie Windows 10 GCC, a to działa tak jak w dystrybucji Linuksa. Powiedzmy, że masz „helloworld.c” plik, a jeśli to zrobię,

>  gcc helloworld.c 
$  ./a 

w bash chciałbym uzyskać wyjście (zakładając zawartość „” helloworld.c być prosty - cout statment.)

Pytanie 2. Jeśli to możliwe, która z metod jest preferowana do używania GCC w systemie Windows. To znaczy: a) MinGW lub CygWin b) Bash w systemie Linux w systemie Windows. Ponieważ w oparciu o to, co zrozumiałem na podstawie tego, co przeczytałem, CygWin i MinGW powodują pewne zależności od programów na nich opracowanych.

Pytanie 3. Jeśli przeczytałeś tak daleko, wypełnij moją lukę w zrozumieniu CygWin i MinGW. To znaczy, jeśli używam go tylko do kompilowania i uruchamiania fragmentów kodu, a nie do rozwijania aplikacji, to nie ma znaczenia, z których z nich korzystam, czy mam rację? Ponieważ kod (napisany w języku C lub FORTRAN) będzie kompilował i wykonywał to samo niezależnie od systemu, czy mam rację?

Kontekst. Jestem studentem pracującym nad obliczeniami numerycznymi (Computational Fluid Dynamics), a moją główną pracą jest opracowanie i uruchamianie kodów CFD w FORTRAN. Chcę tylko pracować nad kodem obliczeniowym (do którego używamy głównie FORTRAN) na moim laptopie, który działa w systemie Windows. I nie zamierzam teraz tworzyć aplikacji ani oprogramowania dla systemu Windows ani Linux. Ale nadal chciałbym wiedzieć, jak działają i co jest najlepszą opcją. Proszę szczegółowo wyjaśnić. Dziękuję.

Odpowiedz

3

Aby odpowiedzieć na twoje pierwsze pytanie, tak, możesz to skompilować w ramach WSL.

Aby odpowiedzieć na inne pytania, spójrzmy na MinGW. To jest wpis w Wikipedii dla MinGW:

MinGW został rozwidlony z wersji 1.3.3 Cygwin. [5] Chociaż zarówno Cygwin, jak i MinGW mogą być używane do portowania oprogramowania Unix do systemu Windows, mają różne podejścia: [16] Cygwin ma na celu zapewnienie kompletnej warstwy POSIX obejmującej pełną implementację wszystkich głównych wywołań systemowych i bibliotek Unix. Kompatybilność jest uważana za wyższy priorytet niż wydajność. Z drugiej strony priorytety MinGW to prostota i wydajność. W związku z tym nie zapewnia pewnych API POSIX, których nie można łatwo zaimplementować za pomocą interfejsu API systemu Windows, takiego jak fork(), mmap() i ioctl(). [16] Aplikacje napisane przy użyciu biblioteki wieloplatformowej, która sama została przeniesiona do MinGW, takie jak SDL, wxWidgets, Qt lub GTK +, będą zazwyczaj kompilowane tak łatwo w MinGW, jak w Cygwin.

Programy napisane w systemie Windows napisane w Cygwin są uruchamiane na podstawie biblioteki DLL kompatybilnej z funkcją copylefted, która musi być dystrybuowana wraz z programem wraz z kodem źródłowym programu. MinGW nie wymaga warstwy kompatybilności, ponieważ programy oparte na MinGW są kompilowane z bezpośrednimi wywołaniami do API Windows.

(https://en.wikipedia.org/wiki/MinGW)

To właśnie strona internetowa MinGW (http://www.mingw.org) mówi:

MinGW, kurczenie się "Minimalist GNU for Windows", to środowisko programistyczne minimalistyczny dla natywnego Aplikacje Microsoft Windows.

MinGW zapewnia kompletny zestaw narzędzi programowania Open Source, który jest odpowiedni do tworzenia natywnych aplikacji MS-Windows, i które nie zależą od zewnętrznych bibliotek DLL C-Runtime. (Zależy to od liczby bibliotek DLL udostępnianych przez samą firmę Microsoft, jako składniki systemu operacyjnego, wśród których najważniejszą jest MSVCRT.DLL, biblioteka wykonawcza Microsoft C. Dodatkowo aplikacje gwintowane muszą być dostarczane z dowolnie dystrybuowalną biblioteką DLL obsługi wątków, dostarczane jako część samego MinGW).

Kompilatory MinGW zapewniają dostęp do funkcji środowiska wykonawczego Microsoft C i niektórych środowisk wykonawczych specyficznych dla języka. MinGW, będąc Minimalistą, nie próbuje i nigdy nie będzie próbował zapewnić środowiska wykonawczego POSIX dla wdrożenia aplikacji POSIX w MS-Windows. Jeśli chcesz wdrożyć aplikację POSIX na tej platformie, zamiast tego rozważ Cygwin.

Znam WSL i Cygwin więcej niż MinGW. Z tego, co wiem, MinGW jest bardziej ukierunkowany na tworzenie rozsądnie przenośnych, wydajnych plików binarnych Windows, podczas gdy Cygwin jest bardziej ukierunkowany na użytkowników Uniksa (lub tych, którzy chcą przenosić aplikacje stworzone dla Uniksa/POSIX), którzy chcą środowiska podobnego do Uniksa pod Okna z wszystkimi dodatkami. Jak zaznaczyłeś, programy Cygwin przynajmniej były łatwiejsze do dystrybucji dla innych, którzy nie mają zainstalowanego Cygwina (ze względu na kwestie związane z licencją, ale zobacz poniższy link). Programy MinGW działają jako rodzime programy systemu Windows przy użyciu nieudokumentowanych bibliotek rodzimych systemu Windows. Pliki binarne WSL nie działają samodzielnie w systemie Windows; działają tylko w środowisku WSL (lub prawdopodobnie w macierzystym systemie Linux). WSL mapuje wywołania jądra systemu Linux do wywołań jądra systemu Windows, podczas gdy Cygwin implementuje wywołania biblioteki Unix/Posix. WSL polega na prawdziwej dystrybucji Linuksa, aby zapewnić jej środowisko, podczas gdy Cygwin opiera się na własnym środowisku. (WSL ma tę przewagę, że będzie uruchamiał istniejące pliki binarne bez ponownej kompilacji.) Nie sądzę, żeby to wszystko było dla ciebie zbyt ważne, ponieważ nie planujesz dystrybucji plików binarnych. Chcesz wysokiej wydajności. Według Wikipedii, MinGW ma wyższą wydajność niż Cygwin, ale jest też 32-bitowy, co może być problemem dla twoich aplikacji. Istnieje środowisko 64-bitowe podobne do MinGW, ale jest to inny projekt.

Ważne jest, aby napisać kod systemu Windows lub Unix/Linux/POSIX. MinGW służy do programowania aplikacji Windows przy użyciu API Windows (chociaż można złożyć pewną ograniczoną obsługę POSIX); WSL i Cygwin służą do projektowania aplikacji Unix/Linux/POSIX. Ma to znaczenie dla celów przenoszenia. Ale jeśli rozwijasz typ programów, które myślę, że jesteś, prawie wszystkie proste obliczenia i bardzo mało fantazyjne I/O, może po prostu sprowadzić się do osobistych preferencji lub wygody. Jeśli możesz wymyślić mały program reprezentacyjny, który zajmuje znaczną ilość czasu i spróbować uruchomić go w każdym środowisku, możesz dowiedzieć się, który ma najlepszą wydajność. To zależy od tego, jak myślę o twoim własnym zestawie operacji.

Zobacz także What is the difference between Cygwin and MinGW?

+0

Dzięki za wyczerpującą odpowiedź. To nie tylko odpowiadało na moje pytania, ale także pogłębiało moją wiedzę na temat tych narzędzi. Dzięki za sugestię. – Rithwik

+0

MinGW-w64 jest pod każdym względem następcą wersji MinGW.org. Dostarczają kompilatory 32- i 64-bitowe, a także pewne wsparcie dla ramienia. Zapewniają znacznie lepsze pokrycie nowoczesnych interfejsów API systemu Windows, w tym rzeczy związanych z aplikacjami systemu Windows.Chodzi mi o to, że w tym celu używam jedynie narzędzi, nie marnuj czasu na zastanawianie się, dlaczego twój kompilator MinGW nie działa z jakiegoś tajemniczego powodu. – rubenvb

+0

@rubenvb Haha. Znalazłem MinGW-w64, ale nie byłem tego pewien. Dzięki za wskazówkę. – Rithwik

Powiązane problemy