- Кросскомпиляция программ для Windows с использованием MinGW, Boost и Cmake в openSUSE
- Установка MinGW и Boost
- Кросскомпиляция с использованием Cmake
- Список используемых источников
- KNZSOFT Разработка ПО, консультации, учебные материалы
- Князев Алексей Александрович. Независимый программист и консультант.
- Установка бесплатных средств разработки для C++ под Windows. Qt(QMake/CMake) + MinGW
- Введение
- Системы сборки QMake и CMake
- Инструменты компиляции — MinGW и средства от Microsoft
- Добавление путей к системной переменной PATH
- Последовательность шагов
- Проверка установленных инструментов
- Сборка с использованием QMake
- Сборка с использованием CMake
- Установка Qt под Windows при использовании MinGW (QMake/CMake) : Один комментарий
- Добавить комментарий Отменить ответ
Кросскомпиляция программ для Windows с использованием MinGW, Boost и Cmake в openSUSE
Давным-давно в далекой-далекой галактике один программист заметил, что проект скомпилированный в VisualStudio 2005 выполняется в Windows ощутимо медленнее, чем при использовании GCC в Linux. И решил программист сравнить производительности проекта при использовании VisualStudio и GCC под Windows.
Проект является приложением, написанным на языках С и С++ с использованием библиотек Boost и системы сборки CMake.
Ниже рассказывается о создании окружения для сборки проекта на базе кросскомпилятора MinGW-w64, библиотек Boost и Cmake в openSUSE 11.3 x86.
Установка MinGW и Boost
Установка не должна представлять особой сложности. MinGW-w64 есть в репозиториях openSUSE. Для компиляции приложений для Windows x86 нужно добавить в систему репозиторий http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_11.3/, а для Windows x86-64 — http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_11.3/.
После добавления репозитория необходимо установить следующие пакеты:
- mingw32-cross-binutils
- mingw32-cross-cpp
- mingw32-cross-gcc
- mingw32-cross-gcc-c++
- mingw32-headers
- mingw32-libgcc
- mingw32-libstdc++
- mingw32-runtime
- mingw32-filesystem
- mingw32-boost-devel
- mingw32-libboost_date_time
- mingw32-libboost_filesystem
- mingw32-libboost_graph
- mingw32-libboost_iostreams
- mingw32-libboost_math
- mingw32-libboost_program_options
- mingw32-libboost_random
- mingw32-libboost_regex
- mingw32-libboost_serialization
- mingw32-libboost_signals
- mingw32-libboost_system
- mingw32-libboost_test
- mingw32-libboost_thread
- mingw32-libboost_wave
- mingw32-libbz2
- mingw32-libbz2-devel
- mingw32-libexpat
- mingw32-libexpat-devel
- mingw32-icu
- mingw32-libicu
- mingw32-libicu-devel
- mingw32-zlib
- mingw32-zlib-devel
После установики нужно зайти под пользователем root и в файле /usr/i686-pc-mingw32/sys-root/mingw/include/mingw_inc/_socket_types.h (или /usr/x86_64-pc-mingw32/sys-root/mingw/include/mingw_inc/_socket_types.h , если вы установили MinGW для компиляции приложений под Windows x86-64) заменить
Это связано с тем, что в BSD-сокетах дискриптор сокета знаковый тип, а в Windows — беззнаковый. Если не сделать данную замену, то приложения использующие Boost.Asio, которая в Windows ожидает беззнаковый тип SOCKET не будут компилироваться. К негативным последствиям можно отнести потенциальную возможность неправильной работы приложений, которые расчитаны на то, что тип дескриптора сокета может быть только знаковым.
На этом установка окружения завершена.
DLL файлы для распространения приложения находятся в каталоге /usr/i686-pc-mingw32/sys-root/mingw/bin ( /usr/x86_64-pc-mingw32/sys-root/mingw/bin в случае Windows x86-64). Для того, чтобы определить, какие DLL-библиотеки использует скомпилированное приложение можно воспользоваться программой Dependency Walker, которая успешно работает под wine-1.3.10.
Кросскомпиляция с использованием Cmake
Для использования кросскомпиляции в Cmake необходимо создать файл настроек, путь к которому будет передаваться cmake через задаваемый в командной строке параметр CMAKE_TOOLCHAIN_FILE . В моем случае указание пути выглядело следующим образом:
Файл i686-pc-mingw32.cmake содержал следующие настрйки:
На этом установка завершена. Теперь можно компилировать Windows-приложения прямо из рабочего оружения на Linux.
Список используемых источников
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Это «Песочница» — раздел, в который попадают дебютные посты пользователей, желающих стать полноправными участниками сообщества.
Если у вас есть приглашение, отправьте его автору понравившейся публикации — тогда её смогут прочитать и обсудить все остальные пользователи Хабра.
Чтобы исключить предвзятость при оценке, все публикации анонимны, псевдонимы показываются случайным образом.
Не надо пропускать:
- рекламные и PR-публикации
- вопросы и просьбы (для них есть Хабр Q&A);
- вакансии (используйте Хабр Карьеру)
- статьи, ранее опубликованные на других сайтах;
- статьи без правильно расставленных знаков препинания, со смайликами, с обилием восклицательных знаков, неоправданным выделением слов и предложений и другим неуместным форматированием текста;
- жалобы на компании и предоставляемые услуги;
- низкокачественные переводы;
- куски программного кода без пояснений;
- односложные статьи;
- статьи, слабо относящиеся к или не относящиеся к ней вовсе.
KNZSOFT Разработка ПО, консультации, учебные материалы
Князев Алексей Александрович. Независимый программист и консультант.
Установка бесплатных средств разработки для C++ под Windows. Qt(QMake/CMake) + MinGW
Дата написания статьи: 2014-08-11
Дата последней правки: 2014-08-13
Введение
Установка средств разработки Qt на Windows может сопровождаться рядом сложностей, которые могут оказаться непреодолимыми для новичков, не знающих некоторые особенности использования Qt и тех средств инсталляции, которые можно найти на различных ресурсах Интернет.
Прежде всего, следует знать, что, для разных платформ, Qt распространяется на основе разных лицензий. Под Windows, на текущий момент, предлагаются как платная, так и бесплатная лицензия. После того, как компания Nokia продала в компанию Digia права на разработку платформы Qt (компания Nokia занималась разработкой Qt с 2008 по 2012 годы), бесплатная ветка Qt существенно обособилась и стала выставляться с отдельного ресурса. Сейчас, с целью предоставления клиентам наиболее полной информации о различных вариантах использования продукта, планируется объединение ресурсов, предоставляющих платные и бесплатные средства Qt. Кроме того, планируется объединение средств инсталляции для пакетов с разными лицензиями. Выпуск первого такого инсталлятора планируется на сентябрь 2014 года.
Все нововведения будут относиться к версии Qt5, в то время как версия Qt4 уже давно не интересует производителей и именно с ней, для некомерческих предложений, и существует ряд проблем установки под Windows.
В традициях, для версии Qt4, библиотека поставлялась в виде наборов, которые могли содержать, в разных комбинациях, следующие средства.
- Qt SDK — заголовочные файлы, динамические библиотеки, утилиты — все, что необходимо для сборки традиционных Qt-проектов, исключая сам компилятор.
- Источники Qt SDK. Как правило, источники содержали более полный набор элементов Qt SDK, которые можно было опционально скомпилировать.
- Среда разработки QtCreator. На сегодняшний день, данная бесплатная среда разработки является, на мой взгляд, лучшим выбором при разработке проектов на языке C/C++.
- Средства MinGW (Minimalist GNU for Windows). Включают в себя GNU компилятор для C++, утилиту сборки GNU make и прочий набор инструментов, необходимых для компиляции проектов с некоторого набора языков, включающих в себя языки C/C++.
К сожалению, не всегда в обозначение инсталлятора входят содержащиеся в нем средства. Именно это может смутить новичков, особенно, при невнимательном использовании инсталлятора. Обозначенные в инсталляторе средства могут указывать на его зависимость от этих средств. Так, например, если у инсталлятора стоит пометка (VS 2010), то многим понятно, что в этом инсталляторе содержатся средства для разработки в связке с Microsoft Visual Studio 2010, которая должна быть предварительно установлена. Однако, если у инсталлятора стоит пометка (MinGW 4.8.2), то, так как инструментарий MinGW распространяется свободно, то не очевидно, содержится в этом инсталляторе MinGW или нет. И действительно, есть инсталляторы, которые содержат и которые не содержат внутри себя MinGW. В последних, на одной из страниц визарда, может стоять ссылка на скачивание и установку MinGW, которая может оказаться устаревшей. Так, если зайти на оригинальный ресурс, Qt-Project, где официально предлагается для скачивания Qt4 SDK с бесплатной лицензией, то мы столкнемся с отсутствием средств MinGW в соответствующем инстялляторе для версии Qt4. Фактически, с официального ресурса мы установим нерабочие средства разработки, если сами не доработаем их до требуемого состояния.
Системы сборки QMake и CMake
Традиционно, проекты Qt поддерживаются нативной системой сборки QMake, которая поставляется со всеми дистрибутивами, однако, из-за ряда проблем, связанных с использованием QMake, разработчики, работающие с Qt, все чаще используют систему сборки CMake, которая не содержит проблем QMake и формирует информативную сборку (с отображением процента исполнения), что очень удобно для больших проектов, сборка которых может занять значительное время (особенно при сборке на виртуальных компьютерах).
Инструменты компиляции — MinGW и средства от Microsoft
Система фреймворков и библиотек классов Qt поддерживает две системы компиляции:
- Инструменты из коллекции компиляторов GNU и GNU Binutils
- Инструменты компиляции для языка C++ от Microsoft
Средства разработки GNU для платформы Windows, можно получить в пакете, который называется MinGW (Minimalist GNU for Windows). Сегодня, согласно оригинальному ресурсу предоставляющему MinGW, в пакет входят следующие портированные компоненты.
- Коллекция компиляторов GNU Compiler Collection (GCC), включая компиляторы с языков C, C++, Objective-C, ADA и Fortran.
- Утилиты GNU Binutils для Windows (ассемблер, линковщик, менеджер архивов).
- Инструментальные утилиты, упрощающие работу с командной строкой — MSYS.
- Инсталлятор, в виде графического менеджера, управляющего составом установленных инструментов.
Использование средств разработки от Microsoft для проектов Qt, предполагает установленную среду разработки Microsoft Visual Studio со средствами компиляции с языка C++. Если нет специального требования на использование компиляторов Microsoft, то удобно будет воспользоваться бесплатными средствами разработки. При выборе инсталлятора средств разработки Qt, обратите внимание на тип компилятора, для которого они предназначены.
Добавление путей к системной переменной PATH
При выполнении установки требуемых средств разработки, указанных ниже, может понадобиться добавление путей на директории установки этих средств к значению системной переменной PATH. Это можно выполнить следующим образом.
- Нажмите комбинацию клавиш Windows+Pause. Откроется окно «Панель управления->Система и безопасность->Система».
- В панели слева выберите пункт «Дополнительные параметры системы». Откроется окно «Свойства системы». На вкладке «Дополнительно», внизу, щелкните кнопку «Переменные среды». В открывшемся окне, в группе «Системные переменные» выберите системную переменную PATH и щелкните по кнопке «Изменить».
- Значение системной переменной PATH состоит из списка путей разделенных знаком точка с запятой. Чтобы добавить нужный путь, вставьте в конец списка символ точки с запятой и запишите после него требуемый путь.
- Закройте все окна панели управления и перегрузите приложения, которые должны получить обновленные записи путей.
Последовательность шагов
Использование данного инсталлятора отличается простотой, в том плане, что не требуется пользовательская установка со сложным выбором средств, которые требуются для конечной работы. К сожалению, устанавливая Qt для Windows я сталкивался с инсталляторами, которые содержат ошибки в зависимостях установки опций, и которые решаются установкой совершенно нелогичных флажков). В данной версии инсталлятора следует заметить только одну особенность. Он не содержит в себе MinGW в явном виде, и, вместо этого, на последней странице, перед запуском установки, сообщает о том, что для его работы нужен установленный MinGW и просит указать директорию его установки. Также, он предлагает ссылку, по которой можно попробовать установить MinGW, но, с учетом того, что инсталлятор Qt4 уже довольно старинный артефакт, а ссылки на ресурсы Интернет, могут меняться, то лучше подготовить установку MinGW предварительно, как мы и сделали на предыдущем шаге.
Если мы будем использовать сборку из командной строки, не используя средств разработки, то следует добавить путь на QtSDK в системную переменную PATH. Так же, это может потребоваться для работы CMake при наличии нескольких установленных версий Qt SDK. При наличии нескольких установленных версий Qt SDK в системных путях должен быть путь только на одну из версий — таким образом можно будет выполнять переключение используемых версий вне возможностей сред разработки, которые под каждую настроенную сборку автоматически формируют набор переменных окружения с требуемыми значениями.
Каждая из установок Qt SDK характеризуется &quuot;своим» экземпляром утилиты qmake.exe. Именно она знает где лежит все то, что необходимо для сборки проекта под данную версию Qt. Поэтому, путь на Qt SDK характеризуется путем на размещение ее экземпляра qmake.exe. В моем случае, это был путь C:\Qt\4.8.6\bin.
Проверка установленных инструментов
Создайте отдельную директорию. Например, директорию test. В этой директории создайте файл main.cpp со следующим содержимым.
Это код простейшей бесполезной оконной программы на Qt. После компиляции этого кода мы получим приложение, представляющееся на экране пустым окном с системными кнопками — свернуть, развернуть и закрыть.
Далее, продемонстрируем сборку данной программы средствами QMake и CMake. Пример является минимальным и совершенно корректным с точки зрения Qt4, поэтому любая ошибка в его сборке, фактически будет указывать на отсутствие того или иного инструмента. Чаще всего это будет означать отсутствие путей на инструмент или неправильную запись этого пути. Так же помните, что после редактирования системной переменной PATH требуется перезапустить приложение, в котором вы собираетесь использовать изменение значения системной переменной. Именно при запуске приложения формируется его окружение (environment) из текущих значений всех системных переменных операционной системы. Исключение из такого поведения я встречал только в Mac OS X.
Сборка с использованием QMake
Система сборки QMake является нативной для сборки Qt-проектов, поэтому пользоваться qmake очень просто. Она самостоятельно может создать файла проекта и сгенерировать по этому проектному файлу сценарий сборки под текущую конфигурацию вычислительно системы.
Откройте в директории нашего простейшего проекта консоль и выполните следующий набор команд. Знак ‘>’ является знаком приглашения к вводу команд в консоли Windows.
Команда «qmake -project» выполненная в директории с файлами проекта выполняет анализ файлов источников и на их основе формирует проектный файл для системы сборки QMake. Файл проекта QMake имеет расширение «pro». Имя файла будет совпадать с именем директории проекта. В нашем случае, это будет файл test.pro.
Следующая команда «qmake» выполняет формирование сценария сборки для утилиты «make» на основе проектного файла, созданного предыдущей командой. После ее выполнения будет сформирован файл сценария «Makefile».
Далее, команда «mingw32-make», выполняет созданный на предыдущем шаге сценарий из файла «Makefile». Результатом выполнения созданного сценария будет исполняемый файл test.exe созданный в поддиректории debug. При запуске данного файла должно будет открыться пустое окно приложения.
Сборка с использованием CMake
Система сборки CMake, к сожалению, не является такой автоматизированной, как QMake, но обладает, тем не менее, рядом преимуществ.
Проектный файл системы CMake для любого проекта носит фиксированное название CMakeLists.txt. Для нашего простого проекта его придется писать самому. Создайте в директории с файлом main.cpp файл CMakeLists.txt и заполните его следующим содержимым. Строки, начинающиеся со знака решетки (комментарии) можно не писать.
Чтобы не засорять текущую директорию множественными файлами с побочными продуктами компиляции, создадим отдельную директорию build для выполнения компиляции. Директория build должна содержаться в той же директории, что и файл проекта CMakeLists.txt. Зайдем в созданную директорию build и выполним в ней следующую команду cmake.
Ключ -G используется для указания генератора, который должен быть использован для создания сценария сборки. CMake поддерживает большое количество разных генераторов, которые могут быть использованы для создания сценариев сборки под различные известные среды разработки на разных платформах. В том числе, C++ Builder, MS Visual Studio, Eclipse и пр. По умолчанию, для разных платформ предлагаются разные генераторы. Если запустить cmake под *nix, то генератором по-умолчанию будет генератор с именем «Unix Makefiles», который формирует сценарий сборки для утилиты GNU make. Если запустить cmake.exe под Windows, то генератором по-умолчанию будет генератор «NMake Makefiles», формирующий сценарий сборки под утилиту nmake, входящей в состав инструментов сборки от Microsoft. Так как нам нужно создать сценарий сборки под средства, предоставляемые системой MinGW, то необходимо указать соответствующий генератор.
Следующим параметром запуска утилиты, является параметр, обозначаемый в виде двух точек. Этот значок является синонимом родительской директории, пришедшей в современный Windows из *nix через DOS. В утилиту cmake.exe следует передать директорию с файлом проекта, а в нашем случае, для сборки в директории build, такой директорией будет родительская директория.
В результате выполнения этой команды будет создан файл сценария Makefile, который, как и в случае с использованием QMake, можно будет выполнить командой mingw32-make.
Установка Qt под Windows при использовании MinGW (QMake/CMake) : Один комментарий
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.