Сборка mingw в windows своими руками

В сети можно найти много описаний сборки mingw и GNU утилит под ним. Я тоже решил написать свой вариант, так как во-первых он на русском. Во-вторых используются последние стабильные исходники (по состоянию на 27.01.2011). В третьих добавлена оптимизация циклов (graphite loop optimizations). В четвертых я описываю причины выбора тех или иных опций конфигурации исходников. В пятых, чтобы не забыть.

Зачем собирать mingw самому?

  • Для того, чтобы сконфигурировать компоненты так как нужно мне, а не той тысяче пользователей, которые скачивают стандартный пакет с официального сайта.
  • Чтобы я сам определял какие компоненты мне нужны в виде shared библиотек с dll-ками, а какие я линкую статически.
  • Чтобы быть уверенным, что gcc работает максимально эффективно.
  • Чтобы исключить возможные закладки в исполняемые модули.
  • Чтобы лучше понять как собираются и устанавливаются GNU утилиты.

Каждый может найти причину для собственноручной сборки.

Что понадобится?

Как ни странно, но для сборки mingw нужен сам mingw. Товарищи постарались и сделали аккуратную программу установки, которая сама скачает и установит нужные пакеты. Она лежит на официальном сайте.
Помимо самого mingw при установке выбираем «C++ Compiler» и «MinGW Developer ToolKit». Ставим в C:\MinGW.

Качаем исходники:

  • gmp-5.0.1
  • ppl-0.11
  • cloog-ppl-0.15.10
  • mpfr-3.0.0
  • mpc-0.8.2
  • binutils-2.21
  • mingwrt-3.18
  • w32api-3.15-1
  • libiconv-1.13.1
  • gcc-4.5.2

Опционально:

  • make-3.82

Не обойтись без терпения, настойчивости и удачи!

Сборка

Создаем на самом быстром винчейстере рабочую папочку C:\mbuild. Все исходники складываем в C:\mbuild\distrib. Выращивать mingw будем в C:\mbuild\release. Запускаем скачанный msys…

cd /c/mbuild

Небольшое замечание. В большинстве инструкций сказано сложить исходники gmp, mpfr и mpc в папку к gcc — он соберет их автоматически. Мы так делать не будем, потому что ходим прикрутить к gcc CLooP, а он зависит от gmp. То есть нам придется собирать gmp до того, как мы приступим к конфигурации gcc.

GMP

tar -xjf distrib/gmp-5.0.1.tar.bz2 && cd gmp-5.0.1
mkdir build && cd build
../configure —prefix=’/c/mbuild/release’ —enable-cxx —disable-static —enable-shared CPPFLAGS=’-fexceptions’ &>config.my.log
make -j4 &>make.my.log
make install &>install.my.log

  • —enable-cxx CPPFLAGS=’-fexceptions’ — Обязательны для корректной сборки ppl
  • —disable-static —enable-shared — В windows нельзя одновременно иметь shared и static версии, иначе сборка дальнейших компонентов может завершиться ошибкой. Будем собирать shared версии. Не волнуйтесь, на компилируемые с помощью mingw программы зависимость не переносится.

Очень важно не использовать ключи оптимизации CFLAGS, CXXFLAGS и LDFLAGS такие как «-s -O2 -mtune=i686» — бывали случаи когда ppl из-за этого не находил gmp.

PPL

tar -xjf ../../distrib/ppl-0.11.tar.bz2 && cd ppl-0.11
mkdir build && cd build
../configure —prefix=’/c/mbuild/release’ —disable-static —enable-shared —disable-nls —enable-threads —disable-debugging —with-gmp-prefix=/c/mbuild/release —with-cflags=’-s -O2′ —with-cxxflags=’-s -O2′ &>config.my.log
make -j4 &>make.my.log
make install &>install.my.log

  • —disable-static —enable-shared — какой вариант линковки мы выбрали для gmp такой же следует выбрать и для ppl.
  • —disable-nls — отключая National Language Support не будем требовать от приложения умения общаться на русском.
  • —enable-threads — создаваемый mingw я буду использовать для компиляции многопоточных приложений.
  • —disable-debugging — отладочная информация ни к чему — она занимает лишнее место.
  • —with-gmp-prefix — сообщит где искать gmp.
  • —with-cflags —with-cxxflags — некоторая оптимизация.

Во время конфигурирования windows может сообщать о том, что программа conftest не запустилась. Не паникуйте — это всего лишь результат работы скрипта configure.

CLooG/PPL

tar -zxf ../distrib/clog-ppl-0.15.10.tar.gz
cd cloog-ppl-0.15.10
mkdir build && cd build
../configure —prefix=’/c/mbuild/release’ —disable-static —enable-shared —with-ppl=/c/mbuild/release —with-gmp=/c/mbuild/release CFLAGS=’-s -O2′ CPPFLAGS=’-s -O2′ &>config.my.log
make &>make.my.log

Тут имеется неприятная часть со скриптами конфигурации. Их почему-то просто нет. В логе make.my.log сообщается, что папка m4 отсутствует. Я не разбираюсь в причинах ее отсутствия. Просто копирую ее из ppl-0.11. Благо там имеются нужные скрипты.

make &>make.my.log
make install &>install.my.log

Опции понятны из предыдущих описаний.

MPFR

tar -xjf distrib/mpfr-3.0.0.tar.bz2 && cd mpfr-3.0.0
mkdir build && cd build
../configure —prefix=’/c/mbuild/release’ —disable-static —enable-shared —enable-thread-safe —with-gmp=/c/mbuild/release CFLAGS=’-s -O2′ CPPFLAGS=’-s -O2′ &>config.my.log
make -j4 &>make.my.log
make install &>install.my.log

MPC

tar -xzf distrib/mpc-0.8.2.tar.gz
cd mpc-0.8.2
mkdir build && cd build
../configure —prefix=/c/mbuild/release —disable-static —enable-shared —with-gmp=/c/mbuild/release —with-mpfr=/c/mbuild/release CFLAGS=’-s -O2′ CPPFLAGS=’-s -O2′ &>config.my.log
make -j4 &>make.my.log
make install &>install.my.log

LIBICONV

tar -xzf distrib/libiconv-1.13.1.tar.gz && cd libiconv-1.13.1
mkdir build && cd build
../configure —prefix=/c/mbuild/release —enable-shared —disable-static —disable-nls CFLAGS=’-s -O2 -mno-cygwin’ CPPFLAGS=’-s -O2 -mno-cygwin’ &>confgi.my.log
make -j4 &>make.my.log
make install &>install.my.log

Вообще, libiconv необязателен, но включить его поддержку желательно (очень полезно, если вы будете собирать другие gnu утилиты этим mingw).

  • CFLAGS=’-mno-cygwin’ Для того, чтобы libiconv корректно собирался под msys следует явно указать, что мы используем не CygWin.

BINUTILS

tar -xjf distrib/binutils-2.21.tar.bz2 && cd binutils-2.21
mkdir build && cd build
../configure —prefix=/c/mbuild/release —disable-nls —enable-threads —with-gmp=/c/mbuild/release —with-mpc=/c/mbuild/release —with-mpfr=/c/mbuild/release —with-ppl=/c/mbuild/release —disable-ppl-version-check —with-cloog=/c/mbuild/release —disable-cloog-version-check CFLAGS=’-s -O2′ CPPFLAGS=’-s -O2′ &>config.my.log
make -j4 &>make.my.log
make install &>install.my.log

  • —disable-ppl-version-check —disable-cloog-version-check Когда то столкнулся с тем, что скрипты проверки версии ppl искали именно 10 версию, а не выше, по инерции использую теперь эти опции, хотя кое-где ситуацию уже исправили. Если есть желание можете покопаться в configure скрипте, посмотрев обработку ppl_version_minor. Binutils-2.21 конфигурируется нормально, а gcc-4.5.2 — нет.

INCLUDE

Распаковываем C:\mbuild\distrib\w32api-3.14-mingw32-src.tar.lzma в C:\mbuild\w32api. Именно в w32api, чтобы ее мог найти mingwrt при сборке.

tar -xzf distrib/mingwrt-3.18-mingw32-src.tar.gz
cp -r w32api/include /c/mbuid/release
cp -r mingwrt-3.18-mingw32/include /c/mbuild/release

Чтобы верно находились все длл-ки при конфигурации, добавим путь к релизу в PATH

export PATH= $PATH:/c/mbuild/release

GCC

tar -xjf gcc-4.5.2.tar.bz2
cd gcc-4.5.2
mkdir build && cd build
../configure —prefix=/c/mbuild/release —enable-shared=libstdc++ —enable-threads —enable-version-specific-runtime-libs —enable-languages=c,c++ —with-dwarf2 —disable-sjlj-exceptions —disable-win32-registry —disable-werror —disable-nls —disable-multilib —with-gmp=/c/mbuild/release —with-ppl=/c/mbuild/release —disable-ppl-version-check —with-cloog=/c/mbuild/release —disable-cloog-version-check —with-mpfr=/c/mbuild/release —with-mpc=/c/mbuild/release —enable-libgomp —with-libiconv-prefix=/c/mbuild/release —enable-libstdcxx-debug —enable-cxx-flags=’-s -O2′ —with-boot-ldflags=’-s’ &>config.my.log
make -j4 BOOT_CFLAGS=’-s -O2′ BOOT_CPPFLAGS=’-s -O2′ &>make.my.log

Самая длительная и ответственная часть. Я исользую именно полный исходник
gcc, а не отдельно gcc-core и gcc-с++ так как включаю libgomp и zlib, а
они не идут в составе gcc-core.

  • —enable-shared=libstdc++ — Обычно я компилирую библиотеки статически, но иногда приходится использовать stlport вместо родной STL, поэтому ее сделаем орываемой.
  • —enable-version-specific-runtime-libs Влияет на расположение заголовочных файлов и библиотек runtime. Эта опция нужна для того, чтобы обеспечить возможность использования нескольких версий runtime библиотек с одной mingw.
  • —enable-languages=c,c++ — собираем компилятор для языков C и C++.
  • —with-dwarf2 — отладочная информация dwarf-2
  • —disable-sjlj-exceptions — отключить sjlj исключения
  • —disable-win32-registry — модно настроить gcc таким образом, чтобы информацию об include папке он искал в реестре windows. Нас это не интересует.
  • —disable-werror — werror хорошо, когда его задаешь вручную.
  • —disable-nls эта опция не влияет на locale и все что связано с широкими символами в mingw. Их поддержка будет неполной (например некорректно работает получение текущей пользовательской локали — std::locale(«») всегда вернет locale(«C»)) даже если мы разрешим NLS. Эта опция влияет лишь на сообщения компилятора. Лично мне было бы непривычно, если бы он заговорил по русски…
  • —disable-multilib — будем использовать наш компилятор для создания windows программ и только
  • —enable-libstdcxx-debug эта опция позволяет помимо основной версии stdc++ библиотеки иметь отладочную, чтобы можно было во время отладки путешествовать и по библиотечным функциям.

К сожалению с отладочной информацией собирается не только версия, которую мы подключили ключом —enable-libstdcxx-debug, но и основная. Побороть это с помощью опций сборки gcc я не смог. Поэтому предлагаю следующий вариант:

cd i686-pc-mingw/libstdc++-v3
make -j4 CFLAGS=’-s -O2′ CXXFLAGS=’-s -O2′ &>make.my.log

Тут мы несколько смухлевали. В реальности (в том числе, когда бы собираете кросс-компилятор) вам придется собрать сначала сам gcc с помощью make all-gcc, затем runtime и только потом завершить сборку всего gcc. Процесс описан, к примеру тут. Но мы не будем заморачиваться, так как в этом конкретном случае все работает и так.

cd ../../
make install &>install.my.log

К сожалению мне никогда не удавалось скомпилить gcc под mingw с использованием профилирования (make profiledbootstrap) — процесс завершался с ошибками. Чаще всего segmentation fault компилятора. А жаль… говорят прирост в скорости компиляции ~7%.

Runtime и W32API

w32api нужно собирать с помощью нового gcc. Для этого в файле fstab (поумолчанию C:\MinGW\msys\1.0\etc\fstab) меняем C:\MinGW на C:\mbuild\release и запускаем новый msys. В этом экземпляре msys используется вновьсобранный gcc. Но так как от зависимостей мы еще не избавились, нам придется сообщить msys где искать dll-ки старого mingw:

export PATH=$PATH:/c/MinGW/bin

W32API

cd ../../w32api
mkdir build && cd build
../configure —prefix=/c/mbuild/release CFLAGS=’-s -O2′ CPPFLAGS=’-s -O2′ &>config.my.log
make &>make.my.log
make install &>install.my.log

MingwRT

tar -xzf distrib/mingwrt-3.18-mingw32-src.tar.gz && cd mingwrt-3.18-mingw32-src
mkdir build && cd build
../configure —prefix=/c/mbuild/release CFLAGS=’-s -O2′ CPPFLAGS=’-s -O2′ &>config.my.log
make &>make.my.log
make install &>install.my.log

Из-за того, что gmp собирался не родным gcc он, скорее всего, имеет зависимости от libstdc++.dll и libgcc_s_dw2-1.dll. Первая была собрана с родным gcc, вторую придется скопировать из старого mingw. Как вариант можно пересобрать gmp в новом gcc для избавления от завимисотей.
Для уменьшения размера можете смело поудалять ненужные папки. Например share/doc.

Почти все. Для комфортной работы нам надо еще собрать make.

MAKE

tar -xjf distrib/make-3.82.tar.bz2 && cd make-3.82
./configure —disable-nls —with-libiconv-prefix=’/mingw’ CFLAGS=’-s -O2′ CPPFLAGS=’-s -O2′ &>config.my.log
make -j4 &>make.my.log
cp make.exe /c/mbuild/release/bin/mingw32-make.exe

Теперь все. в папочке C:\mbuild\release получили свой аккуратный mingw. Добавляем пакетов по вкусу, оборачиваем в аккуратный скрипт и получим что-то вроде nuwen mingw. Удачных сборок!

Постскриптум: Скачанный нами пакет mingw кроме того содержит:

  • mingw32-autoconf
  • mingw32-automake
  • mingw32-autotools
  • mingw32-basic-dsdtar
  • mingw32-bzip2
  • mingw32-cygutils
  • mingw32-expat
  • mingw32-gdb
  • mingw32-gendef
  • mingw32-gettext
  • mingw32-libarchive
  • mingw32-libtool
  • mingw32-mingw-get
  • mingw32-mingw-utils
  • mingw32-package-list
  • mingw32-pdcurses
  • mingw32-pexports
  • mingw32-popt
  • mingw32-pthreads-w32
  • mingw32-xz

