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