Название: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: Имя пользователя от Апрель 07, 2012, 02:08 Доброго времени суток.
Пытаюсь собрать Qt 4.8.1 с помощью mingw (использую вот эту сборку (http://code.google.com/p/mingw-builds/) (от niXman) gcc 4.7). Система - windows 7 x64. Делаю вот так: Код: configure -debug-and-release -opensource -platform win32-g++-4.6 -shared -exceptions Код: In file included from ..\3rdparty\javascriptcore\JavaScriptCore\API\APICast.h:30:0, Можно ли это как-то исправить? Ошибки возникают в 3rdparty\javascriptcore, возможно, можно не собирать отдельные модули, чтобы обойти это? И заодно такой вопрос - если я использую компилятор x86_64, то как мне собрать 32-ух битную версию Qt? Есть флаг -m32/-m64 для компиляции и линковки, но куда его скормить Qt? Подходящих флагов при конфигурации не нашел. В тут (http://en.wikibooks.org/wiki/Opticks_Developer_Guide/Getting_Started/Building_Qt_From_Source) для майкрософтовского компилятора предлагают использовать разные варианты команд промпта. А с мингв что делать? Заранее спасибо за помощь. Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: kambala от Апрель 07, 2012, 11:59 Цитировать gcc 4.7 Цитировать -platform win32-g++-4.6 как-то подозрительно :)Цитировать И заодно такой вопрос - если я использую компилятор x86_64, то как мне собрать 32-ух битную версию Qt? Есть флаг -m32/-m64 для компиляции и линковки, но куда его скормить Qt? если не ошибаюсь, то этот флаг надо установить для переменной окружения CXXFLAGS, но лучше загляни в документацию gccНазвание: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: Имя пользователя от Апрель 07, 2012, 14:34 как-то подозрительно :) Дык заглянул в mkspecs - там для виндовс следующие опции доступны:win32-borland win32-g++ win32-g++-4.6 win32-icc win32-msvc2003 win32-msvc2005 win32-msvc2008 win32-msvc2010 Или это намёк на то, что gcc 4.7 не поддерживается? Ну да, может быть, но вдруг кто-то успешно им собирал. если не ошибаюсь, то этот флаг надо установить для переменной окружения CXXFLAGS, но лучше загляни в документацию gcc А для Qt куда это прописать?Вот, например, для "mkspecs\linux-g++-32" в qmake.conf вижу следующее: QMAKE_CFLAGS = -m32 QMAKE_LFLAGS = -m32 А для "mkspecs\linux-g++-64" соответственно: QMAKE_CFLAGS = -m64 QMAKE_LFLAGS = -m64 Будет ли мне достаточно, по аналогии, прописать эти флаги в "mkspecs\win32-g++-4.6\qmake.conf"? Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: kambala от Апрель 07, 2012, 14:48 Или это намёк на то, что gcc 4.7 не поддерживается? видимо да, официально пока не поддерживаетсяА для Qt куда это прописать? в строке конфигурации допиши -arch x86Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: Имя пользователя от Апрель 07, 2012, 16:21 в строке конфигурации допиши -arch x86 Спасибо. Как-то проглядел эту опцию. Правда вот тут (http://qt-project.org/doc/qt-4.8/configure-options.html#id-bc49dc08-9beb-422e-b501-dc9a96c64c2c) пишут:Цитировать -arch <arch> Specify an architecture. Available values for <arch>: * windows, windowsce, symbian, boundschecker, generic. Хотя и с "-arch x86" конфигурация прошла успешно.видимо да, официально пока не поддерживается Я не слишком хорошо (мягко говоря) в Qt разбираюсь - 3rdparty\javascriptcore - нужно для полноценной работы Qt?Возможно, это можно и не собирать? Допустим, если использовать "-no-webkit" или "-no-script"? Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: V1KT0P от Апрель 07, 2012, 16:24 Я не слишком хорошо (мягко говоря) в Qt разбираюсь - 3rdparty\javascriptcore - нужно для полноценной работы Qt? Как минимум еще QML должен требовать.Возможно, это можно и не собирать? Допустим, если использовать "-no-webkit" или "-no-script"? Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: kambala от Апрель 07, 2012, 16:48 в строке конфигурации допиши -arch x86 Спасибо. Как-то проглядел эту опцию. Правда вот тут (http://qt-project.org/doc/qt-4.8/configure-options.html#id-bc49dc08-9beb-422e-b501-dc9a96c64c2c) пишут:Цитировать -arch <arch> Specify an architecture. Available values for <arch>: * windows, windowsce, symbian, boundschecker, generic. Хотя и с "-arch x86" конфигурация прошла успешно.Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: Имя пользователя от Апрель 08, 2012, 03:24 Нашел решение, может кому-то поможет:
Код: src/3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: Имя пользователя от Апрель 08, 2012, 18:03 В общем Qt успешно собирается, но 64-ох битная версия (решил не экспериментировать сначала с флагами).
Пытаюсь собрать х32. В "mkspecs\win32-g++-4.6\qmake.conf" добавил следующие строчки: QMAKE_CFLAGS += -m32 QMAKE_LFLAGS += -m32 QMAKE_CXXFLAGS += -m32 Конфигурация проходит нормально, билдаю - получаю еррор диалог: moc.exe - Application Error The application was unable to start correctrly (oxc000007b). Click OK to close the application. И вывод в консоли: Код: mingw32-make.EXE[1]: Leaving directory `C:/Qt/4.8.1/src/winmain' Какие-нибудь советы? Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: niXman от Апрель 26, 2012, 23:57 т.е. ты собираешь в 64ех битной ОСи, используя 64ех битный компилятор, 32ух битную кутю?
я правильно понял? Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: Roma_F от Май 18, 2012, 17:03 т.е. ты собираешь в 64ех битной ОСи, используя 64ех битный компилятор, 32ух битную кутю? я правильно понял? Здравствуйте. Пытаюсь сделать тоже самое ). Qt 4.7.4, MinGW 4.7.0 (от niXman - x86_64-mingw32-gcc-4.7.0-release-c,c++,fortran-sjlj) (Win7 x64) В qmake.conf также добавил флаг -m32 для QMAKE_CFLAGS, QMAKE_LFLAGS и QMAKE_CXXFLAGS Запускал батником: Код: set LIB= Конфигурация прошла успешна, началась компиляция, обломилось на src/tools/bootstrap: Код: ..... Почему "ld.exe: skipping incompatible ...libbootstrap.a when searching for -lbootstrap"? Что ещё нужно настроить для кросскомпиляции из 64 для 32. Собираю таким способом, потому что когда собирал с помощью "i686-mingw32" ld.exe отъел 2 Gb памяти и упал, при сборке 64-битной версии qt ld.exe занимал в пике 5,7 Gb (но собралось успешно). Можно ли снизить потребление памяти при сборке какими-нибудь ключами? Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: niXman от Май 18, 2012, 17:54 команда линковки:
Цитировать g++ -Wl,-s -Wl,-subsystem,console -mthreads -o ..\..\..\bin\moc.exe release/moc.o release/preprocessor.o release/generator.o release/parser.o release/token.o release/main.o -L"d:\Qt\qt-4.7.4\src\tools\bootstrap\release" -lbootstrap -luser32 и тут, как ты сам можешь видеть, нет ключика '-m32'Цитировать Можно ли снизить потребление памяти при сборке какими-нибудь ключами? не собирать дебажную)Цитировать Собираю таким способом, потому что когда собирал с помощью "i686-mingw32" ld.exe отъел 2 Gb памяти и упал для моих последних сборок, используется ключик, который позволяет на 32ух битном хосте использовать процессу до 3Gb памяти.так что качайте с нового сайта проекта: http://sourceforge.net/projects/mingwbuilds/ Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: Roma_F от Май 18, 2012, 19:46 Спасибо за ответ.
Цитата: niXman и тут, как ты сам можешь видеть, нет ключика '-m32' Это я невнимательно редактировал qmake.conf - после моей строчки "QMAKE_LFLAGS += -m32" ниже шла строка "QMAKE_LFLAGS =" )Но сейчас, после исправления, получил то же что и автор темы - сообщение с "0xC000007b" и такой же лог. Цитата: niXman для моих последних сборок, используется ключик, который позволяет на 32ух битном хосте использовать процессу до 3Gb памяти. Блин, знал и про это исправление и про переход на sourceforge, но думал что у меня уже исправленная версия. так что качайте с нового сайта проекта: http://sourceforge.net/projects/mingwbuilds/ Скачал последнюю, запустил сборку. Позже отпишусь. Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: niXman от Май 18, 2012, 20:02 Цитировать знал и про это исправление и про переход на sourceforge, но думал что у меня уже исправленная версия. я сейчас точно не могу вспомнить, в какие конкретно сборки вкралась эта оплошность.дело в том, что эта опция в моих сборках используется довольно давно, чуть ли не с самого начала. но в какой-то момент, редактируя скрипты сборки ввиду каких-то изменений, случайно проглядел то, что этот ключик перестал использоваться. так я собрал некоторое кол-во сборок, и после чего, на другом форуме мне сообщили о том что не хватает памяти линковщику. после этого я исправил скрипты. и вроде как, эти сборки остались еще на прежней странице проекта. ты оттуда качал ту сборку которой не хватило памяти на линковку? недели три назад, я сам собирал qt-4.8.1-debug+release с помощью i686-mingw32-gcc-4.7.0. успешно. Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: Roma_F от Май 18, 2012, 23:04 QtGuid4.dll собрался. Линковщик занял ~2.8 GB памяти. (качал "i686-mingw-w64-gcc-4.7.0-release-c,c++,fortran").
Правда общая сборка завершилась принудительно на JavaScriptCore. Рецепт автора темы не помог, буду дальше разбираться. ты оттуда качал ту сборку которой не хватило памяти на линковку? Точно уже не могу сказать, у меня тогда голова пухла от этой сборки, накачал несколько версий mingw. Возможно это был "i686-mingw32-gcc-4.6.3-release-c,c++,fortran-sjlj"недели три назад, я сам собирал qt-4.8.1-debug+release с помощью i686-mingw32-gcc-4.7.0. успешно. Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: niXman от Май 18, 2012, 23:35 Цитировать общая сборка завершилась принудительно на JavaScriptCore. Рецепт автора темы не помог ну хз-хз.. мне помог.Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: Roma_F от Май 19, 2012, 15:33 ну хз-хз.. мне помог. для Qt 4.8.1 ?В Qt 4.7.4 оказалось две копии JavaScriptCore (разных версий). \src\3rdparty\javascriptcore\JavaScriptCore\ (2010-08-24) и \src\3rdparty\webkit\JavaScriptCore\ (2010-06-18) Исправил и там и там, всё собралось. Версия в 3rdparty\javascriptcore по моему даже не трогалась - нет папки "tmp" с объектниками. Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: niXman от Май 19, 2012, 16:06 Цитировать для Qt 4.8.1 ? да .Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: Имя пользователя от Декабрь 01, 2012, 17:05 т.е. ты собираешь в 64ех битной ОСи, используя 64ех битный компилятор, 32ух битную кутю? Да, именно так.я правильно понял? Кстати, ошибка "The application was unable to start correctrly (oxc000007b)" возникала из-за того, что в PATH были добавлены 64 битные дллки (те, которые в ...\x64-4.7.2-release-posix-sjlj-rev1\bin). Добавил в PATH путь к ...\mingw\x64-4.7.2-release-posix-sjlj-rev1\x86_64-w64-mingw32\lib32\. Теперь проблема в другом месте: Код: g++ -c -include tmp\obj\debug_shared\qt_pch.h -fno-keep-inline-dllexport -m32 -g -Wall -Wextra -frtti -fexceptions -mthreads -DQT_S Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: niXman от Декабрь 01, 2012, 17:19 Цитировать ошибка "The application was unable to start correctrly (oxc000007b)" возникала из-за того, что в PATH были добавлены 64 битные дллки (те, которые в ...\x64-4.7.2-release-posix-sjlj-rev1\bin). Добавил в PATH путь к ...\mingw\x64-4.7.2-release-posix-sjlj-rev1\x86_64-w64-mingw32\lib32\. я писал об этом тут: http://www.prog.org.ru/index.php?topic=18979.msg147921#msg147921Цитировать Для x86_64 компилятора, .dll модули для i686 цели располагаются в mingw/x86_64-w64-mingw32/lib32. далее.. эти две команды отличаются только тем, что вторая стрипает dll`ку, ибо релизная. Цитировать g++ -m32 -mthreads -shared -Wl,--out-implib,c:\Qt\qt-everywhere-opensource-src-4.8.3-x32\lib\libQtCored4.a -o ..\..\lib\QtCored4.dll object_script.QtCored.Debug -L"c:\Qt\qt-everywhere-opensource-src-4.8.3-x32\lib" -L"c:\Qt\qt-everywhere-opensource-src-4.8.3-x32\lib" -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32 tmp\obj\debug_shared\QtCored_resource_res.o единственное что приходит на ум, покажи команды сборки этих объектников: 1)"tmp\obj\debug_shared\QtCored_resource_res.o", 2)"tmp\obj\release_shared\QtCore_resource_res.o"g++ -m32 -Wl,-s -mthreads -shared -Wl,--out-implib,c:\Qt\qt-everywhere-opensource-src-4.8.3-x32\lib\libQtCore4.a -o ..\..\lib\QtCore4.dll object_script.QtCore.Release -L"c:\Qt\qt-everywhere-opensource-src-4.8.3-x32\lib" -L"c:\Qt\qt-everywhere-opensource-src-4.8.3-x32\lib" -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32 tmp\obj\release_shared\QtCore_resource_res.o Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: Имя пользователя от Декабрь 01, 2012, 19:57 единственное что приходит на ум, покажи команды сборки этих объектников: 1)"tmp\obj\debug_shared\QtCored_resource_res.o", 2)"tmp\obj\release_shared\QtCore_resource_res.o" Вот: Код: windres -i QtCored_resource.rc -o tmp\obj\debug_shared\QtCored_resource_res.o --include-dir=. -DQT_SHARED -DQT_THREAD_SUPPORT -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_BUILD_CORE_LIB -DQT_NO_USING_NAMESPACE -DQT_MAKEDLL -DQT_ASCII_CAST_WARNINGS -DQT3_SUPPORT -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -D_USE_MATH_DEFINES -DQLIBRARYINFO_EPOCROOT -DHB_EXPORT=Q_CORE_EXPORT -DQT_DLL -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 Посмотрел список опций windres , там есть: Цитировать -F target --target target Specify the BFD format to use for a COFF file as input or output. This is a BFD target name; you can use the --help option to see a list of supported targets. Normally windres will use the default format, which is the first one listed by the --help option. Target Selection. Вот только: Цитировать D:\>windres -F --help Так что хз чему эта опция равна по умолчанию.C:\mingw\x64-4.7.2-release-posix-sjlj-rev1\bin\windres.EXE: Can't detect target endianness and architecture. В гугле для mingw64 нашел такое: windres.exe -F pe-i386 В общем, спасибо за подсказку, буду пробовать. Вот только понять бы ещё как Qt передать опции для windres? Может можно прямо в следующую строчку добавить? QMAKE_RC = $${CROSS_COMPILE}windres Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: niXman от Декабрь 01, 2012, 21:34 windres входящий в состав сборок mingw-builds, так же является двух целевым.
я сейчас немогу вспомнить, и нет вендового компа под рукой, но у windres есть возможность указать целевую архитектуру. Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: Имя пользователя от Декабрь 01, 2012, 23:29 Да, я тоже нашел (выше писал). Но как Qt эту опцию передать хз.
Сделал тупо - заменил windres из 32 битной сборки. Пока собирается... позже сообщу о результатах. Похоже всё ок. :) Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: niXman от Декабрь 06, 2012, 10:44 это -
Цитировать QMAKE_RC = $${CROSS_COMPILE}windres не пробовал?Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: Имя пользователя от Декабрь 08, 2012, 19:16 не пробовал? Нет и не горю желанием пересобирать всё заново. :)Но совет запомнил, попробую в следующий раз как-то. Название: Re: Qt 4.8.1 + mingw (gcc 4.7) проблемы сборки Отправлено: korwru от Январь 05, 2013, 00:35 Код: QMAKE_RC = $${CROSS_COMPILE}windres -F pe-i386 |