Сборка 32 битного Qt 5.2 с mingw64
От: nen777w  
Дата: 26.12.13 14:37
Оценка:
Хочу собрать Qt 5.2 с помощью mingw64 для 32 битного трагета.
Каким то образом куда то надо прописать ключик для компилятора "-m32", что бы он попал в Make файлы по которым соберется Qt.
Подскажите plz куда это нужно прописать?
Re: Сборка 32 битного Qt 5.2 с mingw64
От: DarkEld3r  
Дата: 26.12.13 14:54
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Хочу собрать Qt 5.2 с помощью mingw64 для 32 битного трагета.

N>Каким то образом куда то надо прописать ключик для компилятора "-m32", что бы он попал в Make файлы по которым соберется Qt.
N>Подскажите plz куда это нужно прописать?
В своё время, пробовал так делать. К сожалению, уже забыл подробности. Могу только сказать, что приходилось ещё и править (генерённые?) файлы, чтобы и (кажется) компилятору ресурсов нужный флаг передавать. В итоге не получилось и забил.
Re: Сборка 32 битного Qt 5.2 с mingw64
От: CaptainFlint http://flint-inc.ru/
Дата: 26.12.13 15:12
Оценка: 4 (1)
Здравствуйте, nen777w, Вы писали:

N>Хочу собрать Qt 5.2 с помощью mingw64 для 32 битного трагета.

N>Каким то образом куда то надо прописать ключик для компилятора "-m32", что бы он попал в Make файлы по которым соберется Qt.
N>Подскажите plz куда это нужно прописать?

Шаблоны для мейкфайлов живут в каталоге qtbase\mkspecs. Судя по всему, это будет платформа win32-g++. В этом подкаталоге поправь conf-файл, добавив нужные флаги.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re: Сборка 32 битного Qt 5.2 с mingw64
От: ichan  
Дата: 26.12.13 17:52
Оценка: 4 (1)
Здравствуйте, nen777w, Вы писали:

N>Хочу собрать Qt 5.2 с помощью mingw64 для 32 битного трагета.

N>Каким то образом куда то надо прописать ключик для компилятора "-m32", что бы он попал в Make файлы по которым соберется Qt.
N>Подскажите plz куда это нужно прописать?

флаги можно передаль скрипту ./configure или поправить файлы qtbase\mkspecs для интересующей тебя архитектуры.

Еще посмотри здесь и здесь
раздел "Adding New Configuration Features" это про кастомные mkspec файлы для и фичи.
Re[2]: Сборка 32 битного Qt 5.2 с mingw64
От: nen777w  
Дата: 26.12.13 19:59
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>Здравствуйте, nen777w, Вы писали:


N>>Хочу собрать Qt 5.2 с помощью mingw64 для 32 битного трагета.

N>>Каким то образом куда то надо прописать ключик для компилятора "-m32", что бы он попал в Make файлы по которым соберется Qt.
N>>Подскажите plz куда это нужно прописать?

CF>Шаблоны для мейкфайлов живут в каталоге qtbase\mkspecs. Судя по всему, это будет платформа win32-g++. В этом подкаталоге поправь conf-файл, добавив нужные флаги.


Поправил не помогает.
Точнее так qmake создается почему то всегда 64 битный.
Во воремя сборки самой библиотеки (mingw32-make.exe) moc.exe, rcc.exe создаются 32 битными... но запускаются c падением из за этого билд прекращается
Я так понимаю они теперь становятся зависимы от 32 битных dll, например libgcc_s_sjlj-1.dll — которая на самом деле является 64 битной так как лежит в каталоге mingw64\bin\
Каша-малаша короче получается.

Может я что то неправильно делаю, вы собирали так сами?
Re[3]: Сборка 32 битного Qt 5.2 с mingw64
От: CaptainFlint http://flint-inc.ru/
Дата: 26.12.13 20:30
Оценка:
Здравствуйте, nen777w, Вы писали:

CF>>Шаблоны для мейкфайлов живут в каталоге qtbase\mkspecs. Судя по всему, это будет платформа win32-g++. В этом подкаталоге поправь conf-файл, добавив нужные флаги.


N>Поправил не помогает.

N>Точнее так qmake создается почему то всегда 64 битный.
N>Во воремя сборки самой библиотеки (mingw32-make.exe) moc.exe, rcc.exe создаются 32 битными... но запускаются c падением из за этого билд прекращается
N>Я так понимаю они теперь становятся зависимы от 32 битных dll, например libgcc_s_sjlj-1.dll — которая на самом деле является 64 битной так как лежит в каталоге mingw64\bin\
N>Каша-малаша короче получается.

Тогда увы, помочь не смогу.

N>Может я что то неправильно делаю, вы собирали так сами?


К сожалению, я ни разу не пробовал собирать его через MinGW, только майкрософтовским компилятором. В mkspecs лазил, чтобы поиграться со статической сборкой (когда msvcrt вкомпиливается внутрь exe- и dll-файлов). Никаких проблем с этим не возникало, просто подправил флаг -MD на -MT, и всё сработало на ура, и для qmake, и для всего остального.

