2017-02-02 16 views
5

В настоящее время я использую окна 8.1 и искал установку GCC. Я узнал, что способы сделать это через MinGW и CygWin (самые популярные). Теперь я пришел на Windows, Subsystem для Linux (WSL) и Bash, предлагаемых на Windows, в ОС Windows 10.GCC на Windows - Bash на Ubuntu на Windows (WSL), CygWin, MinGW

Вопрос 1. ли это возможно иметь GCC установлен через Bash в Windows 10, и будет ли он работать так же, как в дистрибутиве Linux. Скажем у вас есть файл «helloworld.c», и если я делаю,

>  gcc helloworld.c 
$  ./a 

в Баш бы я получить выход (подразумевается, что содержимое «helloworld.c», чтобы быть просто - cout Постулаты.)

Вопрос 2. Если возможно, то какой из методов предпочитает использовать GCC в Windows. То есть: a) MinGW или CygWin b) Bash в Linux на Windows. Потому что, основываясь на том, что я понял на том, что я читаю, CygWin и MinGW вызывают некоторые зависимости от разработанных на них программ.

Вопрос 3. Если вы прочли это, пожалуйста, заполните мой пробел в понимании CygWin и MinGW. То есть, если я использую его только для компиляции и запуска фрагментов кода, а не для разработки приложений, не имеет значения, какой из них я использую, правильно? Поскольку код (написанный на C или FORTRAN), будет компилироваться и выполняться так же, независимо от системы, я прав?

Контекст. Я работаю над численными вычислениями (Computational Fluid Dynamics), и моя основная работа - разработать и запустить CFD-коды в FORTRAN. То, что я хочу сделать, - это работа над вычислительным кодом (для которого мы главным образом используем FORTRAN) на моем ноутбуке, который работает в Windows. И я не хочу разрабатывать приложения или программное обеспечение для Windows или Linux на данный момент. Но я все равно хотел бы знать, как все работает, и что является лучшим вариантом. Пожалуйста, объясните подробно. Спасибо.

ответ

3

Чтобы ответить на ваш первый вопрос, да, вы можете сделать это с помощью WSL.

Чтобы ответить на другие ваши вопросы, давайте посмотрим на MinGW. Это то, что говорит запись в Википедии для MinGW:

MinGW был разветвлен с версии 1.3.3 Cygwin. [5] Хотя Cygwin и MinGW могут использоваться для переноса программного обеспечения Unix в Windows, у них разные подходы: [16] Cygwin стремится предоставить полный уровень POSIX, включающий полную реализацию всех основных системных вызовов и библиотек Unix. Совместимость считается более высокой, чем производительность. С другой стороны, приоритеты MinGW - это простота и производительность. Таким образом, он не предоставляет определенные API-интерфейсы POSIX, которые не могут быть легко реализованы с использованием Windows API, таких как fork(), mmap() и ioctl(). [16] Приложения, написанные с использованием кросс-платформенной библиотеки, которая сама портирована в MinGW, например SDL, wxWidgets, Qt или GTK +, обычно скомпилируются так же легко в MinGW, как и в Cygwin.

Программы Windows, написанные с помощью Cygwin, запускаются поверх библиотеки совместимости с копилефт-совместимостью, которая должна быть распространена вместе с программой вместе с исходным кодом программы. MinGW не требует уровня совместимости, поскольку программы на основе MinGW скомпилированы с прямыми вызовами в Windows API.

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