Содержание

  1. MinGW — c и c++ компилятор для Windows
  2. Войдите в MinGW
  3. Настройка процесса сборки
  4. С make
  5. С CMake
  6. Особенности библиотек
  7. А как насчет этих зависимостей?
  8. Библиотеки DLL
  9. Космодром на коленке
  10. пятница, 19 июня 2009 г.
  11. Установка MinGW
  12. Национальная библиотека им. Н. Э. Баумана Bauman National Library
  13. Персональные инструменты
  14. MinGW (Minimalist GNU for Windows)
  15. Содержание
  16. История
  17. Поддержка языков программирования
  18. Компоненты MinGW
  19. Сравнение с Cygwin
  20. MinGW-w64
  21. Установка
  22. Сборка Mingw в Windows своими руками
  23. Cygwin или MinGW? Собираем программы для Windows без Windows
  24. Содержание статьи
  25. GNU и Windows
  26. Cygwin
  27. MinGW и MSYS
  28. Ставим MinGW
  29. Hello World
  30. Продолжение доступно только участникам
  31. Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
  32. Сборка mingw в windows

MinGW — c и c++ компилятор для Windows

Если говорить о релизах современных видеоигр, то всегда возникает вопрос о многоплатформенной поддержке. Когда вы создаете браузерную игру, браузер — это ваша платформа, и вы действительно не беспокоитесь об ОС под ней. При использовании популярного движка вы можете проверить, работают ли различные версии, но вы все еще в основном полагаетесь на способность оригинальных разработчиков заставить его работать на всех платформах.

Но все совершенно по-другому, когда ваша игра работает без движка или использует движок вашего собственного производства. Вы должны сами позаботиться о том, чтобы программа работала нормально на тех платформах, которые вы хотите поддерживать. Но еще до запуска есть вопрос сборки – вы должны фактически скомпилировать программу для целевой платформы.

Одним из способов сделать это, конечно, является наличие машины, работающей на указанной платформе (возможно, в режиме мультизагрузки), которая поставляется со своим собственным набором неприятностей. Другое решение — кросс – компиляция, и именно это я вкратце опишу здесь.

Войдите в MinGW

Для кросс-компиляции программ на C / C++ большинство разработчиков используют MinGW – минималистичный GNU для Windows, который, как следует из названия, представляет собой набор программ (порты gcc, gdb и т. Д.), заголовков и статических библиотек, позволяющих кросс-компиляцию материала для MS Windows на других платформах.

Настройка среды MinGW с нуля может быть утомительной, но, к счастью, самый популярный дистрибутивный пакет MinGW сам по себе и порты MinGW некоторых библиотек находятся в их репозиториях. Установить компилятор MinGW из дистрибутива так же просто, как и любое другое программное обеспечение.

# При установке на 64-битную Windows

# При установке на 32-битную Windows

Настройка процесса сборки

Как только вы установили компилятор, пришло время взглянуть на ваш собственный проект и его систему сборки.

С make

Если вы используете make для управления процессом сборки, то, скорее всего, ваш Makefile уже отлично работает для кросс-компиляции, и вам не нужно будет вносить никаких изменений.

В принципе, на этом этапе есть два требования:

Если вы используете жестко закодированное имя компилятора или флаги, то пришло время отредактировать файл Makefile и привести его в форму. Как только все это будет сделано, просто укажите флаги кросс-компилятора MinGW и специфичного для Windows компоновщика, и все готово.

# Для 64-битных сборок

# Для 32-битных сборок; аналогично приведенному выше, отличается только имя компилятора

user$ CC=i686-w64-mingw32-gcc LDLIBS=-lmingw32 make [args…]

Если вы компилируете C++, а не C, вы захотите использовать переменную CXX и …компилятор mingw32-gcc-g++.

С CMake

При использовании CMake вам нужно будет внести одно небольшое изменение в ваш CMakeLists.txt: то есть добавление библиотеки mingw32 в вашуtarget_link_libraries(). Вы можете посмеяться над этим и сказать: «О, я могу просто использовать — DCMAKE_EXE_LINKER_FLAGS», но проблема с использованием этой переменной заключается в том, что при вызове компилятора содержимое переменной помещается перед именами объектов, например:

Поскольку порядок аргументов важен для компоновщика (библиотеки должны следовать за объектами, которые ссылаются на них), сборка, скорее всего, завершится неудачей с большим количеством ошибок «неразрешенной ссылки».

При указании библиотек через target_link_libraries () команда строится с именами библиотек, следующими за именами объектов, и все заканчивается прекрасно и денди. Как только вы внесете указанное изменение, продолжайте запускать CMake с помощью файла MinGWtoolchain.

# Для 64-битных сборок; другие дистрибутивы могут поместить файл toolchain под другой путь

# Для 32-битных сборок; то же самое, что и выше, но с использованием 32-битного профиля

# Как только файлы сборки будут сгенерированы с помощью правильного файла toolchain,
# вам больше не нужно ссылаться на него, и вы можете просто выполнить обычную сборку

Если вам кажется, что ваш дистрибутив не предоставляет готовый файл toolchain, вы можете попробовать взять его из Fedora и соответствующим образом отредактировать

Особенности библиотек

В зависимости от используемых библиотек могут потребоваться некоторые дополнительные шаги. Например, при использовании SDL2 вам также нужно будет добавить библиотеку SDL2main к флагам компоновщика. Причина этого заключается в том, что в MS Windows существует строгое разделение между «консольными» и «ГРАФИЧЕСКИМИ» программами – первые всегда порождают cmd.exe window (оболочка MS Windows), где они выполняют свой stdin/stdout IO, в то время как у вторых этого нет.

В то время как консольные программы начинают свое выполнение с функции main (), графические программы обычно начинают свое выполнение с функции WinMain ().

Чтобы избавить вас от необходимости иметь две версии вашей основной функции, статическая библиотека SDL2main предоставляет свою собственную реализацию WinMain(), которая выполняет некоторый дополнительный код инициализации SDL, а затем вызывает вашу основную функцию ().

Этот подход обычно встречается в других библиотеках – например, библиотеки программирования игр Allegro и SFML предоставляют свои соответствующие статические библиотеки allegro_main и sfml-main.

А как насчет этих зависимостей?

Написание игры с использованием собственного движка уже является мазохизмом, поэтому, если вы не пытаетесь достичь новых крайностей и используете только собственные API, ваша игра, вероятно, зависит от какой-то популярной мультимедийной библиотеки, такой как Allegro, SDL или SFML. Чтобы успешно скомпилировать вашу игру для MS Windows, вам также нужно позаботиться об этом.

Простой способ: установка зависимостей из дистрибутива репо

Если вам посчастливилось и весь ваш набор зависимостей имеет версии MinGW, доступные в менеджере пакетов, то просто установите что-нибудь из репозитория, и все будет в порядке.

Способ средней сложности: установка предварительно скомпилированных зависимостей вручную

Хотя описанный выше сценарий, безусловно, самый простой, обработка зависимостей не так уж и сложна, если их авторы предоставляют файлы разработки MinGW. Например, рассмотрим библиотеку Аллегро. Релизы на GitHub содержат множество загружаемых вариантов каждой версии, среди которых есть наборы MinGWdev. Если вы загрузите один из них (выберите тот, который подходит для вашей цели кросс-компиляции) и распакуете архив, вы увидите такую структуру каталогов:

Сложный способ: компиляция зависимостей из исходного кода

В конце списка находится, конечно же, компиляция зависимостей из исходного кода. Хотя это и отнимает много времени, но все же относительно легко, так как вам просто нужно применить описанный выше подход к каждой нужной вам библиотеке.

По моему опыту, самая трудная часть компиляции всей цепочки зависимостей-это настройка каждого файла Makefile / CMakeLists.txt когда вы идете, чтобы заставить каждую библиотеку распознавать, где находятся ее зависимости – хотя вы можете избежать этого, установив каждую скомпилированную библиотеку в корневой каталог MinGW (если вы не возражаете против беспорядка, то есть).

Библиотеки DLL

Как только вы скомпилируете свою игру, последнее, что вам остается сделать, — это упаковать и опубликовать ее. Но для правильной работы исполняемого файла вам понадобятся все библиотеки DLL, от которых он зависит. Чтобы узнать, какие общие объекты динамически загружаемые библиотеки необходимы, вы можете использовать программу objdump:

Теперь, когда вы знаете, какие библиотеки DLL необходимы, вам нужно найти и скопировать их. Если вы хотите сделать это вручную, имейте в виду, что библиотеки DLL могут зависеть от других библиотек DLL, поэтому захвата только прямых зависимостей EXE-файла вашей игры может быть недостаточно. Если вы ищете простой, автоматизированный способ, вы можете использовать copydeps, небольшую программу на Python, которая отлично подходит именно для этой цели.

Источник

Космодром на коленке

пятница, 19 июня 2009 г.

Установка MinGW

Ниже я перечислю основные особенности MinGW и опишу несколько способов для его установки.

Для начала перечислю важные (на мой взгляд) особенности MinGW. 😉

Основные достоинства:
+ полностью бесплатен;
+ генерирует хороший быстрый код;
+ непрерывно развивается;
+ удобство и компактность установки.

Основные недостатки:
— Относительно медленная компиляция C++ кода;
— Относительно медленная линковка результирующего файла;
— Несовместимость с, содержащими C++ классы, *.lib и *.dll файлами созданными в MS Visual Studio. По этой причине MinGW и PhysX SDK не дружат друг с другом..

Для того чтобы заполучить на свой компьютер готовый к работе MinGW, существует несколько способов.

Способ 1- использовать автоматический установщик с официального сайта MinGW.
Установщик официальной версии MinGW следует искать на сайте http://mingw.org/
На момент написания этих строк файл установщика называется «MinGW-5.1.4.exe» и его можно загрузить со страницы загрузки.
Установщик состоит из одного файла «MinGW-5.1.4.exe» и имеет мизерный разер (

140 KB). Непосредственно при установке он выкачивает дополнительные архивы с компонентами GCC. По умолчанию MinGW ставиться в папку «c:\mingw» Перед установкой рекомендую поместить «MinGW-5.1.4.exe» в отдельную пустую папку, т.к. все выкаченные архивы кэшируются в папке откуда запущена установка. Если ничего не удалять, то можно все это добро скопировать и устанавливать без интернета, запуская все тот же «MinGW-5.1.4.exe».

Следует отметить, что при установке через «MinGW-5.1.4.exe», можно выбрать версию Mingw (Previous, Current, Candidate), инсталлятор регистрирует установку в системе и предоставляет возможность обновления и удаления текущей установки.
Если MinGW ставится для работы с Code::Blocks, то при установке рекомендую выбрать версию «Candidate», а среди устанавливаемых компонентов должны быть обязательно отмечены «MinGW base tools», «g++ compiller» и «MinGW Make».

gdb-6.8-mingw-3.tar.bz2
mingw32-make-3.81-2.tar.gz
binutils-2.18.50-20080109-2.tar.gz
gcc-g++-3.4.5-20060117-3.tar.gz
w32api-3.13-mingw32-dev.tar.gz
mingwrt-3.15.2-mingw32-dev.tar.gz
gcc-core-3.4.5-20060117-3.tar.gz