Может, просто этот -m32 был добавлен не во все места, где он необходим, поэтому и получилась такая мешанина, что часть файлов собиралась с ним, а часть — без него?
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[3]: Сборка 32 битного Qt 5.2 с mingw64
От: ichan  
Дата: 27.12.13 17:28
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Здравствуйте, CaptainFlint, Вы писали:


CF>>Здравствуйте, nen777w, Вы писали:


N>>>Хочу собрать Qt 5.2 с помощью mingw64 для 32 битного трагета.

N>>>Каким то образом куда то надо прописать ключик для компилятора "-m32", что бы он попал в Make файлы по которым соберется Qt.
N>>>Подскажите plz куда это нужно прописать?

CF>>Шаблоны для мейкфайлов живут в каталоге qtbase\mkspecs. Судя по всему, это будет платформа win32-g++. В этом подкаталоге поправь conf-файл, добавив нужные флаги.


N>Поправил не помогает.

N>Точнее так qmake создается почему то всегда 64 битный.
N>Во воремя сборки самой библиотеки (mingw32-make.exe) moc.exe, rcc.exe создаются 32 битными... но запускаются c падением из за этого билд прекращается
N>Я так понимаю они теперь становятся зависимы от 32 битных dll, например libgcc_s_sjlj-1.dll — которая на самом деле является 64 битной так как лежит в каталоге mingw64\bin\
N>Каша-малаша короче получается.

N>Может я что то неправильно делаю, вы собирали так сами?




Во первых у тебя нету надобности собитать тулзовини moc.exe, rcc.exe, qmake 32-битными. Они могут быть и 64 битными. Главное чтоб они все генерили правильно под 32 артитектуру. ТЫ путаешь понятие хоста и цели при кросс-компиляции (у тебя архитектура win64 а билдишь ты под win32). Цель — это то на чем должны тулзовини работать ( у тебя Win64) Цель это то под что должен генерироваться код те под Win32.
Тоесть библиотеки Qt у тебя должны билдиться 32 битными, а все вспомогательные тулзовины 64-битными. Смотри здесь и здесь.


Во вторых посмотри в каталог mingw64/x86_64-w64-mingw32/lib32/ там вроде 32-bit версии библиотек, похоже винда просто не нашла их.
Re[4]: Сборка 32 битного Qt 5.2 с mingw64
От: nen777w  
Дата: 27.12.13 20:26
Оценка:
I>Во первых у тебя нету надобности собитать тулзовини moc.exe, rcc.exe, qmake 32-битными. Они могут быть и 64 битными. Главное чтоб они все генерили правильно под 32 артитектуру.

Давай сначала:
1) Распаковываем архив с сырками в c:\Qt\qt-everywhere-opensource-src-minGW-x32-5.2.0
2) Идем в c:\Qt\qt-everywhere-opensource-src-minGW-x32-5.2.0\qtbase\mkspecs\win32-g++\qmake.conf
Правим его добавля -m32:

QMAKE_CFLAGS = -pipe -fno-keep-inline-dllexport -m32
и хоть и не нужно, но на всякий еще сюда:
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -m32
ну и в
QMAKE_LINK = $${CROSS_COMPILE}g++ -m32
QMAKE_LINK_C = $${CROSS_COMPILE}gcc -m32

3) Пишем батник в корне сырков:

set PATH=C:\MinGWw\x64\mingw64\bin;C:\Perl64\bin;C:\Qt\jom;C:\Qt\fart32;C:\Python27;
set PATH=%PATH%;c:\Windows\system32;
set LANG=en
configure.bat -platform win32-g++ -opensource -debug -debug-and-release -no-icu -no-accessibility -nomake examples -no-vcproj -no-cetest

4) Запускаем батник идем в C:\Qt\qt-everywhere-opensource-src-minGW-x32-5.2.0\qtbase\bin\
Наблюдаем... собирается qmake.exe — он 64-x битный
5) Далее mingw32-make.exe

Начинается сборка... В процессе собираются утилиты moc.exe и rcc.exe, и тем же билд скриптом запускается.

В результате получаем:
---------------------------
rcc.exe — Application Error
---------------------------
The application was unable to start correctly (0xc000007b). Click OK to close the application.
---------------------------
ОК
---------------------------

Ок..
Идем сами в C:\Qt\qt-everywhere-opensource-src-minGW-x32-5.2.0\qtbase\bin\ и пробуем запустить одну из них.
Предварительно подложив в этот каталог libgcc_s_sjlj-1.dll от которой они зависят.
C:\MinGWw\x64\mingw64\x86_64-w64-mingw32\lib32\

Результат то же.
Re[5]: Сборка 32 битного Qt 5.2 с mingw64
От: ichan  
Дата: 27.12.13 22:58
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Ок..

N>Идем сами в C:\Qt\qt-everywhere-opensource-src-minGW-x32-5.2.0\qtbase\bin\ и пробуем запустить одну из них.
N>Предварительно подложив в этот каталог libgcc_s_sjlj-1.dll от которой они зависят.
N>C:\MinGWw\x64\mingw64\x86_64-w64-mingw32\lib32\

N>Результат то же.\\


Если qmake.exe 64-битный, может все остальные тулзы тоже? Может нужно пожкинуть к ним в папку 64 версию libgcc_s_sjlj-1.dll ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.