Comments 49
полезно. можно выкинуть винду
Её давно пора выкинуть! :)
Да дело даже не в самой винде. мы пользуемся билд-машинами… а они под винду не очень работают
правда есть другая проблема… там еще коло 3 библиотек надосбирать
правда есть другая проблема… там еще коло 3 библиотек надосбирать
Ну соль того же билдбота как раз в том, чтобы собирать платформонезависимо. Какие билд машины используете? Посмотрите на организацию сборщика у ScummVM (это отличный пример действительно кроссплатформенного приложения)
Поясните, пожалуйста, зачем? Тестировать под wine будете?
Преследовалось несколько целей. Самая главная из них — централизованная сборка, т.е. кросс-компиляция позволяет нам выделить одну машину (в нашем случае linux-сервер с OpenSuse), на которой осуществляется сборка приложения под все поддерживаемые операционные системы. Таким образом мы избавляемся от гетерогенности, и поддержка процесса сборки упрощается. Тестировать безусловно необходимо в Windows, после сборки приложение тестируется в родных системах.
Представьте — я разработчик и работаю в среде Ubuntu, я меняю что-то в исходных кодах. Теперь мне нужно проверить не сломалась ли при этом приложение в Windows, я просто кросс-компилирую, вместо того что бы держать еще одну полностью настроенную win-машину только для компиляции. Быстрее и удобнее. К слову можно делать кросс-компиляцию из win в nix, естественно.
Представьте — я разработчик и работаю в среде Ubuntu, я меняю что-то в исходных кодах. Теперь мне нужно проверить не сломалась ли при этом приложение в Windows, я просто кросс-компилирую, вместо того что бы держать еще одну полностью настроенную win-машину только для компиляции. Быстрее и удобнее. К слову можно делать кросс-компиляцию из win в nix, естественно.
Хм, насчет сервера кросскомпиляции я с вам соглашусь. Но как насчет идентичности окружения сборки и его влияния на получившийся бинарник? Есть ли какие-нибудь подводные камни?
Думаю есть как и везде. Например версия mingw компилятора из репозитория постоянно отстает от актуальной (не знаю уж насколько это критично). Не могу больше ничего плохого сказать, пока проблем не возникало (уже 4 месяца пользуюсь этой схемой компиляции). Могу предположить что могут быть проблемы если Вы захотите использовать какой-то специфичный функционал Windows, который не поддерживается mingw.
Я пробовал. Подводных камней никаких, в общем-то окружение идентичное — тот же самый ming32, и кстати есть возможность заюзать mingw64 и собирать под win64. А еще приятный бонус: компилятор и Qtшные утилиты навроде moc'а работают из Линукса процентов на 50 быстрее.
ну да — а протестировать работу можно и в виртуалке. Вот чтоб компилить в виртуалке — это надо маньяком быть.
Пользуясь случаем, хочу спросить:
Я начинающий программист на QT. При компиляции и запуске получившегося exe-файла, у меня выскакивает системная ошибка о требовании библиотек. Когда я кидаю в папку с exe-шником необходимые dll-файлы, приложение запускается нормально.
ВОПРОС: Неужели придется таскать за exe-шником эти все примерно 130 Мб библиотек?
Я начинающий программист на QT. При компиляции и запуске получившегося exe-файла, у меня выскакивает системная ошибка о требовании библиотек. Когда я кидаю в папку с exe-шником необходимые dll-файлы, приложение запускается нормально.
ВОПРОС: Неужели придется таскать за exe-шником эти все примерно 130 Мб библиотек?
Не 130 а ~10 в полной комплектации. И таки да, придется.
Добавлю еще, что как Вы возможно заметили есть библиотеки с постфиксом «d», эти библиотеки нужны для режима отладки, и таскать их с собой не надо, они как раз и составляют большую часть от тех 130 мб ;)
Можете использовать dependencywalker (http://www.dependencywalker.com/), что бы понять какие библиотеки Вам нужны.
Частой практикой является статическая линковка под Windows. Т.о. еще и сама Qt должна быть собрана с ключом -static.
Библиотека, о которой Вы говорите, называется «Qt». А «QT» — это общепринятая аббревиатура для QuickTime.
Кстати, строго аналогичным образом (но чуть сложнее) создается среда для кросскомпиляции под Симбиан. Работает этот зверек ну раз в 10 быстрее, чем родной SDK, запущенный из под Виндовса.
А Вы не знаете, с чем связана такая медленная работа виндового SDK? А то это ужасно напрягает. Сборка элементарного проекта занимает весьма ощутимое время.
По моим ощущениям тут виноват
1) Крайне тормозной перл
2) Какая-то ерунда с порождением процессов в Винде
3) Эта гадость начинает обсчитывать зачем-то все зависимости для сборки у каждого файла, в то время как в Линуксе она просто берет и пытается собрать.
4) windows SDK однопоточен!
1) Крайне тормозной перл
2) Какая-то ерунда с порождением процессов в Винде
3) Эта гадость начинает обсчитывать зачем-то все зависимости для сборки у каждого файла, в то время как в Линуксе она просто берет и пытается собрать.
4) windows SDK однопоточен!
Про многопоточность винды на примере прикручвания нитей к sbcl можете узнать много интересного в блоге широко известного в узких кругах dmitry_vk: dmitry-vk.livejournal.com/tag/win32
А можно ли просто поставить в wine SDK для винды?
> Компилятор gcc/g++ 4.4.3 (поставляется вместе с Ubuntu)
На сколько я помню — не в ходит в базовый дистрибутив, а так же ставится с репозитория. Просто его привычно ставим при первой же необходимости.
На сколько я помню — не в ходит в базовый дистрибутив, а так же ставится с репозитория. Просто его привычно ставим при первой же необходимости.
неужеле в убунту нет способа по проще?
и зачем ставить родное сдк?
в федоре: yum install mingw32-qt mingw32-qt-qmake
и зачем ставить родное сдк?
в федоре: yum install mingw32-qt mingw32-qt-qmake
Родное SDK нужно, для:
Сорри, продолжаю, для запуска:
1. qmake
2. moc
3. uic
4. idc
1. qmake
2. moc
3. uic
4. idc
Вообще, для любых приложений процесс кросскомпиляции (относится как к win-nix, так и к nix-win) сводится к следующему:
1. Компиляция mingw (набор из компилятора, сборщика, ассемблера и прочих низкоуровневых утилит) с вашей платформы на целевую.
2. Компиляция всех зависимостей (ВСЕ библиотеки, включая популярные iconv, gettext, zlib, ...) под целевую платформу.
3. Компиляция самого приложения под целевую платформу.
GNU-тые утилиты и приложения использующие automake и autoconf, позволяют легко сконфигурировать исходники для кросскомпиляции путем задания скрипту ./configure ключей build и target. В самом запущенном случае придется лезть в Makfile'ы и править кое-что ручками.
Пункт 2 сложен, но позволяет получить приложение, в котором вы определяете все параметры сборки, включая static, поддержку nls и прочие.
1. Компиляция mingw (набор из компилятора, сборщика, ассемблера и прочих низкоуровневых утилит) с вашей платформы на целевую.
2. Компиляция всех зависимостей (ВСЕ библиотеки, включая популярные iconv, gettext, zlib, ...) под целевую платформу.
3. Компиляция самого приложения под целевую платформу.
GNU-тые утилиты и приложения использующие automake и autoconf, позволяют легко сконфигурировать исходники для кросскомпиляции путем задания скрипту ./configure ключей build и target. В самом запущенном случае придется лезть в Makfile'ы и править кое-что ручками.
Пункт 2 сложен, но позволяет получить приложение, в котором вы определяете все параметры сборки, включая static, поддержку nls и прочие.
>GNU-тые утилиты и приложения использующие automake и autoconf, позволяют легко сконфигурировать исходники для кросскомпиляции путем задания скрипту ./configure ключей build и target. В самом запущенном случае придется лезть в Makfile'ы и править кое-что ручками.
В половине случаев гнутый autohell какой-то мрак генерит вместо makefile'ов
В половине случаев гнутый autohell какой-то мрак генерит вместо makefile'ов
Так ведь для конфигурирования и компиляции autohell (не слышал такого варианта, спасибо — повеселили) и не нужен. С ними мучаются разработчики, а клиенту остается лишь наковырять в консоли нужный configure и все…
К примеру для кросскомпиляции с 32 разрядной винды в 64-разрядную будет как-то так: ./configure --target=x86_64-w64-mingw32 --host=i686-pc-mingw32 при том, что minw для 64 разрядной платформы собран и лежит в нужном месте.
К примеру для кросскомпиляции с 32 разрядной винды в 64-разрядную будет как-то так: ./configure --target=x86_64-w64-mingw32 --host=i686-pc-mingw32 при том, что minw для 64 разрядной платформы собран и лежит в нужном месте.
Остается еще вопрос как при кроссплатформенной сборке собрать инсталлятор. Будут ли NSIS или Inno Setup нормально работать под wine?
Большое Вам спасибо за статью. За что люблю Хабр, вот только озадачишься какой-нибудь темой, как какой-нибудь добрый человек, вроде Вас, напишет статью и все разжует все :)
Почему QT Creator не компилирует приложения под Ubuntu? Просит компилятор. Как ему его дать?
Qt Creator не является компилятором. Под какой системой ты его запускаешь? Если тоже под Ubuntu, то установи g++.
А после установки g++ как прописать его в настройках QT Creator? ОС — Ubuntu.
либо скомпилировать их с помощью кросс-компиляции из исходников (что, как мне кажется, будет очень не просто)
Ух сколько я потратил на это времени… но собрал, но без phonon'а, к сожалению. Мда, в самом деле — не просто. Потом в справочной системе прочитал, что phonon под mingw не собирается. Windows SDK ему подавай.
А кто-нибудь собирал cross gcc x86-64 -> i686?
Sign up to leave a comment.
Qt & Ubuntu. Настраиваем среду для компиляции win32-приложений