Не нужно даже прибегать к запуску инсталлятора, достаточно просто разархивировать все архивы в одну папку. Для распаковки можно воспользоваться замечательным бесплатным архиватором 7-zip (http://www.7-zip.org/).

И еще, отладчик gdb (который будет очень кстати при работе в среде Code::Blocks) придется качать отдельно в секции загрузки http://mingw.org

Примером может служить пакет MinGW С++ Toolbox предлагаемый (в связке с Code::Blocks 😉 в качестве альтернативного инструментария для сборки и работы с движком рендеринга Ogre. Никаких специфических ограничений и заточек под Ogre в нем нет, и я давно использовал его просто как удобный «все-в-одном» инсталлятор MinGW. Все было замечательно. 🙂 Но однажды случилось страшное.. В очередной раз решив собрать свежий Ogre, потыкать примеры и заставить себя чего-нибудь на нем слепить, я обнаружил что исходники относительно недавно вышедшего Ogre 1.6.2 у меня просто не собираются этим пакетом инструментов (требуется обновление w32api до версии 3.13). К слову, установка MinGW версии Candidate первым способом позволила решить эту проблему. 😉 Хотя данный пакет в целом не плох и ранее всегда справлялся со своими задачами. Если требуется компактный инсталлятор со стабильным MinGW для общих задач, то можно со спокойной душой качать MinGW_Toolbox_Setup_wr1 c ogre3d.org. Будем наедятся что актуальная версия этого пакета появится в скором времени.

Если поискать, то в интернете, можно найти и другие сборки MinGW от энтузиастов. Как правило это просто само-распаковывающихся архивы.

Думаю на сегодня хватит про MinGW.

В ближайшее время постараюсь (как и обещал ранее) написать про установку ночных сборок Code::Blocks и их первичную настройку.

Источник

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

MinGW (Minimalist GNU for Windows)

MinGW (Minimalist GNU for Windows), ранее mingw32 — бесплатная среда разработки родных приложений под Microsoft Windows с открытым исходным кодом. Состоит из портированного GNU Compiler Collection, GNU Binutils (ассемблер, компоновщик, менеджер архивации), GNU Debugger, набора свободно распространяемых библиотек импорта и заголовочных файлов для Microsoft Windows API и прочего.

MinGW не нуждается в DLL-слое совместимости, и поэтому, если в программе не используется лицензия GPL, программы не обязательно распространять вместе с исходным кодом.

MinGW может использоваться как на своей родной платформе Microsoft Windows, так и на UNIX-подобных и на Cygwin

Также, другими авторами в качестве альтернативы MinGW, был разработан компилятор MinGW-w64, который поддерживает 64-х битные системы. Сначала он был предложен на рассмотрение для интеграции с оригинальным проектом MinGW, но был отклонен в связи с подозрением на использование несвободного кода. В дальнейшем, разработчики MinGW-w64 отказались от дальнейшего сотрудничества с MinGW.

Содержание

История

Изначально MinGW назывался mingw32, но впоследствии от этого названия отказались, чтобы подчеркнуть, что MinGW не ограничен 32-битными системами. Первый релиз, созданный Колином Петерсом в 1998 году, включал в себя только порт GCC из Cygwin. Ян-Яап ван дер Хайден создал первый нативный Windows-порт GCC, добавив также binutils и make. Мумит Кхан позже принял участие в разработке, добавив в комплект больше специфичных для Windows возможностей, включая заголовочные файлы Win32, написанные Андершом Нурландером. Чтобы получить большую поддержку общественности и централизовать разработку, в 2000 проект был перемещён на SourceForge.net, где в сентябре 2005 был выбран проектом месяца.

Поддержка языков программирования

Большинство языков, которые поддерживаются GCC, поддерживаются и в MinGW. Среди них C, C++, Objective-C, Objective-C++, Fortran и Ada. Также используются библиотека из GCC (libstdc++ for C++, libgfortran for Fortran, др.)

Необходимо отметить, что GCC не включает в себя библиотеку языка C. По умолчанию MinGW подключается к предоставляемой Windows библиотеке MSVCRT, к которой так же подключался Microsoft Visual Studio 6.0 1998 года. Библиотека не поддерживает стандарт C99, так как его ещё не существовало к моменту выпуска MSVCRT. Стандарт C89 поддерживается, однако не полностью. MSVCRT не изменялась в течение многих лет, и в будущем каких-либо изменений не ожидается. Новые версии Visual Studio используют новые исполняемые библиотеки, однако они не всегда предоставляются операционной системой или не являются свободно распространяемыми, что затрудняет работу с открытым программным обеспечением.

По причине использования MSVCRT, MinGW имеет множество ограничений и особенностей с совместимостью как и Microsoft Visual Studio 6.0. При разработке не следует полагаться на C99, только на C89. К примеру, новый формат символов в printf %a и %ll не поддерживается (хотя для последнего существует обходное решение).

Разработчики MinGW пытались разрешить подобные проблемы во вспомогательной библиотеке mingwex (или более точно libmingwex). Сейчас она достаточно далека от совершенства и, вполне вероятно, что работа над ней останется незавершённой. Для примера, добавление поддержки %a в ранее упомянутый, printf потребовало бы полное изменение устройства функции. Использование библиотеки glibc не помогло в решении проблемы из-за её лицензии. [Источник 2] Однако, проблема разрешилась в MinGW-w64, где к тому же обеспечивается полной соответствие стандартам POSIX.

Компоненты MinGW

Сравнение с Cygwin

MinGW является форком от Cygwin версии 1.3.3. Несмотря на то, что и Cygwin, и MinGW используются для портирования программного обеспечения Unix под Windows, они используют разный подход: цель Cygwin — предоставить полный слой POSIX, включающий в себя реализацию всех основных системных вызовов и библиотек системы UNIX, жертвуя производительностью там, где это необходимо для совместимости. Целью MinGW является предоставление нативной функциональности и производительности посредством прямых вызовов Windows API. В отличие от Cygwin, MinGW не нуждается в DLL-слое совместимости и, таким образом, программы не обязаны распространяться с исходным кодом. Программы под Windows, написанные с Cygwin, должны запускаться поверх копилефтной библиотеки совместимости, которая должна распространяться с программой, а также с исходным кодом программы.

Комбинация MinGW и MSYS предоставляет небольшую независимую среду, которая может быть загружена на съемные носители, не требуя добавления записей в файлы реестра. Cygwin, предоставляя бо́льшую функциональность, является более сложным для установки и поддержки.

Также возможна кросс-компиляция приложений Microsoft Windows с MinGW-GCC под управлением операционных систем семейства POSIX. Это означает, что разработчику не нужно устанавливать Windows с MSYS, чтобы скомпилировать программы, которые будут запускаться под Microsoft Windows без Cygwin.

MinGW-w64

В связи с тем, что в рамках изначального проекта MinGW не обещалось, что в его кодовую базу будут вноситься обновления, связанные с добавлением некоторых новых ключевых элементов Win32 API, а также наиболее необходимой поддержки 64-битной архитектуры, был создан проект MinGW-w64. Он является новой чистой реализацией портирования GNU Compiler Collection (GCC) под Microsoft Windows, осуществленной изначально компанией OneVision и переданной в 2008 году в общественное пользование (Public Domain). Сначала он был предложен на рассмотрение для интеграции с оригинальным проектом MinGW, но был отклонен в связи с подозрением на использование несвободного или проприетарного кода. По многим серьезным причинам этического характера, связанным с отношением со стороны авторов MinGW, ведущие разработчики кода MinGW-w64 решили больше не пытаться кооперироваться с проектом MinGW.

MinGW-w64 обеспечивает более полную реализацию Win32 API, включая:

Установка

Сборка Mingw в Windows своими руками

Зачем собирать mingw самому?

Источник

Cygwin или MinGW? Собираем программы для Windows без Windows

Содержание статьи

В общем-то, даже в Microsoft уже признали проблему и сделали WSL (Windows Subsystem for Linux), чтобы запускать те приложения, у которых нативных версий под Windows нет. Однако если ты хочешь сделать свою программу доступной для широкой аудитории, то WSL вовсе не панацея, поскольку у среднего пользователя эта система вряд ли установлена и у нативных приложений возможностей для интеграции с Windows все равно больше.

Во многих случаях камень преткновения — не сам код программы, а система сборки. Если ты используешь кросс-платформенные библиотеки и не вызываешь специфичные функции POSIX, портирование может вообще не требоваться. Главное — собрать исполняемые файлы.

GNU и Windows

Для сборки программ с помощью GNU toolchain на Windows часто используют два проекта: Cygwin и MinGW + MSYS. У них схожие цели, но разные детали реализации. Давай разбираться.

Cygwin

Cygwin — самая полная реализация окружения GNU для Windows. Он предоставляет большую часть POSIX API в виде библиотеки, что позволяет собирать программы из UNIX без портирования, если только им не требуется семантика UNIX. Яркий пример — демоны, им нужен fork() и сигналы, которых нет в Windows, да и службы Windows устроены совсем иначе.

Кроме библиотеки, дистрибутив содержит набор классических команд UNIX и терминал. Реализации команд используют эту библиотеку и поддерживают некоторые возможности UNIX, такие как регистрозависимые имена файлов.

Целевой способ использования: если нет желания или возможности портировать программу на Windows или использовать только платформенно независимые API, ее можно собрать «под Cygwin», ценой зависимости от cygwin1.dll и относительной изоляции от всей остальной системы.

MinGW и MSYS

Если цель Cygwin — сделать возможной сборку немодифицированных приложений на Windows ценой внешней зависимости, то цель MinGW + MSYS — производить приложения без внешних зависимостей.

MinGW и MSYS — это независимые пакеты, но их часто путают и смешивают друг с другом (а часто путают и с Cygwin). Можно сказать, что MinGW — это эквивалент GCC и binutils, а MSYS — расширенный эквивалент coreutils.

Начнем с MSYS. MSYS — это более «нативная» и легковесная альтернатива Cygwin. Этот пакет включает библиотеку с реализациями функций POSIX, но она предназначена для внутреннего пользования, и авторы категорически не рекомендуют связывать с ней свои приложения.

Библиотека MSYS не реализует UNIX поверх Windows, а следует соглашениям Windows — к примеру, сознательно не учитывает регистр букв в путях к файлам. Главная цель MSYS — предоставить нужные для скриптов сборки программы вроде Bourne shell, make и прочее, что обычно требуется для autotools.

MinGW содержит версии GCC и binutils (ассемблер as, компоновщик ld и так далее), которые производят исполняемые файлы для Windows в формате PE/COFF. Здесь мы и подходим к ключевому моменту: MinGW, как и все остальные части GNU toolchain, такой же платформенно независимый проект.

Кросс-компиляция в GNU toolchain уже давно обычное дело, и в GCC целевая платформа и хост независимы друг от друга. Можно запускать GCC на Linux для x86 и собирать программы для Linux на ARM, или наоборот. Совпадать не обязаны не только рабочая и целевая архитектуры процессора. Точно так же не обязаны совпадать даже ОС и формат исполняемого файла.

Ставим MinGW

Авторы многих дистрибутивов GNU/Linux уже постарались за нас, так что многие кросс-версии GCC, включая MinGW, можно поставить из репозиториев.

MinGW-w64, несмотря на название, поддерживает и Win32, и Win64. Это форк MinGW, который создали в первую очередь для реализации недостающей в оригинальном проекте поддержки Win64, отсюда и название.

Hello World

Тестирование кросс-компилированных программ для других архитектур — непростая задача, но, поскольку наша целевая платформа — Windows на x86, мы легко можем протестировать их в Wine:

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Источник

Сборка mingw в windows

Давайте разберемся, что такое MinGW, а что такое MSYS и для чего они нужны.

MinGW – сокращение от “Minimalist GNU for Windows”, по своей сути MinGW является небольшой и лаконичной средой разработки нативных приложений для семейства OS Microsoft Windows.

MinGW предоставляет полный набор Open Source инструментов для программирования, который подходит для разработки нативного Windows приложения, которое не будет зависеть от C-Runtime библиотек каких-либо третьих сторон.

MinGW поддерживает идею минимализма, поэтому он никогда не будет полностью поддерживать среду исполнения POSIX, для развертывания POSIX приложений на Windows, для их полной поддержки существует Cygwin. В первую очередь MinGW предназначен для использования разработчиками, которые привыкли работать с компилятором gcc.

MinGW включает в себя:

MSYS – сокращение от “Minimal SYStem”, это порт командной оболочки Bourne Shell (sh) для Windows. Он предлагается в качестве альтернативы “cmd.exe” от Microsoft’а. Оболочка хорошо подходит для портирования существующих приложений и библиотек, которые есть в *nix системах и включает в себя небольшой выбор портов инструментов Unix, облегчающих задачу портирования.

Комбинация MinGW и MSYS предоставляет разработчикам небольшую независимую среду, которая может быть легко загружена на съемные носители, не требуя добавления записей в файлы реестра.

Далее набираем в консольном окне такие команды:

И в итоге получаем исполнительный файл “GLUT-Req.exe”. Обратите внимание на:

Без установки этих переменных CMake не видит библиотеку GLUT.

Из названий переменных все должно быть понятно:

Каталог с исходниками можно оставить в чистом состоянии. Для этого следует перейти в сборочный каталог (в данном случае “build_project”) и разверенуть в него дерево исходного кода с последующей генерацией Makefile’ов. Пример:

В аргумент “build” необходимо прописать путь до каталога с исходным кодом, который нужно оставить чистым. После выполнения команды в каталоге “build_project/” создастся полная копия дерева проекта и в этом каталоге можно будет выполнять дальнейшую сборку.

1.4.2.4. Кросскомпиляция с помощью CMake.

В папке с проектом создаем файл с расширением “.cmake”, например, “Toolchain-eldk-ppc74xx.cmake”, с подобным содержимым:

И конфигурируем проект:

Если переменная “CMAKE_FIND_ROOT_PATH_MODE_PROGRAM” установлена в NEVER, то будут использоваться инструменты из недр вашей системы. Если она установлена в ONLY, то будут использованы инструменты из каталога “CMAKE_FIND_ROOT_PATH/bin”. В этом случае следует быть осторожным, так как из поля видимости CMake пропадают некоторые кросс-утилиты из состава binutils, например tuple-ar и tuple-ranlib. Решить эту поблему можно с помощью создания симлинков на эти инструменты. Симлинки следует расположить в директорию “CMAKE_FIND_ROOT_PATH/bin”. В противном случае, при сборке проекта может возникать следующая ошибка:

Подробнее можно прочесть тут: CMake Cross Compiling

1.4.3 Что почитать про CMake? (литература):

Источник

Наверное, многие разработчики сталкивались с проблемой выбора или создания окружения для программирования. На мой взгляд, бесплатное окружение на основе порта компилятора gcc (MinGW) и какая-нибудь IDE, совместимая с ним – наиболее приемлемый выбор.

В этой статье я рассмотрю установку компилятора, его интеграцию с интегрированной средой разработки, его настройку, установку и компиляцию сторонних библиотек. Рассмотрю некоторые полезные утилиты для облегчения сборки исходного кода и системы контроля версий файлов.

Статья со временем будет обновляться и дополняться.

Данный мануал создавался с целью быть пособием и заметкой для разработчиков, помочь им собрать и настроить собственное окружение для разработки нативных приложений в семействе OS Windows.

Содержание:

1. Установка и настройка тулчейна MinGW/MSYS и дополнительного ПО

Давайте разберемся, что такое MinGW, а что такое MSYS и для чего они нужны.

MinGW – сокращение от “Minimalist GNU for Windows”, по своей сути MinGW является небольшой и лаконичной средой разработки нативных приложений для семейства OS Microsoft Windows.

MinGW предоставляет полный набор Open Source инструментов для программирования, который подходит для разработки нативного Windows приложения, которое не будет зависеть от C-Runtime библиотек каких-либо третьих сторон.

MinGW поддерживает идею минимализма, поэтому он никогда не будет полностью поддерживать среду исполнения POSIX, для развертывания POSIX приложений на Windows, для их полной поддержки существует Cygwin. В первую очередь MinGW предназначен для использования разработчиками, которые привыкли работать с компилятором gcc.

MinGW включает в себя:

  • Порт GNU Compiler Collection (GCC), который включает в себя компиляторы таких языков, как: C, C++, ADA и Fortran.
  • Порт GNU Binutils для Windows (as, ld, ar)
  • Консольный установщик (mingw-get) для MinGW и MSYS
  • Графический установщик (mingw-get-inst)

MSYS – сокращение от “Minimal SYStem”, это порт командной оболочки Bourne Shell (sh) для Windows. Он предлагается в качестве альтернативы “cmd.exe” от Microsoft’а. Оболочка хорошо подходит для портирования существующих приложений и библиотек, которые есть в *nix системах и включает в себя небольшой выбор портов инструментов Unix, облегчающих задачу портирования.

Комбинация MinGW и MSYS предоставляет разработчикам небольшую независимую среду, которая может быть легко загружена на съемные носители, не требуя добавления записей в файлы реестра.

Полезные ссылки:

Официальный сайт MinGW

Вики по MinGW [ENG]

<< Перейти к содержанию

1.1. Устанавливаем MinGW, оболочку MSYS и настраиваем окружение

1.1.1. Скачиваем официальный онлайн-установщик MinGW, на данный момент последняя версия установщика 20120426: mingw-get-inst-latest.exe

Запускаем установщик, нажимаем “Next”, “Next”, выбираем “Use pre-packaged repository catalogues”:

Жмем “Next” и соглашаемся с лицензией, снова “Next”, и теперь выбираем путь для установки:

Рекомендуется выбирать путь без пробелов, лучше всего устанавливать MinGW в корень диска, т.е в “C:MinGW”. Я выбрал “C:QtMinGW”, так удобнее будет подключить MinGW к IDE QtCreator. Если вы планируете дальше интегрировать свой тулчейн в какую-нибуть IDE, сделайте аналогично и нажмите “Next”. Необходимость наличия группы ярлыков в меню “Пуск” – по вашему желанию. Но можно не создавать (отметив галочкой “Don’t create a Start Menu folder) и нажать “Next”.

Выбираем следующие пакеты:

  • C Compiler
  • C++ Compiler
  • MSYS Basic System
  • MinGW Developer ToolKit

и жмем “Next”

затем подтверждаем установку выбранных пакетов кнопкой “Install”.

Откроется консольное окно, в котором будет отображаться процесс скачивания и установки пакетов. Проследите, чтобы процесс выполнялся без ошибок (например, если будут недоступны сервера репозитория, необходимо повторить попытку установки с этими же параметрами позже) и дождитесь завершения процесса.

Теперь необходимо добавить в переменную окружения PATH путь до директории “C:QtMinGWbin”. Делается это следующим образом (для Win7, для остальных систем по аналогии):

1.1.1.1. Нажмите правой клавишей мышки на ярлык “Компьютер” и кликните на пункт меню “Свойства”.

1.1.1.2. Кликните слева на пункт “Дополнительные параметры системы”, в появившемся окне нажмите кнопку “Переменные среды”.

1.1.1.3. В верхнем списке переменных найдите переменную “Path”, кликните на нее два раза для редактирования.

1.1.1.4. Добавьте путь до директории “bin”. В моем случае это будет “C:QtMinGWbin”, разделение путей выполняется символом “;”.

1.1.1.5. Подробнее можно прочесть здесь.

Все, тулчейн MinGW и его оболочка MSYS установлены. Теперь можно перейти к установке дополнительных программ, которые помогут облегчить нам жизнь.

1.1.2. Установка дополнительных пакетов и полезные команды и утилиты.

Сразу после установки MinGW и MSYS будет полезно установить некоторые пакеты.

Для этого запускаем файл “C:QtMinGWmsys1.0msys.bat”, для которого, кстати, полезно будет создать ярлык, и набираем там такие команды (переход на новую строку аналогичен нажатию клавиши “Enter”):

mingw-get install msys-man
mingw-get install msys-wget
mingw-get install msys-zip
mingw-get install msys-unzip
mingw-get install msys-bzip2
mingw-get install msys-perl

Команда “mingw-get install” аналогична популярной на разных Linux-дистрибутивах, наверное, знакомой многим, команде “apt-get install”. Обе эти команды скачают и установят вам нужный пакет из репозиториев.

Список доступных пакетов для установки можно посмотреть по команде “mingw-get show”, для лучшего восприятия его можно отсортировать следующим образом:

mingw-get show | grep "Package: "

Удалить установленный пакет можно командой “mingw-get remove выбранный_вами_пакет”

Обновить пакет можно командой “mingw-get upgrade выбранный_вами_пакет”, команда “mingw-get upgrade” обновит все пакеты вашего тулчейна полностью.

На этом базовая настройка тулчейна закончена, можно приступить к сборке/переносу проектов или более тонкой настройке.

1.1.3. Какие утилиты будет полезно использовать вместе с MinGW?

Для редактирования исходников и других файлов можно использовать консольный редактор “vim”, который идет в комплекте с MinGW’ом.

Но если вы привыкли к оконному интерфейсу, воспользуйтесь отличнейшим редактором – Notepad++.

Для распаковки содержимого архивов можно использовать консольные команды или архиваторы с GUI, такие как WinRar, например.

Лично я рекомендую использовать 7-zip.

1.1.4. Что можно почитать?

Список литературы можно найти здесь: http://www.linuxcenter.ru/

Основы работы в консоли

Интерпретатор командного языка shell

Самые необходимые команды *nix для обработки ввода/вывода

Совет по поводу определения fstab

<< Перейти к содержанию

1.2. Настройка MinGW/MSYS: используем продвинутую консоль, вместо msys.bat

Возможно многим разработчикам стандартный шел, вызываемый по “msys.bat” покажется унылым и скучным:

Еще бы, работать в такой консоли достаточно неудобно, хотя бы из-за отсутствия нормального копипаста.

Но к счастью, есть такой проект как ConEmu от Maximus5‘а, являющийся продвинутым форком ConEmu by Zoin.

ConEmu – это очень удобный и симпатичный терминал, поддерживающий вкладки. Его подробнейшее описание, написанное самим автором этой программы, можно прочитать здесь. Самым главным преимуществом для меня является нормальный копипаст. Здесь он реализован просто замечательно, с помощью левой кнопки мышки или сочетания “Alt + Левая кнопка мышки” можно выделить блок или строку в консоли соответственно. После выделения строка сразу автоматом скопируется в буфер. Сочетание клавиш “Ctrl + V” или клик левой клавишей мышки вставляет первую строку из буфера, а “Shift + Insert + Enter” вставляет сразу все строки.

Для связки ConEmu и MinGW, нам необходимо скачать специально подготовленные пакеты ConEmu для MinGW. Установка весьма проста и тривиальна – нужно лишь распаковать “-mingw32” и “-mingw64” пакеты в корневую папку компилятора (в моем случае это “C:QtMinGW”).

Если вы не хотите настраивать консоль, можете скачать уже настроенную мной:

Скачать ConEmu.zip, 1.7 MB

Выглядит она следующим образом (изображение кликабельно):

И устанавливается абсолютно аналогично.

На мой взгляд панелька в стиле терминала Quake, выезжающая сверху экрана по нажатию “Ctrl + ~”, не только эффектно выглядит, но и очень удобна в использовании.

При желании, конечно, можно все очень и очень гибко настраивать под себя, программа ConEmu имеет множество настроек и совместима со всеми последними OS семейства Windows.

<< Перейти к содержанию

1.3. Компиляция и установка утилиты pkg-config

Официальный сайт pkg-config: http://pkg-config.freedesktop.org/

pkg-config это утилита, которая предоставляет общий интерфейс для получения информации об установленных в системе программных библиотеках с целью компиляции программ из исходного кода.

В нашем случае она нужна для компиляции некоторых библиотек и проектов.

1.3.1. Скачиваем последнюю версию исходников pkg-config’а, на момент написания статьи это 0.28: pkg-config-0.28.tar.gz

1.3.2. Распаковываем архив в папку “C:Qtbuild”, исходники pkg-config’а должны быть в папке “C:Qtbuildpkg-config-0.28”.

1.3.3. Компилируем pkg-config и библиотеку GNU C Library (glibc), идущую в комплекте:

Запускаем “C:QtMinGWmsys1.0msys.bat” или ConEmu и набираем в консольном окне такие команды:

Кстати, небольшой, но полезный совет! Если у вас многоядерный процессор, то при вызове утилиты make можно воспользоваться ключом “-jX”, где X – число одновременно выполняемых потоков компиляции, которое зависит от количества ядер процессора n. Обычно рекомендуется брать X = n + 1, но если процессор поддерживает технологию Hyper-threading, то число потоков следует брать X = 2 · N + 1. То есть команды компиляции для двухъядерного процессора будут следующими: “make -j3” и “make -j3 install”. Благодаря распараллеливанию компиляции время сборки крупных проектов значительно сокращается.

export CFLAGS="-march=native"
cd /c/Qt/build/pkg-config-0.28
./configure --with-internal-glib --prefix=/mingw
make
make install
export -n CFLAGS

Утилита и библиотека скомпилировались и установились.

1.3.4. Чтобы обойти ошибку в MSYS, следует выполнить в консоли блок таких команд:

cat > /mingw/bin/pkg-config.sh << "EOF"
#!/bin/sh
if pkg-config "$@" > /dev/null 2>&1 ; then
res=true
else
res=false
fi
pkg-config "$@" | tr -d \r && $res

EOF

Это создаст файл “pkg-config.sh” в папке “C:QtMinGWbin”

1.3.5. Теперь нужно сделать скрипт исполнительным и добавить переменную в альтернативное окружение:

chmod ugo+x /mingw/bin/pkg-config.sh && 
echo "PKG_CONFIG=/mingw/bin/pkg-config.sh" >> /etc/profile.local && 
echo "export PKG_CONFIG" >> /etc/profile.local

1.3.6. Когда вам понадобится альтернативное окружение, вы всегда можете подгрузить его командой:

source /etc/profile.local

<< Перейти к содержанию

1.4. Установка CMake, примеры использования

Официальный сайт CMake: http://www.cmake.org

CMake (cross platform make) – это кроссплатформенная система автоматизации генерации файлов для сборки программного обеспечения из исходного кода.

CMake не занимается непосредственно сборкой исходных кодов, он лишь генерирует файлы для управления сборкой проекта из файлов “CMakeLists.txt”. Это могут быть:

  • Обычные Makefile, которые используются в системах Unix для сборки с помощью утилиты make;
  • Файлы projects/workspaces (*.dsp/*.dsw) в системах Windows для сборки с помощью Microsoft Visual C++;
  • Проекты XCode в Mac OS X.

1.4.1 Установка CMake:

1.4.1.1. Скачиваем установочный пакет CMake с официального сайта (последняя версия на момент написания статьи – 2.8.10.2): cmake-2.8.10.2-win32-x86.exe

1.4.1.2. Сохраняем установочный пакет в любое удобное для вас место и запускаем “cmake-2.8.10.2-win32-x86.exe”.

1.4.1.3. Щелкаем “Далее”, соглашаемся с лицензией, выбираем пункт “Add CMake to the system PATH for all users”

Эта опция установит в переменную окружения PATH ту папку, в которой будет установлен CMake.

Ярлык создаем по желанию, щелкаем “Далее”.

1.4.1.4. Выбираем папку, в которую будет установлен CMake. Я рекомендую выбрать папку “C:QtCMake”, так как потом можно будет легко интегрировать его со средой разработки (IDE). Щелкаем “Далее”.

1.4.1.5. При желании можно создать группу ярлыков в меню “Пуск”. Щелкаем “Установить”, ждем окончания установки и нажимаем “Готово”. Всё! CMake установлен.

1.4.2 Примеры использования CMake:

1.4.2.1. Немного основ, общие советы.

Для сборки проекта с помощью CMake в корневой директории проекта создается файл “CMakeLists.txt”, описывающий этот проект и его зависимости. Примеры компилирования библиотек с помощью утилиты CMake можно найти здесь:

Компиляция и установка библиотеки OpenAL

Компиляция и установка библиотеки ALUT (freealut)

1.4.2.2. Пример моего “CMakeLists.txt” для сборки примера “oldglutdemo.c” из пункта 2.2.9.1, с использованием библиотеки GLUT:

project(GLUT-Req)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)

set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/Qt/MinGW/lib")
set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/Qt/MinGW/include/GL;C:/Qt/MinGW/include")

##########################################################
find_package(OpenGL REQUIRED)
if(NOT OPENGL_FOUND)
    message(SEND_ERROR "Failed to find OpenGL")
    return()
else()
    include_directories(${OPENGL_INCLUDE_DIR})
endif()
##########################################################
find_package(GLUT REQUIRED)
if(NOT GLUT_FOUND)
    message(SEND_ERROR "Failed to find GLUT")
    return()
else()
    include_directories(${GLUT_INCLUDE_DIR})
endif()
##########################################################

link_libraries(${OPENGL_LIBRARY} ${GLUT_LIBRARIES})
add_executable(${PROJECT_NAME} ${SRC_LIST})

Текст выше нужно выделить и сохранить в файл с именем “CMakeLists.txt”, затем файл “oldglutdemo.c” и “CMakeLists.txt” нужно поместить в отдельную папку, например “C:QtbuildGLUTglut-3.7.6cmake-test”.

Далее набираем в консольном окне такие команды:

cmake -G "MSYS Makefiles"
make
make install

И в итоге получаем исполнительный файл “GLUT-Req.exe”. Обратите внимание на:

set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/Qt/MinGW/lib")
set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/Qt/MinGW/include/GL;C:/Qt/MinGW/include")

Без установки этих переменных CMake не видит библиотеку GLUT.

1.4.2.3. Переменные:

cmake -DCMAKE_INSTALL_PREFIX:PATH="/mingw" -DCMAKE_C_FLAGS:STRING="-march=i686" -DCMAKE_CPP_FLAGS:STRING="" -DCMAKE_CXX_FLAGS:STRING="" 
-DCMAKE_EXE_LINKER_FLAGS:STRING="-L/usr/local/lib -L/opt/local/lib" -DCMAKE_MODULE_LINKER_FLAGS:STRING="-L/usr/local/lib -L/opt/local/lib" 
-DCMAKE_SHARED_LINKER_FLAGS:STRING="-L/usr/local/lib -L/opt/local/lib" -G "MSYS Makefiles"

Из названий переменных все должно быть понятно:

-DCMAKE_INSTALL_PREFIX:PATH #- путь, куда будет устанавливаться программа после "make install".
-DCMAKE_C_FLAGS:STRING #- Установка флагов для файлов "*.c"
-DCMAKE_CPP_FLAGS:STRING / -DCMAKE_CXX_FLAGS:STRING #- Установка флагов для файлов "*.cpp" и "*.cxx" соответственно.
-DCMAKE_EXE_LINKER_FLAGS:STRING / -DCMAKE_MODULE_LINKER_FLAGS:STRING / -DCMAKE_SHARED_LINKER_FLAGS:STRING #- Установка файлов линковки.

Каталог с исходниками можно оставить в чистом состоянии. Для этого следует перейти в сборочный каталог (в данном случае “build_project”) и разверенуть в него дерево исходного кода с последующей генерацией Makefile’ов. Пример:

cd build_project/
cmake -G "MSYS Makefiles" --build ../project/src/

В аргумент “build” необходимо прописать путь до каталога с исходным кодом, который нужно оставить чистым. После выполнения команды в каталоге “build_project/” создастся полная копия дерева проекта и в этом каталоге можно будет выполнять дальнейшую сборку.

1.4.2.4. Кросскомпиляция с помощью CMake.

В папке с проектом создаем файл с расширением “.cmake”, например, “Toolchain-eldk-ppc74xx.cmake”, с подобным содержимым:

# this one is important
SET(CMAKE_SYSTEM_NAME Linux)
#this one not so much
SET(CMAKE_SYSTEM_VERSION 1)

# specify the cross compiler
SET(CMAKE_C_COMPILER   /opt/eldk-2007-01-19/usr/bin/ppc_74xx-gcc)
SET(CMAKE_CXX_COMPILER /opt/eldk-2007-01-19/usr/bin/ppc_74xx-g++)

# where is the target environment 
SET(CMAKE_FIND_ROOT_PATH  /opt/eldk-2007-01-19/ppc_74xx /home/alex/eldk-ppc74xx-inst)

# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

И конфигурируем проект:

cmake -DCMAKE_TOOLCHAIN_FILE=Toolchain-eldk-ppc74xx.cmake

Если переменная “CMAKE_FIND_ROOT_PATH_MODE_PROGRAM” установлена в NEVER, то будут использоваться инструменты из недр вашей системы. Если она установлена в ONLY, то будут использованы инструменты из каталога “CMAKE_FIND_ROOT_PATH/bin”. В этом случае следует быть осторожным, так как из поля видимости CMake пропадают некоторые кросс-утилиты из состава binutils, например tuple-ar и tuple-ranlib. Решить эту поблему можно с помощью создания симлинков на эти инструменты. Симлинки следует расположить в директорию “CMAKE_FIND_ROOT_PATH/bin”. В противном случае, при сборке проекта может возникать следующая ошибка:

Error running link command: No such file or directory

Подробнее можно прочесть тут: CMake Cross Compiling

1.4.3 Что почитать про CMake? (литература):

Из наиболее полезного:

  1. CMake Documentation [ENG]
  2. Введение в CMake [RUS]
  3. Используем Cmake для создания Makefile [RUS]

<< Перейти к содержанию

http://exlmoto.ru/mingw-development-environment/
http://www.linux.org.ru/forum/desktop/10819573
https://msys2.github.io/

General Usage Instructions

There are several options you can choose from:

  • rubenvb «release» builds: these are stable builds using the latest released GCC and MinGW-w64. GCC 4.5 and up is covered, along with packages for Clang 3.1 and up. Some experimental and unstable packages are also provided for those that want prerelease versions of the software.
    • 64-bit target
    • 32-bit target

The prefix i686=32-bit x86_64=64-bit shows what kind of binaries the toolchain builds. The suffix shows what OS the toolchain is built for. If you need to build 32-bit binaries on Windows, it is recommended to use the i686…win32 package.

  • MinGW-builds: high quality toolchains, providing dual-target builds(host=x32 -> target=x32/x64 & host=x64 -> target=x64/x32). GCC 4.6.2 and up is covered. The builds are divided into two categories: stable and unstable. Also, the builds provide two models of threads: posix/win32. In addition to this, you can select dwarf/sjlj/seh builds at your choice. And one more important feature of the builds is that the builds include python interpreter built within the MinGW-builds project, and which is used for the ‘GDB pretty-printers’. Also provides other useful packages.
    • 64-bit target
    • 32-bit target

The prefix x32=32-bit x64=64-bit shows what kind of binaries the toolchain builds. If you need to build 32-bit binaries on Windows, it is recommended to use the x32 package.

  • Automated builds: produced regularly, as often as possible. These will use upstream GCC versions and may not be very stable at times, but these are tested to at least function. The binary packages do not include optional mingw-w64 SDKs, including the DXSDK and DDK.
    • 64-bit target
    • 32-bit target
  • TDM-GCC: TDM, who also catered updated GCC installers for mingw.org, supports a mingw-w64 toolchain. Be sure to read the Getting Started page. This is of course not usable for cross-compilation. Please understand TDM uses nonstandard patching that makes his builds binary incompatible with all other builds without these patches.

For linux, see below.

Windows native

TDM-GCC comes with an easy installer, please use that. The other builds are quite straightforward to set up:

  • extract the toolchain to a directory: 32-bit mingw-w32: eg C:mingw32 so that C:mingw32bin contains i686-w64-mingw32-gcc.exe 64-bit mingw-w64: eg C:mingw64 so that C:mingw64bin contains x86_64-w64-mingw32-gcc.exe
  • open a cmd.exe and do set PATH=C:mingw64bin;%PATH% for 64-bit building. set PATH=C:mingw32bin;%PATH% for 32-bit building.
  • You should be ready to go. Execute i686-w64-mingw32-gcc -v or x86_86-w64-mingw32-gcc -v to see that everything has gone well.
  • (Autobuilds only) If you need mingw32-make, please download it from the mingw-w64 downloads site under External binary packages.

Linux

Several distributions already provide mingw64 packages:

  • Arch (AUR): https://aur.archlinux.org/packages.php?ID=53926
  • Debian: http://packages.debian.org/sid/mingw-w64 and related packages.
  • Fedora: https://fedoraproject.org/wiki/MinGW/Tutorial
  • Ubuntu: http://packages.ubuntu.com/source/lucid/mingw-w64 and related packages

The toolchain consists of compilers, linkers assemblers and supporting utilities (comparable to what you get with the Windows SDK. It does not include an IDE.

If you need to compile GNU software which requires the use of a configure script for Windows, see [MSYS].

CMake can be used for generating «MinGW Makefiles», which of course work fine for mingw-w64/w32.

MinGW Builds

The scripts provided by the MinGW-Builds project[1] are designed
for building the dual-target(i686/x86_64) MinGW-W64 compiler for i686/x86_64 hosts.

The scripts are distributed under the ‘BSD 3’ license[2].

In order to use the scripts provided by the MinGW-W64 project it is needed:

  1. Windows-64bit or Linux + Wine-64bit

  2. Install MSYS2 from:
    http://sourceforge.net/projects/msys2/
    (MSYS2 wiki: https://www.msys2.org/wiki/MSYS2-installation/)

  3. Get the scripts into <msys root>/home/<user>/mingw-builds:
    cd && git clone <paste correct url>

  4. In the MSYS2 file structure delete or rename the /mingw32 and /mingw64 directory.

  5. Delete the paths pointing to any preinstalled MinGW from the PATH
    environment variable.

  6. Go into the MinGW-builds root directory:
    cd && cd mingw-builds

  7. Options:

  --mode=[gcc|python|clang]-<version> - what package to build with version.
  --arch=<i686|x86_64>                - build architecture.
  --buildroot=<path>                  - using '<path>' as build directory.
                                        By default used MSYS user home directory.
  --fetch-only                        - only download all the sources without start building.
  --update-sources                    - try to update sources from repositories before build.
  --exceptions=<model>                - exceptions handling model.
                                        Available: dwarf, seh(gcc>=4.8.0 only), sjlj, dwarfseh (picks by architecture).
  --use-lto                           - building with using LTO.
  --no-strip                          - don't strip executables during install.
  --no-multilib                       - build GCC without multilib support (default for DWARF and SEH exception models).
  --static-gcc                        - build static GCC.
  --dyn-deps                          - build GCC with dynamically dependencies.
  --rt-version=<v3..v10>              - version of mingw-w64 runtime to build.
  --rev=N                             - number of the build revision.
  --with-testsuite                    - run testsuite for packages that contain flags for it.
  --threads=<posix|win32>             - used threads model.
  --enable-languages=<langs>          - comma separated list(without spaces) of gcc supported languages.
                                        available languages: ada,c,c++,fortran,objc,obj-c++
  --with-default-win32-winnt=<ver>    - default windows version the toolchain will target

For more options run: «./build —help»

  1. Run:
  • ./build --mode=gcc-4.8.1 --arch=i686 for building i686-MinGW-w64
  • ./build --mode=gcc-4.8.1 --arch=x86_64 for building x86_64-MinGW-w64
  • ./build --mode=gcc-4.8.1 --arch=x86_64 --preload for preload sources and building x86_64-MinGW-w64
  • ./build --mode=gcc-4.8.1 --arch=i686 --exceptions=dwarf for building i686-MinGW-w64 with DWARF exception handling

For example, during the process of building of the i686-gcc-4.7.2 will
be created the following directories:

  <buildroot>/i686-4.7.2-release-posix-sjlj-rev1/build
  <buildroot>/i686-4.7.2-release-posix-sjlj-rev1/libs
  <buildroot>/i686-4.7.2-release-posix-sjlj-rev1/logs
  <buildroot>/i686-4.7.2-release-posix-sjlj-rev1/prefix

For x86_64:

  <buildroot>/x86_64-4.7.2-release-posix-sjlj-rev1/build
  <buildroot>/x86_64-4.7.2-release-posix-sjlj-rev1/libs
  <buildroot>/x86_64-4.7.2-release-posix-sjlj-rev1/logs
  <buildroot>/x86_64-4.7.2-release-posix-sjlj-rev1/prefix

And the sources directory:
<buildroot>/src

The archives with the built MinGW will be created in <buildroot>/archives/

At the moment, successfully building the following versions:

  gcc-4.6.4
  gcc-4.7.0
  gcc-4.7.1
  gcc-4.7.2
  gcc-4.7.3
  gcc-4.7.4
  gcc-4.8.0
  gcc-4.8.1
  gcc-4.8.2
  gcc-4.8.3
  gcc-4.8.4
  gcc-4.8.5
  gcc-4.9.0
  gcc-4.9.1
  gcc-4.9.2
  gcc-4.9.3
  gcc-4.9.4
  gcc-5.1.0
  gcc-5.2.0
  gcc-5.3.0
  gcc-5.4.0
  gcc-5.5.0
  gcc-6.1.0
  gcc-6.2.0
  gcc-6.3.0
  gcc-6.4.0
  gcc-6.5.0
  gcc-7.1.0
  gcc-7.2.0
  gcc-7.3.0
  gcc-7.4.0
  gcc-7.5.0
  gcc-8.1.0
  gcc-8.2.0
  gcc-8.3.0
  gcc-8.4.0
  gcc-8.5.0
  gcc-9.1.0
  gcc-9.2.0
  gcc-9.3.0
  gcc-9.4.0
  gcc-9.5.0
  gcc-10.1.0
  gcc-10.2.0
  gcc-10.3.0
  gcc-10.4.0
  gcc-11.1.0
  gcc-11.2.0
  gcc-11.3.0
  gcc-12.1.0
  gcc-12.2.0
  gcc-4.6-branch (currently 4.6.5 prerelease)
  gcc-4.7-branch (currently 4.7.5 prerelease)
  gcc-4.8-branch (currently 4.8.6 prerelease)
  gcc-4.9-branch (currently 4.9.5 prerelease)
  gcc-5-branch (currently 5.6.0 prerelease)
  gcc-6-branch (currently 6.6.0 prerelease)
  gcc-7-branch (currently 7.6.0 prerelease)
  gcc-8-branch (currently 8.6.0 prerelease)
  gcc-9-branch (currently 9.6.0-prerelease)
  gcc-10-branch (currently 10.5.0-prerelease)
  gcc-11-branch (currently 11.3.0-prerelease)
  gcc-12-branch (currently 12.3.0-prerelease)
  gcc-trunk (currently 13.0.0 snapshot)

Builds also contains patches for building Python 2.7.9 and 3.4.3 versions for support gdb pretty printers.
Big thanks for these patches to:

  2010-2013 Roumen Petrov, Руслан Ижбулатов
  2012-2015 Ray Donnelly, Alexey Pavlov

[1] https://github.com/niXman/mingw-builds/

[2] http://www.opensource.org/licenses/BSD-3-Clause

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 15:37, 12 июня 2017.

MinGW

Создатели: Колин Питерс
Разработчики: MinGW Project
Выпущена: 1 июля 1998 года
Постоянный выпуск: 4.8.1-4 / 11 октября 2013
Состояние разработки: активна
Написана на: C/C++
Операционная система: Microsoft Windows, UNIX-подобные (в качестве кросс-компилятора)
Локализация: Английский
Тип ПО: Компилятор
Лицензия: Общественное достояние (заголовочные файлы), GNU GPL (компилятор и инструментарий)
Веб-сайт mingw.org

MinGW (Minimalist GNU for Windows), ранее mingw32 — бесплатная среда разработки родных приложений под Microsoft Windows с открытым исходным кодом. Состоит из портированного GNU Compiler Collection, GNU Binutils (ассемблер, компоновщик, менеджер архивации), GNU Debugger, набора свободно распространяемых библиотек импорта и заголовочных файлов для Microsoft Windows API и прочего.

MinGW не нуждается в DLL-слое совместимости, и поэтому, если в программе не используется лицензия GPL, программы не обязательно распространять вместе с исходным кодом.

MinGW может использоваться как на своей родной платформе Microsoft Windows, так и на UNIX-подобных и на Cygwin

Также, другими авторами в качестве альтернативы MinGW, был разработан компилятор MinGW-w64, который поддерживает 64-х битные системы. Сначала он был предложен на рассмотрение для интеграции с оригинальным проектом MinGW, но был отклонен в связи с подозрением на использование несвободного кода. В дальнейшем, разработчики MinGW-w64 отказались от дальнейшего сотрудничества с MinGW.

Содержание

  • 1 История
  • 2 Поддержка языков программирования
  • 3 Компоненты MinGW
    • 3.1 MSYS
  • 4 Сравнение с Cygwin
  • 5 MinGW-w64
  • 6 Установка
    • 6.1 Сборка Mingw в Windows своими руками
  • 7 Источники

История

Изначально MinGW назывался mingw32, но впоследствии от этого названия отказались, чтобы подчеркнуть, что MinGW не ограничен 32-битными системами. Первый релиз, созданный Колином Петерсом в 1998 году, включал в себя только порт GCC из Cygwin. Ян-Яап ван дер Хайден создал первый нативный Windows-порт GCC, добавив также binutils и make. Мумит Кхан позже принял участие в разработке, добавив в комплект больше специфичных для Windows возможностей, включая заголовочные файлы Win32, написанные Андершом Нурландером. Чтобы получить большую поддержку общественности и централизовать разработку, в 2000 проект был перемещён на SourceForge.net, где в сентябре 2005 был выбран проектом месяца.

В конце 2013 года, взамен MSYS, началась разработка MSYS2, включающего 32-х и 64-х битные пакеты MinGW. Оригинальный проект MSYS уже не мог конкурировать с Cygwin и был практически заброшен. MSYS2 представляет собой усовершенствованный MSYS и основывается на Cygwin и MinGW-w64 для лучшей совместимости с родным софтом Windows. В качестве менеджера пакетов MSYS2 использует Arch Linux’s Pacman[Источник 1].

Поддержка языков программирования

Большинство языков, которые поддерживаются GCC, поддерживаются и в MinGW. Среди них C, C++, Objective-C, Objective-C++, Fortran и Ada. Также используются библиотека из GCC (libstdc++ for C++, libgfortran for Fortran, др.)

Необходимо отметить, что GCC не включает в себя библиотеку языка C. По умолчанию MinGW подключается к предоставляемой Windows библиотеке MSVCRT, к которой так же подключался Microsoft Visual Studio 6.0 1998 года. Библиотека не поддерживает стандарт C99, так как его ещё не существовало к моменту выпуска MSVCRT. Стандарт C89 поддерживается, однако не полностью. MSVCRT не изменялась в течение многих лет, и в будущем каких-либо изменений не ожидается. Новые версии Visual Studio используют новые исполняемые библиотеки, однако они не всегда предоставляются операционной системой или не являются свободно распространяемыми, что затрудняет работу с открытым программным обеспечением.

По причине использования MSVCRT, MinGW имеет множество ограничений и особенностей с совместимостью как и Microsoft Visual Studio 6.0. При разработке не следует полагаться на C99, только на C89. К примеру, новый формат символов в printf %a и %ll не поддерживается (хотя для последнего существует обходное решение).

Разработчики MinGW пытались разрешить подобные проблемы во вспомогательной библиотеке mingwex (или более точно libmingwex). Сейчас она достаточно далека от совершенства и, вполне вероятно, что работа над ней останется незавершённой. Для примера, добавление поддержки %a в ранее упомянутый, printf потребовало бы полное изменение устройства функции. Использование библиотеки glibc не помогло в решении проблемы из-за её лицензии. [Источник 2]
Однако, проблема разрешилась в MinGW-w64, где к тому же обеспечивается полной соответствие стандартам POSIX.

Проект MinGW поддерживает и распространяет несколько различных ключевых компонентов и дополнительных пакетов, включая различные порты GNU toolchain, такие как GCC и binutils, переведённые в эквивалентные пакеты[Источник 3]. Эти утилиты могут использоваться из командной строки Windows или интегрированы в IDE. Пакеты могут быть установлены через командную строку в приложении mingw-get[Источник 4].

MinGW поддерживает динамические библиотеки, которые обычно называют по образцу <name>.lib и <name>.dll, и статические библиотеки, названные по типу lib<name>.a, как и принято в UNIX и подобных ему системах.

Реализации заголовочных файлов Win32 и библиотек импорта Win32 имеют пермиссивную лицензию[Источник 5], а порты GNU доступны под GNU General Public License. Бинарные сборки полного пакета MSYS и отдельных MinGW GNU утилит доступны для скачивания на сайте MinGW.

MSYS

В дополнение, компонент MinGW, известный как MSYS (Minimal SYStem) предоставляет win32-порты окружения легковесной Unix-подобной оболочки, включающей rxvt и набор инструментов POSIX, достаточный для запуска скриптов autoconf[Источник 6]. Однако, он не предоставляет компилятор языка C или файловую систему, чувствительную к регистру[Источник 7].

MSYS — это коллекция утилит GNU таких как bash, make, gawk и grep, которая позволяет собирать приложения и программы, зависящие от традиционных инструментов UNIX. Она предназначена для обновления MinGW и исправления недоработок командной строки. Примером будет разработка библиотеки, использующей пакет autotools для создания систем. Пользователи для этого скорее всего запустят ./configure нежели make. Настройки консольных приложений требуют консольный интерпретатор, который не предоставляется Windows, но предоставляется MSYS.

Ошибочно считать, что MSYS — это «UNIX на Windows». MSYS сам по себе не содержит никаких компиляторов или библиотек C, следовательно он не предоставляет возможности портировать программы с UNIX на Windows и какого-либо специфического для UNIX функционала (например имена файлов, чувствительные к регистру). Пользователям, ищущим подобное, рекомендуется ознакомиться с Cygwin или Microsoft Interix. [Источник 8]

mingwPORTs — пользовательские дополнения, разработанные для коллекции программного обеспечения MinGW. Они распространяются не в виде скомпилированных двоичных пакетов, а в форме интерактивных Bourne shell-скриптов, которые автоматически загружают и модифицируют исходный код, после чего компилируют и устанавливают его. Пользователи, желающие установить какое либо приложение из mingwPORT, должны перед этим установить MinGW и MSYS.[Источник 9]

Сравнение с Cygwin

MinGW является форком от Cygwin версии 1.3.3. Несмотря на то, что и Cygwin, и MinGW используются для портирования программного обеспечения Unix под Windows, они используют разный подход: цель Cygwin — предоставить полный слой POSIX, включающий в себя реализацию всех основных системных вызовов и библиотек системы UNIX, жертвуя производительностью там, где это необходимо для совместимости. Целью MinGW является предоставление нативной функциональности и производительности посредством прямых вызовов Windows API. В отличие от Cygwin, MinGW не нуждается в DLL-слое совместимости и, таким образом, программы не обязаны распространяться с исходным кодом. Программы под Windows, написанные с Cygwin, должны запускаться поверх копилефтной библиотеки совместимости, которая должна распространяться с программой, а также с исходным кодом программы.

Вследствие того, что MinGW использует вызовы Win32 API, он не может предоставить полного POSIX API; он не может скомпилировать некоторые приложения Unix, которые могут быть скомпилированы с Cygwin. В частности, это относится к приложениям, которые требуют такой функциональности POSIX, как fork(), mmap() или ioctl()[Источник 10] и предполагают запуск в среде POSIX. Приложения, написанные с использованием кроссплатформенных библиотек, таких, как SDL, wxWidgets, Qt или GTK+, как правило, легче компилируются в MinGW, чем в Cygwin.

Комбинация MinGW и MSYS предоставляет небольшую независимую среду, которая может быть загружена на съемные носители, не требуя добавления записей в файлы реестра. Cygwin, предоставляя бо́льшую функциональность, является более сложным для установки и поддержки.

Также возможна кросс-компиляция приложений Microsoft Windows с MinGW-GCC под управлением операционных систем семейства POSIX. Это означает, что разработчику не нужно устанавливать Windows с MSYS, чтобы скомпилировать программы, которые будут запускаться под Microsoft Windows без Cygwin.

MinGW-w64

MinGW-w64

Создатели: OneVision Software
Разработчики: Kai Tietz
Выпущена: 2005
Постоянный выпуск: 5.0.1 / 6 января 2017
Написана на: C/C++
Операционная система: Microsoft Windows
Тип ПО: Компилятор
Лицензия: Общественное достояние (заголовочные файлы), GNU GPL (компилятор и инструментарий), Zope Public License
Веб-сайт mingw-w64.org

В связи с тем, что в рамках изначального проекта MinGW не обещалось, что в его кодовую базу будут вноситься обновления, связанные с добавлением некоторых новых ключевых элементов Win32 API, а также наиболее необходимой поддержки 64-битной архитектуры, был создан проект MinGW-w64. Он является новой чистой реализацией портирования GNU Compiler Collection (GCC) под Microsoft Windows, осуществленной изначально компанией OneVision и переданной в 2008 году в общественное пользование (Public Domain). Сначала он был предложен на рассмотрение для интеграции с оригинальным проектом MinGW, но был отклонен в связи с подозрением на использование несвободного или проприетарного кода. По многим серьезным причинам этического характера, связанным с отношением со стороны авторов MinGW, ведущие разработчики кода MinGW-w64 решили больше не пытаться кооперироваться с проектом MinGW.

MinGW-w64 обеспечивает более полную реализацию Win32 API, включая:

  • Лучшую поддержку стандарта C99
  • Лучшую поддержку pthreads (включая возможность задействовать функциональность стандарта C++11 библиотеки libstdc++ компилятора GCC)
  • GCC multilib
  • Точки входа в программу с поддержкой Unicode (wmain/wWinMain)
  • DDK (из проекта ReactOS)
  • DirectX (из проекта WINE)
  • Поддержку больших файлов
  • Поддержку 64-битной архитектуры Windows

Установка

Сборка Mingw в Windows своими руками

Зачем собирать mingw самому?

  • Для того, чтобы сконфигурировать компоненты так как нужно мне, а не той тысяче пользователей, которые скачивают стандартный пакет с официального сайта.
  • Чтобы я сам определял какие компоненты мне нужны в виде shared библиотек с dll-ками, а какие я линкую статически.
  • Чтобы быть уверенным, что gcc работает максимально эффективно.
  • Чтобы исключить возможные закладки в исполняемые модули.
  • Чтобы лучше понять как собираются и устанавливаются GNU утилиты.

Для сборки mingw нужен сам mingw. Существует программа установки, которая сама скачает и установит нужные пакеты. Она лежит на официальном сайте https://sourceforge.net/projects/mingw/files/[Источник 11]

Далее используем данную инструкцию, для дальнейшей установки и настройки: https://habrahabr.ru/post/112673/[Источник 12]

Источники

  1. How are msys, msys2, and msysgit related to each other? // Stackoverflow [2012—2017]. Дата обновления: 05.03.2017. URL: https://stackoverflow.com/questions/25019057/how-are-msys-msys2-and-msysgit-related-to-each-other (дата обращения: 01.03.2017).
  2. MinGW And C99 // Mingw [2006—2017]. Дата обновления: 25.05.2012. URL: http://mingw.org/wiki/C99 (дата обращения: 01.03.2017).
  3. Компоненты MinGW // Sourceforge [2012—2017]. Дата обновления: 01.03.2017. URL: http://sourceforge.net/project/showfiles.php?group_id=2435 (дата обращения: 01.03.2017).
  4. MinGW Installation Notes // Mingw [2006—2017]. Дата обновления: 25.05.2007. URL: http://www.mingw.org/wiki/Getting_Started#toc2 (дата обращения: 01.03.2017).
  5. Licensing Terms | MinGW // Mingw [2006—2017]. Дата обновления: 25.05.2007. URL: http://www.mingw.org/node/21 (дата обращения: 01.03.2017).
  6. Licensing Terms | MinGW // Mingw [2006—2017]. Дата обновления: 25.05.2007. URL: http://www.mingw.org/license (дата обращения: 01.03.2017).
  7. MSYS // Mingw [2006—2017]. Дата обновления: 25.05.2007. URL: http://www.mingw.org/wiki/MSYS (дата обращения: 01.03.2017).
  8. MSYS // Mingw [2006—2017]. Дата обновления: 25.05.2007. URL: http://www.mingw.org/wiki/MSYS (дата обращения: 01.03.2017).
  9. mingwPORT // Mingw [2006—2017]. Дата обновления: 25.05.2007. URL: http://www.mingw.org/wiki/mingwPORT (дата обращения: 01.03.2017).
  10. Cygwin | MinGW // Mingw [2006—2017]. Дата обновления: 25.05.2007. URL: http://www.mingw.org/node/21 (дата обращения: 01.03.2017).
  11. MinGW // Sourceforge [2012—2017]. Дата обновления: 01.03.2017. URL: https://sourceforge.net/projects/mingw/files/ (дата обращения: 01.03.2017).
  12. MinGW // Habrahabr [2006—2017]. Дата обновления: 05.04.2013. URL: https://habrahabr.ru/post/112673/ (дата обращения: 01.03.2017).

I’m new to Stack Overflow, C++ and to MinGW W64. My problem is, is that I don’t know how to build MinGW W64, all I know how to do is double click an exe and install the files onto my computer itself.

So what I am asking is that, how do you build MinGW W64? ( http://mingw-w64.sourceforge.net/ )

If I learn how to build MinGW W64, I think I will be able to build other things without any help. I don’t know what files to get to install MinGW W64. All I know is that I need gcc (for C) and g++ (for C++) from (http://gcc.gnu.org/) .

Yes, I know, I could just install MinGW from http://www.mingw.org/ but their gcc versions are out of date and it would be a nice skill to learn if I learnt how to build these kind of things. (Might even help in the future)

If it helps, my operating system is Windows 7.

Thanks guys. (If possible, can you make a step by step guide on how to build it and tell me what files to get. And if you feel like you want to help a noob out like me, it’d be nice to give the links to the files.)

MinGW (“Minimalist GNU for Windows”) is a complete runtime environment for gcc to support binaries native to Windows 64-bit and 32-bit operating systems. With MinGW we can build C programs for windows. This tool is also required to build C-programs for microcontrollers. We will be seeing how to write codes for microcontrollers without using the any IDE. And we will use the MinGW compiler along with the microcontroller family toolchain to build the code. We will install mingw and configure it for running the “make” files

This post is the first step in the complete build process. In this post, we will look at installing mingw and adding it to the environment variables.

1.1 Download MingGW

It contains Make that we will be using in Command Prompt on Windows 10.

1.2 Install MinGW

We will now see how to install minGW. In this step, we will look at the important options that need to be selected.

Keep the Installation Directory the same as shown below.

install mingw

1.2.1 Navigate to your Desktop

Open MinGW Installer. Select Basic Setup, navigate to Packages and Right click on “mingw-developer-toolkit-bin”, “mingw32-base-bin” and “msys-base-bin” Packages and select Mark for Installation.

install mingw - select options

1.2.2 Navigate to the Top left corner and Left click on Installation then click Apply Changes.

1.2.3 The packages should now be Green (if not, just repeat the process), if they are successfully installed then close the Installation Manager.

install mingw - installed componenets

1.3 Rename to Make

Navigate to C:MingGWbin. Rename “mingw32-make” to “make”. This will make it easier to use Make in the Command Prompt.

1.3.1 Let’s add Make for usage in Command Prompt.

Press the “Windows Icon” on your keyboard, search and open “Edit the system environment variables”.

1.3.2 Click on “Environment Variables

1.3.2 Under “System variables”, scroll down to “Path” and double-click.

1.3.3 Click on “New” and add the location “C:MingGWbin” to environment variable and press “OK”.

1.4 Testing Make

Press the “Windows Icon” on your keyboard, search and open “Command Prompt”.

1.4.1 Type “make –version” to confirm that it works. Recheck Step 1.3 – 1.4 if it doesn’t work.

Building GCC on Windows

Instructions for a native bootstrap of GCC on Windows for i386-pc-mingw32.

These instructions will be merged into the GCC documentation when they become more mature.

Required Prerequisites

MinGW toolchain

You must have the MinGW toolchain installed to build GCC. The toolchain is composed of two parts, the host libraries and tools, and the host compiler. A complete toolchain which satisfies the requirements below can be installed using the installer from http://www.mingw.org.

These notes only discuss MinGW-specific prerequisite issues. Please see http://gcc.gnu.org/install/prerequisites.html for a complete list of prerequisites.

mingw-runtime (version 3.12 or higher): This is the equivalent of libc on Unix which provides an interface to Microsoft’s C runtime that is shipped with Windows.

Host Tools and Libraries

  • w32api: This is a free implementation of the Windows API, equivalent to the Windows SDK, which provides the system-level interface needed by mingw-runtime and some parts of GCC. It is possible, with some modifications, to use Microsoft’s Platform SDK instead.

  • binutils (version 2.15 or higher): The GCC build needs an assembler and linker.

Host Compiler

  • gcc: You must have GCC 2.95 or better installed. At this time, building with other Windows compilers probably will not work.

Host Tools

  • Tools: A set of Unix-like tools must be present to build GCC. There are at least three different ways to get the set of required tools.

MSYS: MSYS is an environment available at <http://www.mingw.org> that is designed to work with MinGW, and it should work seamlessly. MSYS is a stripped-down and specialized fork of Cygwin. Unfortunately, in the past, MSYS has suffered from various bugs that have made building GCC difficult.

Cygwin: The Cygwin environment available at http://www.cygwin.com can provide the host tools. An advantage of using Cygwin is that it comes with almost all of the tools needed for developing and testing GCC. If Cygwin is used, two modifications must be made:

  • ln that does not create Cygwin-style symbolic links must be placed in the path before Cygwin. The ln from MSYS should work here. This script can be used:
##!/bin/sh
exec cp -p `echo $* | sed -r 's/(^| )-[^ ]*//g'`
  • uname must be modified to report MINGW32_NT-5.1 instead of CYGWIN_NT-5.1 so config.guess guesses correctly. The easiest way is to just use the uname from MSYS. Alternately, you can pass —build=i386-pc-mingw32 to configure to override config.guess.

UnxUtils: UnxUtils from http://unxutils.sourceforge.net/ can provide the set of tools needed. Some manual adjustment will be necessary to get this to work correctly.

Optional Prerequisites

  • autogen: This is not included in Cygwin, MSYS, or UnxUtils. Presently, there is a problem with building autogen on Cygwin. For a workaround, see the autogen-users mailing list: http://sourceforge.net/mailarchive/message.php?msg_name=1ca1c1410805011500u33bfd13fk2eedcb98fd53435e%40mail.gmail.com.

  • mingw32-make: In some cases, the mingw32-make build provided on http://www.mingw.org may work better.

  • phreads-win32: This is needed presently to make libgomp compile. However, OpenMP does not actually seem to work at present on MinGW.

  • See http://gcc.gnu.org/install/prerequisites.html for a complete list of optional prerequisites.

Environment

All prerequisite tools should be in the PATH environment variable.

The console emulation in Cygwin and MSYS has a known problem that causes it to lose some output information from GCC, which can cause build failures to be rather mysterious. RXVT, for example, has this problem. For this reason, the Microsoft console should be used. Alternately, a console emulator that does not have this problem can be used, such as Console 2 from http://sourceforge.net/projects/console/.

Sometimes CRLF issues are a problem. Cygwin bash has a feature that can mitigate some of these problems, which can be activated in the following way: set -o igncr export SHELLOPTS

Including r in the IFS environment variable may also be helpful in avoiding these problems.

Building

Please see the GCC installation instructions for complete details.

GCC must be configured using a relative path.

Building MinGW is typically quite slow, apparently due to slow Makefile and shell script execution. Using multiple processors with make -jN can substantially speed up the process.

To enable all languages and all directories (except mudflap), a command similar to the following example can be used. Note that you will need to specify your own paths to configure, libiconv, gmp, and mpfr.

../gccsrc/configure —enable-languages=c,ada,c++,fortran,java,objc,obj-c++ —disable-sjlj-exceptions —enable-libgcj —enable-libgomp —with-dwarf2 —disable-win32-registry —enable-libstdcxx-debug —enable-concept-checks —enable-version-specific-runtime-libs —prefix=/mingw —with-gmp=/mingw/src/gcc/gmp-mpfr-root —with-mpfr=/mingw/src/gcc/gmp-mpfr-root —with-libiconv-prefix=/mingw/src/gcc/libiconv-root

Installation

The DESTDIR variable can be used to control the output path.

Example:

make DESTDIR=/mingw/src/mytest/root install

Introduction

In this blog post, I’m excited to introduce a recent project of mine aimed at simplifying the often intricate process of setting up and configuring the MinGW environment. It’s no secret that navigating the complexities of MinGW installation can be daunting, especially for newcomers. Many budding developers find themselves overwhelmed and discouraged at this initial stage. With this project, my goal is to eliminate these barriers by providing a user-friendly MinGW installer. This installer is designed to streamline the process, equipping users with a fully functional environment that includes the latest GCC version and other essential production packages.

Packages

This installer is bundled with essential and commonly used packages which includes:

  • GCC
  • GDB
  • MinGW-w64 (linked with ucrt)
  • GNU Binutils
  • GNU Make
  • PExports
  • dos2unix
  • Yasm
  • NASM
  • JWasm
  • ccache
  • CMake
  • ninja
  • Doxygen
  • Universal Ctags
  • Cppcheck

Thread model: posix

Runtime library: UCRT (Windows 10 or higher, or when Update for Universal C Runtime is installed on older Windows versions, not supported on systems older than Windows 7 SP1 and Windows Server 2008 R2 SP1)

Installation Guide

  • Download the exe file from github release or webpage
  • Run the downloaded exe file.
  • Read Package Info (Optional)
  • Click Install.

By following these simple steps, you’ll complete the setup process, and your MinGW environment will be ready to use.

Thats it. You’ve successfully completed the setup.

Video Tutorial

Easy.MinGW.Installer.Tutorial.Project.mp4

Verification and Testing

To ensure your newly set up MinGW environment is functioning seamlessly, follow these quick verification steps:

  • Open terminal/cmd
  • Type gcc -v and hit Enter
  • You will see some texts and versions like below
    Using built-in specs.
    COLLECT_GCC=C:\MinGW64\bin\gcc.exe
    COLLECT_LTO_WRAPPER=C:/MinGW64/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/lto-wrapper.exe
    OFFLOAD_TARGET_NAMES=nvptx-none
    Target: x86_64-w64-mingw32
    Configured with: ../configure --prefix=/R/winlibs64ucrt_stage/inst_gcc-13.2.0/share/gcc --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --enable-offload-targets=nvptx-none --with-pkgversion='MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders' --with-tune=generic --enable-checking=release --enable-threads=posix --disable-sjlj-exceptions --disable-libunwind-exceptions --disable-serial-configure --disable-bootstrap --enable-host-shared --enable-plugin --disable-default-ssp --disable-rpath --disable-libstdcxx-debug --disable-version-specific-runtime-libs --with-stabs --disable-symvers --enable-languages=c,c++,fortran,lto,objc,obj-c++ --disable-gold --disable-nls --disable-stage1-checking --disable-win32-registry --disable-multilib --enable-ld --enable-libquadmath --enable-libada --enable-libssp --enable-libstdcxx --enable-lto --enable-fully-dynamic-string --enable-libgomp --enable-graphite --enable-mingw-wildcard --enable-libstdcxx-time --enable-libstdcxx-pch --with-mpc=/d/Prog/winlibs64ucrt_stage/custombuilt --with-mpfr=/d/Prog/winlibs64ucrt_stage/custombuilt --with-gmp=/d/Prog/winlibs64ucrt_stage/custombuilt --with-isl=/d/Prog/winlibs64ucrt_stage/custombuilt --disable-libstdcxx-backtrace --enable-install-libiberty --enable-__cxa_atexit --without-included-gettext --with-diagnostics-color=auto --enable-clocale=generic --with-libiconv --with-system-zlib --with-build-sysroot=/R/winlibs64ucrt_stage/gcc-13.2.0/build_mingw/mingw-w64 CFLAGS='-I/d/Prog/winlibs64ucrt_stage/custombuilt/include/libdl-win32 -Wno-int-conversion  -march=nocona -msahf -mtune=generic -O2' CXXFLAGS='-Wno-int-conversion  -march=nocona -msahf -mtune=generic -O2' LDFLAGS='-pthread -Wl,--no-insert-timestamp -Wl,--dynamicbase -Wl,--high-entropy-va -Wl,--nxcompat -Wl,--tsaware'
    Thread model: posix
    Supported LTO compression algorithms: zlib zstd
    gcc version 13.2.0 (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders)
    

Remember the versions you see might be different from these depending on when you follow this post.

If the output matches above, congratulations! Your MinGW installation/setup is successfully done.

Наверное, многие разработчики сталкивались с проблемой выбора или создания окружения для программирования. На мой взгляд, бесплатное окружение на основе порта компилятора gcc (MinGW) и какая-нибудь IDE, совместимая с ним – наиболее приемлемый выбор.

В этой статье я рассмотрю установку компилятора, его интеграцию с интегрированной средой разработки, его настройку, установку и компиляцию сторонних библиотек. Рассмотрю некоторые полезные утилиты для облегчения сборки исходного кода и системы контроля версий файлов.

Статья со временем будет обновляться и дополняться.

MinGW/MSYS и QtCreator

Данный мануал создавался с целью быть пособием и заметкой для разработчиков, помочь им собрать и настроить собственное окружение для разработки нативных приложений в семействе OS Windows.

Содержание:

1. Установка и настройка тулчейна MinGW/MSYS и дополнительного ПО

Давайте разберемся, что такое MinGW, а что такое MSYS и для чего они нужны.

MinGW – сокращение от “Minimalist GNU for Windows”, по своей сути MinGW является небольшой и лаконичной средой разработки нативных приложений для семейства OS Microsoft Windows.

MinGW предоставляет полный набор Open Source инструментов для программирования, который подходит для разработки нативного Windows приложения, которое не будет зависеть от C-Runtime библиотек каких-либо третьих сторон.

MinGW поддерживает идею минимализма, поэтому он никогда не будет полностью поддерживать среду исполнения POSIX, для развертывания POSIX приложений на Windows, для их полной поддержки существует Cygwin. В первую очередь MinGW предназначен для использования разработчиками, которые привыкли работать с компилятором gcc.

MinGW включает в себя:

  • Порт GNU Compiler Collection (GCC), который включает в себя компиляторы таких языков, как: C, C++, ADA и Fortran.
  • Порт GNU Binutils для Windows (as, ld, ar)
  • Консольный установщик (mingw-get) для MinGW и MSYS
  • Графический установщик (mingw-get-inst)

MSYS – сокращение от “Minimal SYStem”, это порт командной оболочки Bourne Shell (sh) для Windows. Он предлагается в качестве альтернативы “cmd.exe” от Microsoft’а. Оболочка хорошо подходит для портирования существующих приложений и библиотек, которые есть в *nix системах и включает в себя небольшой выбор портов инструментов Unix, облегчающих задачу портирования.

Комбинация MinGW и MSYS предоставляет разработчикам небольшую независимую среду, которая может быть легко загружена на съемные носители, не требуя добавления записей в файлы реестра.

Полезные ссылки:

Официальный сайт MinGW

Вики по MinGW [ENG]

<< Перейти к содержанию

1.1. Устанавливаем MinGW, оболочку MSYS и настраиваем окружение

1.1.1. Скачиваем официальный онлайн-установщик MinGW, на данный момент последняя версия установщика 20120426: mingw-get-inst-latest.exe

Запускаем установщик, нажимаем “Next”, “Next”, выбираем “Use pre-packaged repository catalogues”:

Установка тулчейна MinGW/MSYS

Жмем “Next” и соглашаемся с лицензией, снова “Next”, и теперь выбираем путь для установки:

Установка тулчейна MinGW/MSYS

Рекомендуется выбирать путь без пробелов, лучше всего устанавливать MinGW в корень диска, т.е в “C:\MinGW”. Я выбрал “C:\Qt\MinGW”, так удобнее будет подключить MinGW к IDE QtCreator. Если вы планируете дальше интегрировать свой тулчейн в какую-нибуть IDE, сделайте аналогично и нажмите “Next”. Необходимость наличия группы ярлыков в меню “Пуск” – по вашему желанию. Но можно не создавать (отметив галочкой “Don’t create a Start Menu folder) и нажать “Next”.

Выбираем следующие пакеты:

  • C Compiler
  • C++ Compiler
  • MSYS Basic System
  • MinGW Developer ToolKit

и жмем “Next”

Установка тулчейна MinGW/MSYS

затем подтверждаем установку выбранных пакетов кнопкой “Install”.

Откроется консольное окно, в котором будет отображаться процесс скачивания и установки пакетов. Проследите, чтобы процесс выполнялся без ошибок (например, если будут недоступны сервера репозитория, необходимо повторить попытку установки с этими же параметрами позже) и дождитесь завершения процесса.

Теперь необходимо добавить в переменную окружения PATH путь до директории “C:\Qt\MinGW\bin”. Делается это следующим образом (для Win7, для остальных систем по аналогии):

1.1.1.1. Нажмите правой клавишей мышки на ярлык “Компьютер” и кликните на пункт меню “Свойства”.

1.1.1.2. Кликните слева на пункт “Дополнительные параметры системы”, в появившемся окне нажмите кнопку “Переменные среды”.

1.1.1.3. В верхнем списке переменных найдите переменную “Path”, кликните на нее два раза для редактирования.

1.1.1.4. Добавьте путь до директории “\bin”. В моем случае это будет “C:\Qt\MinGW\bin”, разделение путей выполняется символом “;”.

Переменная PATH

1.1.1.5. Подробнее можно прочесть здесь.

Все, тулчейн MinGW и его оболочка MSYS установлены. Теперь можно перейти к установке дополнительных программ, которые помогут облегчить нам жизнь.

1.1.2. Установка дополнительных пакетов и полезные команды и утилиты.

Сразу после установки MinGW и MSYS будет полезно установить некоторые пакеты.

Для этого запускаем файл “C:\Qt\MinGW\msys\1.0\msys.bat”, для которого, кстати, полезно будет создать ярлык, и набираем там такие команды (переход на новую строку аналогичен нажатию клавиши “Enter”):

mingw-get install msys-man
mingw-get install msys-wget
mingw-get install msys-zip
mingw-get install msys-unzip
mingw-get install msys-bzip2
mingw-get install msys-perl

Команда “mingw-get install” аналогична популярной на разных Linux-дистрибутивах, наверное, знакомой многим, команде “apt-get install”. Обе эти команды скачают и установят вам нужный пакет из репозиториев.

Список доступных пакетов для установки можно посмотреть по команде “mingw-get show”, для лучшего восприятия его можно отсортировать следующим образом:

mingw-get show | grep "Package: "

Удалить установленный пакет можно командой “mingw-get remove выбранный_вами_пакет”

Обновить пакет можно командой “mingw-get upgrade выбранный_вами_пакет”, команда “mingw-get upgrade” обновит все пакеты вашего тулчейна полностью.

На этом базовая настройка тулчейна закончена, можно приступить к сборке/переносу проектов или более тонкой настройке.

1.1.3. Какие утилиты будет полезно использовать вместе с MinGW?

Для редактирования исходников и других файлов можно использовать консольный редактор “vim”, который идет в комплекте с MinGW’ом.

Но если вы привыкли к оконному интерфейсу, воспользуйтесь отличнейшим редактором – Notepad++.

Для распаковки содержимого архивов можно использовать консольные команды или архиваторы с GUI, такие как WinRar, например.

Лично я рекомендую использовать 7-zip.

1.1.4. Что можно почитать?

Список литературы можно найти здесь: http://www.linuxcenter.ru/

Основы работы в консоли

Интерпретатор командного языка shell

Самые необходимые команды *nix для обработки ввода/вывода

Совет по поводу определения fstab

<< Перейти к содержанию

1.2. Настройка MinGW/MSYS: используем продвинутую консоль, вместо msys.bat

Возможно многим разработчикам стандартный шел, вызываемый по “msys.bat” покажется унылым и скучным:

Стандартное окно MSYS тулчейна MinGW

Еще бы, работать в такой консоли достаточно неудобно, хотя бы из-за отсутствия нормального копипаста.

Но к счастью, есть такой проект как ConEmu от Maximus5‘а, являющийся продвинутым форком ConEmu by Zoin.

ConEmu – это очень удобный и симпатичный терминал, поддерживающий вкладки. Его подробнейшее описание, написанное самим автором этой программы, можно прочитать здесь. Самым главным преимуществом для меня является нормальный копипаст. Здесь он реализован просто замечательно, с помощью левой кнопки мышки или сочетания “Alt + Левая кнопка мышки” можно выделить блок или строку в консоли соответственно. После выделения строка сразу автоматом скопируется в буфер. Сочетание клавиш “Ctrl + V” или клик левой клавишей мышки вставляет первую строку из буфера, а “Shift + Insert + Enter” вставляет сразу все строки.

Для связки ConEmu и MinGW, нам необходимо скачать специально подготовленные пакеты ConEmu для MinGW. Установка весьма проста и тривиальна – нужно лишь распаковать “-mingw32” и “-mingw64” пакеты в корневую папку компилятора (в моем случае это “C:\Qt\MinGW”).

Если вы не хотите настраивать консоль, можете скачать уже настроенную мной:

Скачать ConEmu.zip, 1.7 MB

Выглядит она следующим образом (изображение кликабельно):

Стандартное окно sh в MinGW

И устанавливается абсолютно аналогично.

На мой взгляд панелька в стиле терминала Quake, выезжающая сверху экрана по нажатию “Ctrl + ~”, не только эффектно выглядит, но и очень удобна в использовании.

При желании, конечно, можно все очень и очень гибко настраивать под себя, программа ConEmu имеет множество настроек и совместима со всеми последними OS семейства Windows.

<< Перейти к содержанию

1.3. Компиляция и установка утилиты pkg-config

Официальный сайт pkg-config: http://pkg-config.freedesktop.org/

pkg-config это утилита, которая предоставляет общий интерфейс для получения информации об установленных в системе программных библиотеках с целью компиляции программ из исходного кода.

В нашем случае она нужна для компиляции некоторых библиотек и проектов.

1.3.1. Скачиваем последнюю версию исходников pkg-config’а, на момент написания статьи это 0.28: pkg-config-0.28.tar.gz

1.3.2. Распаковываем архив в папку “C:\Qt\build”, исходники pkg-config’а должны быть в папке “C:\Qt\build\pkg-config-0.28”.

1.3.3. Компилируем pkg-config и библиотеку GNU C Library (glibc), идущую в комплекте:

Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:

Кстати, небольшой, но полезный совет! Если у вас многоядерный процессор, то при вызове утилиты make можно воспользоваться ключом “-jX”, где X – число одновременно выполняемых потоков компиляции, которое зависит от количества ядер процессора n. Обычно рекомендуется брать X = n + 1, но если процессор поддерживает технологию Hyper-threading, то число потоков следует брать X = 2 · N + 1. То есть команды компиляции для двухъядерного процессора будут следующими: “make -j3” и “make -j3 install”. Благодаря распараллеливанию компиляции время сборки крупных проектов значительно сокращается.

export CFLAGS="-march=native"
cd /c/Qt/build/pkg-config-0.28
./configure --with-internal-glib --prefix=/mingw
make
make install
export -n CFLAGS

Утилита и библиотека скомпилировались и установились.

1.3.4. Чтобы обойти ошибку в MSYS, следует выполнить в консоли блок таких команд:

cat > /mingw/bin/pkg-config.sh << "EOF"
#!/bin/sh
if pkg-config "$@" > /dev/null 2>&1 ; then
res=true
else
res=false
fi
pkg-config "$@" | tr -d \\r && $res

EOF

Это создаст файл “pkg-config.sh” в папке “C:\Qt\MinGW\bin”

1.3.5. Теперь нужно сделать скрипт исполнительным и добавить переменную в альтернативное окружение:

chmod ugo+x /mingw/bin/pkg-config.sh && \
echo "PKG_CONFIG=/mingw/bin/pkg-config.sh" >> /etc/profile.local && \
echo "export PKG_CONFIG" >> /etc/profile.local

1.3.6. Когда вам понадобится альтернативное окружение, вы всегда можете подгрузить его командой:

source /etc/profile.local

<< Перейти к содержанию

1.4. Установка CMake, примеры использования

Официальный сайт CMake: http://www.cmake.org

CMake (cross platform make) – это кроссплатформенная система автоматизации генерации файлов для сборки программного обеспечения из исходного кода.

CMake не занимается непосредственно сборкой исходных кодов, он лишь генерирует файлы для управления сборкой проекта из файлов “CMakeLists.txt”. Это могут быть:

  • Обычные Makefile, которые используются в системах Unix для сборки с помощью утилиты make;
  • Файлы projects/workspaces (*.dsp/*.dsw) в системах Windows для сборки с помощью Microsoft Visual C++;
  • Проекты XCode в Mac OS X.

1.4.1 Установка CMake:

1.4.1.1. Скачиваем установочный пакет CMake с официального сайта (последняя версия на момент написания статьи – 2.8.10.2): cmake-2.8.10.2-win32-x86.exe

1.4.1.2. Сохраняем установочный пакет в любое удобное для вас место и запускаем “cmake-2.8.10.2-win32-x86.exe”.

1.4.1.3. Щелкаем “Далее”, соглашаемся с лицензией, выбираем пункт “Add CMake to the system PATH for all users”

Установка CMake

Эта опция установит в переменную окружения PATH ту папку, в которой будет установлен CMake.

Ярлык создаем по желанию, щелкаем “Далее”.

1.4.1.4. Выбираем папку, в которую будет установлен CMake. Я рекомендую выбрать папку “C:\Qt\CMake”, так как потом можно будет легко интегрировать его со средой разработки (IDE). Щелкаем “Далее”.

Установка CMake

1.4.1.5. При желании можно создать группу ярлыков в меню “Пуск”. Щелкаем “Установить”, ждем окончания установки и нажимаем “Готово”. Всё! CMake установлен.

1.4.2 Примеры использования CMake:

1.4.2.1. Немного основ, общие советы.

Для сборки проекта с помощью CMake в корневой директории проекта создается файл “CMakeLists.txt”, описывающий этот проект и его зависимости. Примеры компилирования библиотек с помощью утилиты CMake можно найти здесь:

Компиляция и установка библиотеки OpenAL

Компиляция и установка библиотеки ALUT (freealut)

1.4.2.2. Пример моего “CMakeLists.txt” для сборки примера “oldglutdemo.c” из пункта 2.2.9.1, с использованием библиотеки GLUT:

project(GLUT-Req)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)

set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/Qt/MinGW/lib")
set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/Qt/MinGW/include/GL;C:/Qt/MinGW/include")

##########################################################
find_package(OpenGL REQUIRED)
if(NOT OPENGL_FOUND)
    message(SEND_ERROR "Failed to find OpenGL")
    return()
else()
    include_directories(${OPENGL_INCLUDE_DIR})
endif()
##########################################################
find_package(GLUT REQUIRED)
if(NOT GLUT_FOUND)
    message(SEND_ERROR "Failed to find GLUT")
    return()
else()
    include_directories(${GLUT_INCLUDE_DIR})
endif()
##########################################################

link_libraries(${OPENGL_LIBRARY} ${GLUT_LIBRARIES})
add_executable(${PROJECT_NAME} ${SRC_LIST})

Текст выше нужно выделить и сохранить в файл с именем “CMakeLists.txt”, затем файл “oldglutdemo.c” и “CMakeLists.txt” нужно поместить в отдельную папку, например “C:\Qt\build\GLUT\glut-3.7.6\cmake-test”.

Далее набираем в консольном окне такие команды:

cmake -G "MSYS Makefiles"
make
make install

И в итоге получаем исполнительный файл “GLUT-Req.exe”. Обратите внимание на:

set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/Qt/MinGW/lib")
set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/Qt/MinGW/include/GL;C:/Qt/MinGW/include")

Без установки этих переменных CMake не видит библиотеку GLUT.

1.4.2.3. Переменные:

cmake -DCMAKE_INSTALL_PREFIX:PATH="/mingw" -DCMAKE_C_FLAGS:STRING="-march=i686" -DCMAKE_CPP_FLAGS:STRING="" -DCMAKE_CXX_FLAGS:STRING="" \
-DCMAKE_EXE_LINKER_FLAGS:STRING="-L/usr/local/lib -L/opt/local/lib" -DCMAKE_MODULE_LINKER_FLAGS:STRING="-L/usr/local/lib -L/opt/local/lib" \
-DCMAKE_SHARED_LINKER_FLAGS:STRING="-L/usr/local/lib -L/opt/local/lib" -G "MSYS Makefiles"

Из названий переменных все должно быть понятно:

-DCMAKE_INSTALL_PREFIX:PATH #- путь, куда будет устанавливаться программа после "make install".
-DCMAKE_C_FLAGS:STRING #- Установка флагов для файлов "*.c"
-DCMAKE_CPP_FLAGS:STRING / -DCMAKE_CXX_FLAGS:STRING #- Установка флагов для файлов "*.cpp" и "*.cxx" соответственно.
-DCMAKE_EXE_LINKER_FLAGS:STRING / -DCMAKE_MODULE_LINKER_FLAGS:STRING / -DCMAKE_SHARED_LINKER_FLAGS:STRING #- Установка файлов линковки.

Каталог с исходниками можно оставить в чистом состоянии. Для этого следует перейти в сборочный каталог (в данном случае “build_project”) и разверенуть в него дерево исходного кода с последующей генерацией Makefile’ов. Пример:

cd build_project/
cmake -G "MSYS Makefiles" --build ../project/src/

В аргумент “build” необходимо прописать путь до каталога с исходным кодом, который нужно оставить чистым. После выполнения команды в каталоге “build_project/” создастся полная копия дерева проекта и в этом каталоге можно будет выполнять дальнейшую сборку.

1.4.2.4. Кросскомпиляция с помощью CMake.

В папке с проектом создаем файл с расширением “.cmake”, например, “Toolchain-eldk-ppc74xx.cmake”, с подобным содержимым:

# this one is important
SET(CMAKE_SYSTEM_NAME Linux)
#this one not so much
SET(CMAKE_SYSTEM_VERSION 1)

# specify the cross compiler
SET(CMAKE_C_COMPILER   /opt/eldk-2007-01-19/usr/bin/ppc_74xx-gcc)
SET(CMAKE_CXX_COMPILER /opt/eldk-2007-01-19/usr/bin/ppc_74xx-g++)

# where is the target environment 
SET(CMAKE_FIND_ROOT_PATH  /opt/eldk-2007-01-19/ppc_74xx /home/alex/eldk-ppc74xx-inst)

# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

И конфигурируем проект:

cmake -DCMAKE_TOOLCHAIN_FILE=Toolchain-eldk-ppc74xx.cmake

Если переменная “CMAKE_FIND_ROOT_PATH_MODE_PROGRAM” установлена в NEVER, то будут использоваться инструменты из недр вашей системы. Если она установлена в ONLY, то будут использованы инструменты из каталога “CMAKE_FIND_ROOT_PATH/bin”. В этом случае следует быть осторожным, так как из поля видимости CMake пропадают некоторые кросс-утилиты из состава binutils, например tuple-ar и tuple-ranlib. Решить эту поблему можно с помощью создания симлинков на эти инструменты. Симлинки следует расположить в директорию “CMAKE_FIND_ROOT_PATH/bin”. В противном случае, при сборке проекта может возникать следующая ошибка:

Error running link command: No such file or directory

Подробнее можно прочесть тут: CMake Cross Compiling

1.4.3 Что почитать про CMake? (литература):

Из наиболее полезного:

  1. CMake Documentation [ENG]
  2. Введение в CMake [RUS]
  3. Используем Cmake для создания Makefile [RUS]

<< Перейти к содержанию

http://exlmoto.ru/mingw-development-environment/
http://www.linux.org.ru/forum/desktop/10819573
https://msys2.github.io/

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Почему не работают браузеры на windows xp
  • Как очистить кэш telegram windows
  • Как запретить установку драйвера устройства в windows 11
  • Как редактировать диски в windows 10
  • 0x803c0103 windows 10 как исправить