Это то, что веб-страница MinGW (http://www.mingw.org) говорит:

MinGW, стягивание "Минималистский GNU для Windows", является минималистской средой разработки для родного Приложения Microsoft Windows.

MinGW предлагает полный набор инструментов для программирования с открытым исходным кодом, который подходит для разработки родных приложений MS-Windows и которые не зависят от каких-либо сторонних DLL-модулей C-Runtime. (Это зависит от количества DLL, предоставляемых самой Microsoft, в качестве компонентов операционной системы, среди которых наиболее значимыми являются MSVCRT.DLL, библиотека времени выполнения Microsoft C. Кроме того, потоковые приложения должны поставляться со свободно распространяемой поддержкой потоков DLL, предоставляемый как часть самого MinGW).

Компиляторы MinGW обеспечивают доступ к функциональным возможностям среды выполнения Microsoft C и некоторым срокам выполнения, зависящим от языка. MinGW, будучи минималистом, не пытается и никогда не будет пытаться обеспечить среду выполнения POSIX для развертывания приложений POSIX в MS-Windows. Если вы хотите развертывать приложение POSIX на этой платформе, вместо этого рассмотрите Cygwin.

Я знаком с WSL и Cygwin больше, чем MinGW. Из того, что я знаю, MinGW больше нацелен на создание разумно переносимых высокопроизводительных двоичных файлов Windows, в то время как Cygwin более ориентирован на пользователей Unix (или тех, кто хочет переносить приложения, написанные для Unix/POSIX), которые хотят использовать Unix-подобную среду в Окна со всеми отделами. Как вы указали, программы Cygwin, по крайней мере, были менее легко распространяемыми для других, у которых нет Cygwin (из-за лицензионных соображений, но см. Ссылку ниже). Программы MinGW запускаются как собственные программы Windows, используя недокументированные родные библиотеки Windows. Бинарные файлы WSL не запускаются под Windows самостоятельно; они запускаются только в среде WSL (или, возможно, в родных системах Linux). WSL отображает ядро ​​Linux на вызовы ядра Windows, тогда как Cygwin реализует вызовы библиотеки Unix/Posix. WSL полагается на настоящий дистрибутив Linux, чтобы обеспечить его среду, тогда как Cygwin полагается на собственную среду. (WSL имеет преимущество в том, что он будет запускать существующие двоичные файлы без перекомпиляции.) Я не думаю, что это слишком важно для вас, потому что вы не планируете распространять свои двоичные файлы. Вы хотите высокую производительность. Согласно Википедии, MinGW - это более высокая производительность, чем Cygwin, но она также 32-битная, что может быть проблемой для ваших приложений. Существует 64-битная среда, похожая на MinGW, но это другой проект.

Важным моментом является то, хотите ли вы написать код Windows или код Unix/Linux/POSIX. MinGW предназначен для разработки приложений Windows с использованием Windows API (хотя вы можете сбросить ограниченную поддержку POSIX); WSL и Cygwin предназначены для разработки приложений Unix/Linux/POSIX. Это имеет значение для мобильности. Но если вы разрабатываете типы программ, я думаю, что вы, почти все прямые вычисления и очень мало причудливых операций ввода-вывода, это может просто сводиться к личным предпочтениям или удобству. Если вы можете придумать небольшую представительную программу, которая занимает значительное количество времени и пытается запустить ее в каждой среде, вы можете узнать, какая из них имеет лучшую производительность. Это будет зависеть от того, что я думаю о вашем собственном сочетании операций.

См. Также What is the difference between Cygwin and MinGW?

+0

Благодарим за всесторонний ответ. Это не только отвечало на мои вопросы, но и способствовало моему пониманию этих инструментов. Спасибо за предложение. – Rithwik

+0

MinGW-w64 во всех смыслах является преемником версии MinGW.org. Они обеспечивают 32 и 64-битные компиляторы, а также поддерживают некоторые рычаги. Они обеспечивают гораздо лучшее покрытие современных API Windows, включая связанные с Windows приложениями.То, что я говорю, это просто использовать наборы инструментов на основе этого, не тратьте время на выяснение, почему ваш компилятор MinGW не работает из-за какой-то загадочной причины. – rubenvb

+0

@rubenvb Ха-ха. Я встретил MinGW-w64, но не знал об этом. Спасибо за совет. – Rithwik