Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT4] компиляция для другой OS 
:(
    Опции темы
devmstr
Дата 2.12.2007, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Как мне скомпелировать свой проект, например, что бы он мог корректно работать на другой OS(например для Windows, если я пишу в Linux-e).
Смотрю QT assistant, но все не могу найти, об этом никакой полезной инфы... :(
Всмысле в Линуксе все нормально компилится, но как мне получить .exe файл для Windows?

Это сообщение отредактировал(а) devmstr - 2.12.2007, 19:20


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
JackYF
Дата 2.12.2007, 19:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Цитата(devmstr @  2.12.2007,  19:18 Найти цитируемый пост)
но как мне получить .exe файл для Windows?

теоретически, можно попробовать кросс-компиляцию. Практически - столько гемора, что легче поставить Windows на виртуальную машину и скомпилировать там.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 2.12.2007, 19:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Придерживаюсь того же мнения. Даже теоретически - возьни будет столько, что себе дороже.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Любитель
Дата 2.12.2007, 20:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Ну, не знаю, как у кого. В дженту есть пакет crossdev, с помощью него ставим mingw32 (который будет собран под нашу платформу, но, само собой, генерить будет PE-шные файлы). Есть модули для eselect для переключения между профилями для компилятора, binutils, etc. В частности собирал так qemu (почти qemu), замучивись с MSys и всей путанницей под виндой.

Кросскомпиляция возможна (в любую сторону). Насчёт гемморно или нет - вручную не собира ни мингв под линем, ни линёвый гцц. Кто его знает...


--------------------
PM MAIL ICQ Skype   Вверх
JackYF
Дата 2.12.2007, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Цитата(Любитель @  2.12.2007,  20:18 Найти цитируемый пост)
Кросскомпиляция возможна (в любую сторону).

угу. ты мне буст собери под линухом для вин32. Компилятор, линкер, binutils, всё есть, что душа пожелает. Проблема в том, что мэйкфайлы не понимают, как собирать виндовые бинарники под линухом. Либо .so мне пихают, либо пытаются делать copy bla\foo\bar. > NUL в самом начале компиляции.

Ну его... себе дороже.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 2.12.2007, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Любитель, дело в том, что Qt немного более сложная система, чем MinGW(с ней и под виндой то бывают недопонимания в вопросах сборки - что уж говорить про кросскомпиляцию).
Точнее, господа из TT сделали её таковой, хотя, можно было сделать всё намного проще(мне так кажется).


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
devmstr
Дата 2.12.2007, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Грусно это всё :((


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
Любитель
Дата 2.12.2007, 20:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Цитата(JackYF @  2.12.2007,  20:23 Найти цитируемый пост)
ты мне буст собери под линухом для вин32

Врать не буду - не пробовал. Завтра приеду в Воронеж, вечером (за своим компом) попробую. smile

Цитата(archimed7592 @  2.12.2007,  20:23 Найти цитируемый пост)
Qt

Опчть-таки сам не пробовал, ибо нафиг не надо было. Но уж конкретно по кросскомпайлу куте столько туториалов... Специально попробую smile Скажем такой вриант: сама Qt + все стандартные демки без ActiveQt (вот за это не берусь) + возможно, без директ-иксовского рендеринга, собираются под моим дженту. В течение следующей недели отпишусь о результатах smile

Ок?


--------------------
PM MAIL ICQ Skype   Вверх
archimed7592
Дата 2.12.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Давай. Будем только благодарны за полученный опыт smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
JackYF
Дата 2.12.2007, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Цитата(Любитель @  2.12.2007,  20:57 Найти цитируемый пост)
Ок? 

договорились. Я буду искренне рад, если ты сумеешь буст кросс-собрать.
Про QT тоже весьма интересно smile



Это сообщение отредактировал(а) JackYF - 2.12.2007, 21:07


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
devmstr
Дата 2.12.2007, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Если получится, будет супер!!


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
Любитель
Дата 2.12.2007, 21:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Цитата(devmstr @  2.12.2007,  21:30 Найти цитируемый пост)
Если получится, будет супер!!

Ну, важно ещё, чтобы не просто получилось, а получилось при разумном количестве затрат smile




--------------------
PM MAIL ICQ Skype   Вверх
Любитель
Дата 9.12.2007, 00:03 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Итак - добрался, наконец, до дома, отпишусь о текущих результатах smile

Сразу решил ориентироваться, само собой, на произвольный дистр (никаких emerge crossdev!). Впрочем, по крайней мере насчёт самого МинГВ, всё оказалось банально до ужаса - на sf.net/projects/mingw есть готовый скрипт, задающий достаточно очевидные вопросы - с помощью него собрать кросскомпилятор не составит труда. То, что в итоге получилось, располагается (по дефолту) в ~/mingw. Соответственно ~/mingw/bin/* - исполняемые бинарники + рантаймовая длл-ка. Правда имеют они вид, что-то вроде (у меня) i686-mingw32-g++. Всё-таки так как все ожидабт видеть просто g++, gcc, ld, etc. - сделаем для простоты соответствующие симлинки (можно, конечно, понаставить более интелектуальных детектов - но оно нам надо?). Я делал  банально так:

Код

for tool in ./i686-mingw32-*; do
    ln -s $tool ${tool:15}
done


Буст
Итак, первым пунктом у нас был буст smile Нативная версия у меня, конечо, уже стояла (по сути, нужен лишь bjam). Распаковываем куды-нибудь сорсы. Теперь чуток поиздеваемся на jam-скриптами. Расположены они в tools/build/v1. Операционка вшивается в bjam при его сборке - то есть мой bjam уже знал, что он работает на лине. Вначале попробовал обмануть его тупо-нагло: добавил в самое начало allyourbase.jam:

Код

NT = true
UNIX = false


Этот вариант так просто не заработал. Дело даже не в том, что у меня cp вместо (x)copy и rm вместо del - это объяснить несложно. По непонятной причине вместо вызова компилятора я получал лишь вывод в консоль команды - и всё. Затем вызывался objcopy (чтой-то там с секциями творил - фиг его зачем): от него также выводилась строка вызова, но плюс он вызывался физически (и жаловался на отсутствие входного объектника). При ручном повторении команд всё срабатывало нормально - но это не выход.

Поэтому я оставил в покое справедливое мнение бэджама о мое ОСи. Вместо этого добавил в начало allyourbase.jam следующее (если посмотерть ниже этого же файла, то понятно - почему именно это smile ):

Код

if $(MINGW_CROSSBUILD)
{
    TOOLS = mingw ;

    SUFLIB          = .lib ;
    SUFOBJ          = .obj ;
    SUFEXE          = .exe ;
    SUFDLL          = .dll .lib ;
    gLINK_VARIABLE(.dll) = ;             # dlls are NOT linked to directly
    gLINK_VARIABLE(.lib) = NEEDLIBS ;    # instead, users link to import libs
    PREDLL          = "" ;

    LN              = cp -f ;
}


Впрочем, были ещё несколько изменений - аттачу дифф оргинальной tools/buildv1 и пропатченной.

Ещё не особо хотелось собирть питон под винду (архив с сорсами-то по идее один - но всё равно не охота). А так как, он (bjam) успешно продетектил мой питончик и начал хавать инклюды из /usr/include, а затем ругаться на всякий бред (вообщем-то понятно - какие-то конфиг.х, наверно, у питона есть...) - просто пробилдил без буст.питона:
Код

bjam -sMINGW_CROSSBUILD=true -sMINGW_ROOT_DIRECTORY=<path_to_mingw_dir> -without-python stage


Правда, в процессе билдинга получил кучу надписей о "FileClone action failed" - но это касалось попытки создать симлинки (учитывая LN = cp - просто копии) вида <libname_bla_bla_bla>.dll.1.3.31 -> <libname_bla_bla_bla>.dll. Откуда это исходило искать не стал - ибо билдинг, как таковой, от этого не обрывался, а бесполезный варнинг меня не слишком беспокоил. 

Вообщем, в stage получили всё, что надо, простые тесты собираются, работают из-под вайна (при копировании соответствующих длл-ок - если линкуем динамически). Вроде всё нормально.

Куте
С куте пока несколько похуже. :(

Проблема №1 - не обнаружил на компе сорсов от вин-версии.  smile От никсовой они несколько отличаются (на вскидку - в никсовую совсем не включена папочка винмейн). Вообщем, первые попытки собрать из никсовой версии что-то обломились быстро smile

Проблема №2 - виндовую версию достал только в пятницу. Что получилось сделать за вечер:

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

2. Компиляцию всей куте. И получению статических либ куте вида lib<lib_name>.a. Конечно, пытался собрать shared   smile 

Вообщем, если есть готовая нормально собранная куте - проблем скорее всего быть не должно. Но (!) - я не проверял:

1. Ищем, где у нас находятся mkspecs (в критическом случае пишем тривиальную программу, юзающую QLibraryInfo) - у меня сие /usr/share/qt4/mkspecs.

2. Создаём там какую-нибудь папочку - скажем, cross-mingw32.

3. В неё копируем всё из win32-g++ (два файла).

3. Из них берём qmake.conf и ищем строку проверки на MSys (MINGW_IN_SHELL, по-моему). Убираем всё проверку, и всю ветвь else (для чистого МинГВ) - оставлям мсисовский (блин, звучит!) ввариант (cp, rm, etc.).

4. В том же файле прописываем полные пути для g++, gcc, ar, etc. А также инклюд-директорию mingw, lib и include директории Qt. Для билдинга Qt ещё (к слову smile )) понадобится QT_SOURCE_TREE - путь к самой распакованной куте.

5. В начало того же файла всовываем строки из <наша_МинГВшная_куте>/mkspecs/qconfig.pri.

6. Всесто qmake запускаем qmake -spec cross-mingw32 (затем обычный make).

Для простых проджект-файлов с lib-темплейтом и строкой dll в конфиге (dll в кумейовскиз проджектах юзается для любых  шаред-либ - на любой платформе) - проверял, получая нормальный мейкфайл (с длл-кой в качестве тарджета smile ). В самой куте почему-то сие не так. Там правда, всё посложнее: куча инклюдов всяких *.pri - в итоге dll добавляется в конфиг уже из одного из pri-шек в недрах mkspecs/features. Вообщем - не было уже времени разбираться :(

Ну, пока вот-так вот... smile

Это сообщение отредактировал(а) Любитель - 9.12.2007, 03:58


--------------------
PM MAIL ICQ Skype   Вверх
JackYF
Дата 9.12.2007, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Любитель, за буст я снимаю шляпу. И попрошу всё-таки приаттачить дифф к сообщению или на мыло выслать, я-то не от праздного интереса хотел буст кросс-компилировать smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Любитель
Дата 9.12.2007, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Сорри, пока писал - забыл  smile 

Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  boost.diff 2,42 Kb


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1685 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.