#c #windows #gcc #cygwin #mingw
#c #Windows #ссагпз #сигвин #мингв #gcc #cygwin #mingw
Вопрос:
Я заядлый пользователь Python, и, похоже, мне требуется, чтобы MinGW был установлен на моем компьютере с Windows для компиляции некоторых библиотек. Я немного запутался в MinGW и GCC. Вот мой вопрос (с реальной фиктивной точки зрения):
Итак, Python — это язык, который одновременно интерпретируется и компилируется. Существуют реализации Python для Linux и Windows, которые просто устанавливаются и используются двоичный файл для выполнения своего кода. Они поставляются в комплекте с кучей встроенных библиотек, которые вы можете использовать. То же самое с Ruby из того, что я прочитал.
Теперь я немного поработал с C и знаю, что для его компиляции нужно a. У него есть свои встроенные библиотеки, которые, кажется, называются заголовочными файлами, которые вы можете использовать. Итак, в школьные годы C писал код в vi-подобной IDE под названием Turbo-C, а затем нажимал F9, чтобы скомпилировать его. На этом мое образование в области C заканчивается.
Что такое MinGW и что такое GCC? Я в основном работал над системами Windows и даже недавно начал использовать Cygwin. Разве это не одно и то же?
Простое объяснение, затрагивающее эти области, было бы полезно.
(Мои извинения, если этот пост звучит глупо. Я подумал, что спрошу здесь. Игнорирование этих основных битов никогда никого не делало лучшим программистом.)
Спасибо всем.
Комментарии:
1. Вы читали страницу приветствия на www.mingw.org ? Отвечает ли это на какие-либо ваши вопросы или поднимает новые, более конкретные? Возможно, вы также захотите прочитать некоторую вводную информацию о том, как работают компиляторы / скомпилированные языки.
2. Я прочитал. Это мало на что отвечает. Первое предложение означает nada: «Mingw-w64 является усовершенствованием оригинала mingw.org проект, созданный для поддержки компилятора GCC в системах Windows.»
Ответ №1:
MinGW — это полный набор инструментов GCC (включающий полдюжины интерфейсов, таких как C, C , Ada, Go и еще много чего) для платформы Windows, который компилируется для библиотеки времени выполнения компонентов ОС Windows C и ссылается на нее в msvcrt.dll . Скорее, он пытается быть минимальным (отсюда и название).
Это означает, что, в отличие от Cygwin, MinGW не пытается предложить полный слой POSIX поверх Windows, но, с другой стороны, это не требует от вас подключения к специальной библиотеке совместимости.
Поэтому он также не имеет каких-либо последствий для лицензии GPL для программ, которые вы пишете (заметное исключение: библиотеки профилирования, но вы обычно не распространяете их, так что это не имеет значения).
Более новый MinGW-w64 поставляется с примерно 99% полной привязкой к Windows API (исключая ATL и тому подобное), включая поддержку x64 и экспериментальные реализации ARM. Иногда вы можете обнаружить какую-нибудь экзотическую константу undefined, но для того, что 99% людей используют 99% времени, она просто отлично работает.
Вы также можете использовать большую часть того, что есть в POSIX, при условии, что это реализовано в той или иной форме под Windows. Одна из основных проблем POSIX, которая не работает с MinGW, — это fork
просто потому, что в Windows такой вещи нет (Cygwin испытывает много боли, чтобы реализовать ее).
Есть несколько других незначительных вещей, но в целом большинство вещей все равно работают.
Итак, в очень-очень упрощенном предложении: MinGW (-w64) — это «компилятор без излишеств», который позволяет вам писать собственные двоичные исполняемые файлы для Windows не только на C и C , но и на других языках.
Комментарии:
1. Знаете ли вы историю
-w64
форка MinGW и почему они так неудобно назвали его «w64»?2. Что именно является языком программирования ‘frontend’?
3. @Nim: Язык программирования является интерфейсом, более или менее. Компилятор часто / обычно состоит из интерфейса (например, C или C ), который анализируется в абстрактном синтаксическом дереве и преобразуется в какое-то неопределенное промежуточное представление своего рода. Это промежуточное представление затем преобразуется серверной частью в определенное для машины количество инструкций. Некоторые компиляторы (LLVM) делают это более понятным, другие — менее понятным, но в принципе они, тем не менее, работают одинаково.
4. «… компилируется для библиотеки времени выполнения компонента C ОС Windows и ссылается на нее в msvcrt.dll …» — Я думал, что MinGW не полагается на
msvcrt.dll
, а вместо этого поставляется со своей собственной стандартной библиотекой.dll
. Я ошибаюсь?5. И что такое «GCC»?
Ответ №2:
Для компиляции программы на C вам нужна реализация на C для вашего конкретного компьютера.
Реализации C состоят, в основном, из компилятора (его препроцессора и заголовков) и библиотеки (готовый исполняемый код).
На компьютере с установленной Windows библиотека, которая содержит большинство готовых исполняемых кодов, несовместима с gcc
компилятором … итак, чтобы использовать этот компилятор в Windows, вам нужна другая библиотека: вот где MinGW
входит. MinGW
предоставляет, среди прочего, библиотеку (библиотеки), необходимую для создания реализации C вместе с gcc
.
Библиотека Windows и MSVC вместе создают другую реализацию.
Комментарии:
1. Хорошее простое объяснение.
2. @pmg итак, библиотечный код несовместим с компилятором gcc, но мы пишем код, весь который в
int main()
совместим с компилятором gcc, верно?3. В заголовочном файле есть объявление, а в библиотечных файлах есть определение. Итак, после компиляции компоновщик связывает соответствующий готовый код в объектном файле. Это только вы имеете в виду `библиотеку, содержащую большинство готовых исполняемых кодов`, верно? но это происходит после компиляции, так почему это проблема с компилятором gcc? Я думаю, что мне не хватает некоторых базовых, но я не понимаю?
4. Не совсем верно … (части) стандартной библиотеки устанавливаются вместе с операционной системой (в мой компьютер 3-летней племянницы встроена эта функциональность). Когда вы устанавливаете компилятор (с заголовками и [дополнительными] готовыми функциями стандартной библиотеки), связь между компилятором и частью стандартной библиотеки операционной системы в основном хорошо установлена. MinGW просто говорит: «не связывайтесь с функциями ОС, используйте эти вместо этого».
Ответ №3:
MinGW — это набор инструментов разработки, который содержит GCC (среди прочих), а GCC — компилятор C в этом наборе.
Комментарии:
1. Это еще один набор Unix-подобных инструментов, сопоставимых с MinGW.
2. @Mr.32 из Википедии: Cygwin — это Unix-подобная среда и интерфейс командной строки для Microsoft Windows.
Ответ №4:
MinGW — это реализация большинства утилит GNU building, таких как gcc и make в Windows, в то время как gcc — это только компилятор. Cygwin — это намного больший и сложный пакет, который устанавливает намного больше, чем MinGW.
Ответ №5:
Единственная причина существования MinGW заключается в предоставлении Linux-подобной среды для разработчиков, не способных использовать собственные инструменты Windows. Он уступает Microsoft tooolchains практически во всех отношениях на платформах Win32 / Win64, НО предоставляет среду, в которой разработчику Linux не нужно изучать что-либо новое, И он / она может компилировать код Linux практически без изменений. Это сомнительный подход , но многие люди считают, что удобство важнее других аспектов разработки . Это не имеет ничего общего с C или C , как было указано в предыдущих ответах, это имеет все, что нужно разработчику среды. Аргумент о цепочках инструментов GNU в Windows и его необходимости — это просто аргумент
GCC — компилятор unix / Linux, MinGW — аппроксимация GCC в среде Windows, компилятор Microsoft и компилятор Intel — больше похоже на названия (оба создают гораздо, намного лучшие программы в Windows, чем MinGW, кстати)
Комментарии:
1. @rubenvb — просветите меня, пожалуйста
2. MinGW не предоставляет Linux-подобную среду, то есть MSYS (2) и / или Cygwin. MinGW предоставляет заголовки и библиотеки, чтобы GCC (набор компиляторов, а не просто «компилятор unix / Linux») можно было создавать и использовать во время выполнения Windows C. Он предоставляет спорадические расширения, в основном там, где стандарты C и / или C требуют дополнительной функциональности, которая не была реализована в версиях библиотеки C для Windows (например, C11 в настоящее время). MinGW не является «приближением» к GCC в Windows. Это довольно полнофункциональный. Причины его существования больше не укладываются в эту маленькую рамку.
3. @rubenvb какую функциональность c 11 (или 14, если на то пошло) он предоставляет, чего нет у компилятора MS? Вы когда-нибудь сталкивались с использованием MinGW без Cygwin? По какой причине вам нужно использовать именованные заголовочные файлы в Windows, и как это противоречит всему, что я сказал? Как человек, который занимается СОБСТВЕННОЙ разработкой на Windows, Linux и Mac, мне очень, очень любопытно — за 10 лет или около того я еще не услышал исчерпывающего ответа
4. до VS2015 (и даже в текущем VS2015, см. here ) отсутствовали различные вещи или были плохо реализованы, где GCC и Clang оба имеют правильные реализации. VS обычно отстает в соответствии стандартам. Так было с момента выхода GCC 4.7. Я (и, например, Qt с открытым исходным кодом) использую MinGW-w64 без Cygwin. Я не понимаю, что вы подразумеваете под «именованными файлами заголовков». GCC с MinGW-w64 — это просто еще один компилятор в Windows, и он полезен как таковой, вне каких-либо лицензионных ограничений, с которыми поставляется VS.
5. «MinGW предоставляет заголовки заголовков и библиотек, чтобы GCC» — вот что я имею в виду. Что касается соответствия C , я исправлен — мне самому это не очень нравится (особенно C 14). Что я должен был написать «разработчики Linux, фанаты c 14/17 и люди, которым нравится чрезмерно сложный способ разработки» — спасибо, что поправили меня. Ограничение лицензирования MSVC — я не знаком с ними, используя community edition, вы можете в значительной степени скомпилировать все за пределами VS (который является просто IDE)