- MinGW — c и c++ компилятор для Windows
- Войдите в MinGW
- Настройка процесса сборки
- С make
- С CMake
- Особенности библиотек
- А как насчет этих зависимостей?
- Библиотеки DLL
- Как установить компилятор gcc / g++ для Windows. Установка gcc
- 0. Прежде чем поставить компилятор GCC
- 1. Скачиваем установщик компилятора
- 2. Установка GCC
- 3. Проверка установки
- 4. Бонус. Компиляция программ с помощью GCC
- Что ещё за a.out? Непонятно!
- А Вы знаете, что мы пишем программы на C, C++, C#, Pascal и Python?
- Почему именно мы?
- Как с нами связаться?
MinGW — c и c++ компилятор для Windows
Если говорить о релизах современных видеоигр, то всегда возникает вопрос о многоплатформенной поддержке. Когда вы создаете браузерную игру, браузер — это ваша платформа, и вы действительно не беспокоитесь об ОС под ней. При использовании популярного движка вы можете проверить, работают ли различные версии, но вы все еще в основном полагаетесь на способность оригинальных разработчиков заставить его работать на всех платформах.
Но все совершенно по-другому, когда ваша игра работает без движка или использует движок вашего собственного производства. Вы должны сами позаботиться о том, чтобы программа работала нормально на тех платформах, которые вы хотите поддерживать. Но еще до запуска есть вопрос сборки – вы должны фактически скомпилировать программу для целевой платформы.
Одним из способов сделать это, конечно, является наличие машины, работающей на указанной платформе (возможно, в режиме мультизагрузки), которая поставляется со своим собственным набором неприятностей. Другое решение — кросс – компиляция, и именно это я вкратце опишу здесь.
Войдите в MinGW
Для кросс-компиляции программ на C / C++ большинство разработчиков используют MinGW – минималистичный GNU для Windows, который, как следует из названия, представляет собой набор программ (порты gcc, gdb и т. Д.), заголовков и статических библиотек, позволяющих кросс-компиляцию материала для MS Windows на других платформах.
Настройка среды MinGW с нуля может быть утомительной, но, к счастью, самый популярный дистрибутивный пакет MinGW сам по себе и порты MinGW некоторых библиотек находятся в их репозиториях. Установить компилятор MinGW из дистрибутива так же просто, как и любое другое программное обеспечение.
# При установке на 64-битную Windows
root $ dnfinstall mingw64-gcc mingw64-gcc-g++ mingw64-…
# При установке на 32-битную Windows
root $ dnf установите mingw32-gcc mingw32-gcc-g++ mingw32-…
Настройка процесса сборки
Как только вы установили компилятор, пришло время взглянуть на ваш собственный проект и его систему сборки.
С make
Если вы используете make для управления процессом сборки, то, скорее всего, ваш Makefile уже отлично работает для кросс-компиляции, и вам не нужно будет вносить никаких изменений.
В принципе, на этом этапе есть два требования:
- Должна быть возможность указать, какой компилятор C / C++ следует использовать (например, через CC)
- Должна быть возможность указывать флаги компоновщика (например, через LDLIBS)
Если вы используете жестко закодированное имя компилятора или флаги, то пришло время отредактировать файл Makefile и привести его в форму. Как только все это будет сделано, просто укажите флаги кросс-компилятора MinGW и специфичного для Windows компоновщика, и все готово.
# Для 64-битных сборок
user $ CC=x86_64-w64-mingw32-gcc LDLIBS=-lmingw32 make [args…]
# Для 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», но проблема с использованием этой переменной заключается в том, что при вызове компилятора содержимое переменной помещается перед именами объектов, например:
x86_64-w64-mingw32-gcc -Wall -Wextra -lmingw32 -lm -o «build/my-game.exe» build/mygame.o build/stuff.o build/fluff.o
Поскольку порядок аргументов важен для компоновщика (библиотеки должны следовать за объектами, которые ссылаются на них), сборка, скорее всего, завершится неудачей с большим количеством ошибок «неразрешенной ссылки».
При указании библиотек через target_link_libraries () команда строится с именами библиотек, следующими за именами объектов, и все заканчивается прекрасно и денди. Как только вы внесете указанное изменение, продолжайте запускать CMake с помощью файла MinGWtoolchain.
# Для 64-битных сборок; другие дистрибутивы могут поместить файл toolchain под другой путь
user $ cmake-DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-mingw64.cmake [args…]
# Для 32-битных сборок; то же самое, что и выше, но с использованием 32-битного профиля
user $ cmake-DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-mingw32.cmake [args…]
# Как только файлы сборки будут сгенерированы с помощью правильного файла 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, доступные в менеджере пакетов, то просто установите что-нибудь из репозитория, и все будет в порядке.
root $ dnf install mingw64-SDL2 mingw64-SDL2_image mingw64-SDL2_mixer mingw64-SDL2_ttf
Способ средней сложности: установка предварительно скомпилированных зависимостей вручную
Хотя описанный выше сценарий, безусловно, самый простой, обработка зависимостей не так уж и сложна, если их авторы предоставляют файлы разработки MinGW. Например, рассмотрим библиотеку Аллегро. Релизы на GitHub содержат множество загружаемых вариантов каждой версии, среди которых есть наборы MinGWdev. Если вы загрузите один из них (выберите тот, который подходит для вашей цели кросс-компиляции) и распакуете архив, вы увидите такую структуру каталогов:
Каталоги в этом архиве содержат DLL-файлы (в bin/), заголовки (в include/) и файлы .a – проще говоря, все, что вам нужно, чтобы иметь возможность компилировать и связывать программу с Allegro, не компилируя саму Allegro. Теперь все, что осталось сделать, это скопировать эти файлы в MinGWroot – это /usr/x86_64-w64-mingw32/sys-root/mingw/ для 64-битных библиотек и /usr/i686-w64-mingw32/sys-root/mingw/ для 32-битных библиотек.
Сложный способ: компиляция зависимостей из исходного кода
В конце списка находится, конечно же, компиляция зависимостей из исходного кода. Хотя это и отнимает много времени, но все же относительно легко, так как вам просто нужно применить описанный выше подход к каждой нужной вам библиотеке.
По моему опыту, самая трудная часть компиляции всей цепочки зависимостей-это настройка каждого файла Makefile / CMakeLists.txt когда вы идете, чтобы заставить каждую библиотеку распознавать, где находятся ее зависимости – хотя вы можете избежать этого, установив каждую скомпилированную библиотеку в корневой каталог MinGW (если вы не возражаете против беспорядка, то есть).
Библиотеки DLL
Как только вы скомпилируете свою игру, последнее, что вам остается сделать, — это упаковать и опубликовать ее. Но для правильной работы исполняемого файла вам понадобятся все библиотеки DLL, от которых он зависит. Чтобы узнать, какие общие объекты динамически загружаемые библиотеки необходимы, вы можете использовать программу objdump:
user$ objdump -x my-awesome-game.exe | grep ‘Имя DLL:’
Теперь, когда вы знаете, какие библиотеки DLL необходимы, вам нужно найти и скопировать их. Если вы хотите сделать это вручную, имейте в виду, что библиотеки DLL могут зависеть от других библиотек DLL, поэтому захвата только прямых зависимостей EXE-файла вашей игры может быть недостаточно. Если вы ищете простой, автоматизированный способ, вы можете использовать copydeps, небольшую программу на Python, которая отлично подходит именно для этой цели.
Как установить компилятор gcc / g++ для Windows. Установка gcc
15 декабря 2018
Время чтения: 5 минут
Для того, чтобы писать программы на C/C++ обычно достаточно установить какую-нибудь интерактивную среду разработки (IDE), например, Visual Studio или Eclipse, однако иногда (обычно в целях обучения студентов) требуется создавать программы в обыкновенном текстовом редакторе и компилировать приложение, используя консоль и компилятор gcc. В Unix системах он обычно установлен прямо «из коробки», а вот на Windows системах такой роскоши не наблюдается. Более того, у многих пользователей возникает множество проблем при установке компилятора. Поэтому нами было принято решение написать данную статью, чтобы помочь всем тем, кому пришлось или приходится мучаться с установкой этого компилятора на Windows.
Кстати, если вдруг на вашей Unix системе не установлен GCC, то поставить его можно командой sudo apt install gcc , введя свой пароль и согласившись на установку.
0. Прежде чем поставить компилятор GCC
Перед тем как приступить к установке этого компилятора на ваш компьютер, убедитесь в том, что GCC ещё не установлен на нём. Для этого откройте консоль (нажмите Win + R, введите в появившемся окне cmd и нажмите клавишу Enter) и введите следующую команду: gcc —version и нажмите Enter. Если компилятор уже установлен, то выполненная команда выдаст примерно следующую информацию:
Если в окне консоли появилось сообщение с версией компилятора и другая информация о GCC (второй скриншот), значит компилятор уже установлен и больше дополнительно ничего делать не нужно. А вот если вывод командной строки такой:
— значит GCC ещё не установлен в системе, поэтому двигаемся дальше.
1. Скачиваем установщик компилятора
Чтобы поставить GCC на операционную систему Windows, необходимо скачать установочный файл для него. Сделать это можно здесь: equation.com/servlet/equation.cmd?fa=fortran. Найдите в таблице версию компилятора, которая вам больше нравится (мы рекомендуем скачивать самую последнюю, на текущий момент — это версия 8.2.0) и скачайте установщик для вашей системы (32 или 64 бит).
2. Установка GCC
После того, как файл был скачан, откройте в проводнике папку, в которую был скачан установщик и запустите его, кликнув по файлу дважды левой кнопкой мыши. Появится окно, требующее подтверждения действия. В нём нужно выбрать да (иначе ничего ставиться не будет).
Установщик начнёт работу и отобразит окно с консолью, а также окно с бежевым фоном, в котором попросит прочесть и принять (или отклонить) лицензионное соглашение. Нажимаем Accept.
После этого установщик попросит выбрать путь для установки, предложив по умолчанию путь C:\mingw . Если вам категорически не нравится этот путь — измените его на более подходящий на ваш взгляд, в противном же случае просто нажмите Install.
Теперь остаётся только дождаться окончания распаковки архивов и установки их на компьютер. Как только все файлы будут установлены, инсталятор сообщит об этом, после чего нужно будет нажать на кнопку Finish.
3. Проверка установки
По завершении работы установщика перезагрузите компьютер и вновь откройте окно командной строки, введите команду gcc —version и нажмите Enter. На этот раз ответ от этой команды должен будет совпадать со вторым скриншотом из пункта 0. Если это не так, то скорее всего работа установщика была некорректно или преждевременно завершена, так что просто начните установку заново.
Поздравляем! Теперь на вашем компьютере установлен компилятор GCC и вы можете писать программы на языках C и C++, а компилировать их через командную строку!
4. Бонус. Компиляция программ с помощью GCC
Теперь, когда у вас установлен компилятор GCC, вы можете создавать программы на C/C++, используя только текстовый редактор и консоль. Для этого создайте новый файл и назовите его как угодно (например, hello_world). Задайте ему расширение .c вместо .txt . Напишите (или скопируйте) текст программы на С в этот файл. Откройте командную строку (Win + R, cmd) и введите следующую команду gcc hello_world.c и нажмите Enter. Если код не содержит ошибок, то результатом команды будет пустота. В противном же случае вы увидите все ошибки, который нашёл компилятор в программе с указанием места этой ошибки. При этом в проводнике появится файл a.out.exe , который будет являться исполняемым файлом для написанной программы. Чтобы запустить его введите в консоли a.out (для Unix-систем нужно писать ./a.out ) и нажмите Enter.
Что ещё за a.out? Непонятно!
По умолчанию при компиляции программ GCC в качестве результата создаём исполняемый файл с именем a.out (если такой уже есть, то b.out и т.д.). Это может быть не очень удобно, если у вас в папке лежит сразу много программ, которые нужно скомпилировать и затем запустить. Неудобно хотя бы тем, что разобраться, что такое a.out, а что такое b.out и c.out может быть непросто. Именно поэтому мы рекомендуем компилировать программы с явным указанием имени выходного файла. делается это так: gcc имя_файла.c -o имя_программы .
В результате выполнения такой программы вместо a.out будет создаваться файл с именем, заданным в имя_программы. Например, если для файла hello_world.c мы хотим получить программу hello, то компилировать нужно такой командой: gcc hello_world.c -o hello .
Используя понятные имена выходных программ (исполняемых файлов), вы гарантируете себе простоту работы и сокращение времени на разбирательство спустя долгое время.
Программист, сооснователь programforyou.ru, в постоянном поиске новых задач и алгоритмов
Языки программирования: Python, C, C++, Pascal, C#, Javascript
Выпускник МГУ им. М.В. Ломоносова
А Вы знаете, что мы пишем программы на C, C++, C#, Pascal и Python?
Так что если Вам нужно написать программу на C/C++, C#, Pascal или Python — мы с радостью поможем с этим!
В том числе мы занимаемся репетиторством по информатике и программированию, а также готовим к ОГЭ и ЕГЭ!
Почему именно мы?
- Более 1800 выполненных заказов;
- Более 170 отзывов;
- Качественное решение
- Короткие сроки и привлекательные цены
- Различные акции и скидки
Как с нами связаться?
Programforyou — доверяя нам писать программы, вы получаете качественное решение в короткие сроки по привлекательной цене!