Russian Qt Forum
Ноябрь 22, 2024, 22:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Приспичило собрать приложение под Win7 64 бита...  (Прочитано 19582 раз)
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #15 : Февраль 16, 2016, 21:05 »

Установил MinGW 64 4.8.1. Глухо не собирается Qt. При сборке moc.exe происходит фигня:

Цитировать
gcc: error: unrecognized command line option -Wl

А полная строка компиляции где происходит ошибка?
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #16 : Февраль 16, 2016, 21:35 »

да вот такое там присутствует:
Цитировать
-mthreads -Wl -o ..\..\..\bin\moc.exe

в форумах пишут, что в шаблонах qmake.conf присутствует

QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads -Wl
 
отсюда и попадает в Makefile - но как оно умудрялось тогда в win32 собирать?
« Последнее редактирование: Февраль 16, 2016, 21:42 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #17 : Февраль 16, 2016, 21:49 »

-Wl это передача параметра линкеру. Правильно это должно выглядеть примерно так:
Код:
-mthreads -Wl,-o ..\..\..\bin\moc.exe
Это говорит линкеру генерировать целевой файл с этим именем.
Попробуйте добавить запятую (пробелов между этими опциями быть не должно).
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #18 : Февраль 16, 2016, 22:11 »

да нет, -o это уже опция для записи бинарника moc. Видимо опция -Wl задана неверно. В Qt 4.8.6 её вообще нет:

Код:
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads

Следовательно, нужно либо конфигурировать без exceptions, либо самому исправить qmake.conf. Ещё думаю, что во время configure нужно указать mkspec win32-g++-4.6
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #19 : Февраль 17, 2016, 01:19 »

да нет, -o это уже опция для записи бинарника moc. Видимо опция -Wl задана неверно. В Qt 4.8.6 её вообще нет:

Код:
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads

Следовательно, нужно либо конфигурировать без exceptions, либо самому исправить qmake.conf. Ещё думаю, что во время configure нужно указать mkspec win32-g++-4.6

Включать win32-g++-4.6 точно не надо - эта опция нужна только если компилятор версии 4.6. А вот отключить иксепшны имеет смысл, я ими нигде не пользовался. Возможно даже отключал когда для win32 собирал.
Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #20 : Февраль 17, 2016, 14:17 »

С опцией -no-exceptions собрался moc, но теперь он слетает при компиляции corelib.

Цитировать
Makefile.Debug:586: recipe for target 'tmp/moc/debug_shared/moc_qabstractanimation.cpp' failed
mingw32-make[2]: *** [tmp/moc/debug_shared/moc_qabstractanimation.cpp] Error 2003130816
mingw32-make[2]: Leaving directory 'C:/Qt/4.7.0/src/corelib'
Makefile:40: recipe for target 'debug-all' failed
mingw32-make[1]: *** [debug-all] Error 2
mingw32-make[1]: Leaving directory 'C:/Qt/4.7.0/src/corelib'
Makefile:244: recipe for target 'sub-corelib-make_default-ordered' failed
mingw32-make: *** [sub-corelib-make_default-ordered] Error 2


Про ошибку 2003130816 гугл глухо молчит.

ЗЫ

С исправленным qmake.conf то же самое, слетает в этом же месте. Сколько раз собирал Qt 4.7 на разных платформах - ни разу с такой ерундой не сталкивался.
« Последнее редактирование: Февраль 17, 2016, 15:30 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #21 : Февраль 17, 2016, 16:13 »

Включать win32-g++-4.6 точно не надо - эта опция нужна только если компилятор версии 4.6.

если компилятор версии >= 4.6. Это не необходимо, но иногда нужно, если линкер сваливается с ошибкой нехватки памяти в debug режиме.

P.S. От следующего сообщения ты не показал полный лог компиляции. Без него ничего понять невозможно.
« Последнее редактирование: Февраль 17, 2016, 16:15 от Alex Custov » Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #22 : Февраль 17, 2016, 16:54 »

Последнее действие

Цитировать
mingw32-make[2]: Entering directory 'C:/Qt/4.7.0/src/corelib'
C:\Qt\4.7.0\bin\moc.exe -DQT_SHARED -DQT_THREAD_SUPPORT -DUNICODE -DQT_LARGEFILE
_SUPPORT -DQT_BUILD_CORE_LIB -DQT_NO_USING_NAMESPACE -DQT_MAKEDLL -DQT_ASCII_CAS
T_WARNINGS -DQT_MOC_COMPAT -DQT_USE_FAST_OPERATOR_PLUS -DQT_USE_FAST_CONCATENATI
ON -D_USE_MATH_DEFINES -DHB_EXPORT=Q_CORE_EXPORT -DQT_HAVE_MMX -DQT_HAVE_SSE -DQ
T_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_DLL -I"..\..\include" -I"..\..\include\QtCore"
 -I"tmp\rcc\debug_shared" -I"tmp" -I"global" -I"..\3rdparty\zlib" -I"..\3rdparty
\harfbuzz\src" -I"..\3rdparty\md5" -I"..\3rdparty\md4" -I"..\..\include\ActiveQt
" -I"tmp\moc\debug_shared" -I"..\..\mkspecs\win32-g++" -D__GNUC__ -DWIN32 animat
ion\qabstractanimation.h -o tmp\moc\debug_shared\moc_qabstractanimation.cpp
Makefile.Debug:586: recipe for target 'tmp/moc/debug_shared/moc_qabstractanimati
on.cpp' failed
mingw32-make[2]: *** [tmp/moc/debug_shared/moc_qabstractanimation.cpp] Error 200
3130816
mingw32-make[2]: Leaving directory 'C:/Qt/4.7.0/src/corelib'
Makefile:40: recipe for target 'debug-all' failed
mingw32-make[1]: *** [debug-all] Error 2
mingw32-make[1]: Leaving directory 'C:/Qt/4.7.0/src/corelib'
Makefile:245: recipe for target 'sub-corelib-make_default-ordered' failed
mingw32-make: *** [sub-corelib-make_default-ordered] Error 2
Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #23 : Март 02, 2016, 22:37 »

up

некоторое время некогда было заниматься этим вопросом, сегодня опять вернулся

почитал изменения в версиях Qt после 4.7.0, обнаружил, что в какой-то 4.7.х версии были проблемы при сборке в WinXP 64, значит в Win7 64 тоже не удивительно

решил собрать Qt 4.8.6, раз тут с ним получалось всё, и вроде по changes приложение должно с ним собраться без именений, запустил сборку в виртуалке Win7, она успешно проскочила место где последний раз спотыкалась, собрались несколько билиблиотек...

но упёрся в другой нежданчик - сборка дошла до отладочной библиотеки webkit, и начались чудеса - компоновщик съедает всю оперативную память (ему достаётся 1.4 ГБ или 98% в виртуальной машине), потребляет всего 2%-3% процессорного времени, при этом в каталоге появляется QtWebKitd4.dll 0-го размера, и так пару часов... при снятии компоновщика Ctrl-C в терминале, запускается mingw32-make, файл библиотеки он удаляет, но потом забирает 99% процессора, всё, можно ждать бесконечно, приходится снимать make в таскменеджере

места на диске вагон что тут не так - не понятно... QtCored4.dll давно и успешно собралась, и явно размерами побольше чем webkit

не то, чтобы в этом приложении мне сию секунду нужен был webkit, но вообще потом понадобится, да и странно как-то... на этой же физической машине в Astra Linux "Орёл" 64 бита Qt 4.7.0 без проблем собирался с помощью GNU CPP в еще меньшем объеме ОЗУ виртуальной машины
Записан

2^7-1 == 127, задумайтесь...
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #24 : Март 03, 2016, 08:19 »

Для этого надо Qt 4.7.0 в 64 бита под этой виндой собрать. MinGW32 не умеет, выяснил это из разных форумов. Вроде есть MinGW-w64, но не ясно, соберётся ли им эта версия Qt, и вообще можно ли получить желаемое. Много чего обсуждают, у кого-то какие-то проблемы появляются, и ни разу не нашёл сообщения, что всё получилось. С Qt 4.х вообще не встречал, все сборки в 64 бита делают c Qt 5.x.
В общем, вопрос - кто делал подобное с Qt 4.7?

Я собирал проект Qt 4.7.4 с помощью mingw-w64 https://sourceforge.net/projects/mingw-w64/ версия x86_64-5.3.0-posix-seh-rt_v4-rev0
Есть небольшие особенности).

Мои ремарки по сборке 64 бит. Пришлось отключить tiff и поправить исходники.

Код:
configure.exe -opengl desktop -fast -nomake demos -nomake examples -no-libtiff -mp

Изменения в исходных кодах

./src/corelib/tools/qsimd.cpp

поменять в строке 288

Код
C++ (Qt)
#if defined(Q_CC_GNU)
   quint64 tmp;
   asm ("xchg %%rbx, %1\n"
        "cpuid\n"
        "xchg %%rbx, %1\n"
       : "=c" (feature_result), "=&r" (tmp)
       : "a" (1)
       : "%edx"
       );
#elif defined (Q_OS_WIN64)
   {
      int info[4];
      __cpuid(info, 1);
      feature_result = info[2];
   }
#endif
 

вместо

Код
C++ (Qt)
#if defined (Q_OS_WIN64)
   {
      int info[4];
      __cpuid(info, 1);
      feature_result = info[2];
   }
#elif defined(Q_CC_GNU)
   quint64 tmp;
   asm ("xchg %%rbx, %1\n"
        "cpuid\n"
        "xchg %%rbx, %1\n"
       : "=c" (feature_result), "=&r" (tmp)
       : "a" (1)
       : "%edx"
       );
#endif
 

Весь проект собирается.

Надо отметить, что QtCreator 32 bit не дружит с qmake 64 bit, его также необходимо пересобрать в 64 битной версии, или пользоваться командной строкой.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #25 : Март 07, 2016, 19:16 »

С грехом пополам пробился через проблемы сборки Qt (библиотеки webkit с отладчиком вообще подсунул из готового, собранного таким же компилятором из такой же версии Qt). Настраиваю проект и упёрся в такой косяк:

в проекте есть

win32:contains(QMAKE_HOST.arch, x86):{
    SYSTEM_SUFFIX = w32
}
win32:contains(QMAKE_HOST.arch, x86_64):{
    SYSTEM_SUFFIX = w64
}

и QMAKE_HOST.arch глухо содержит x86, хотя в виртуалке установлен, разумеется, mingw32, компилятор в настройках указан 64 бита - а вот сам qmake - не совсем понятно, он 32-х битный что ли? у меня в 64-х битной ОС собрался 32-х битный Qt? как могло такое получиться?

у кого-нибудь есть 32-х битный Qt 4.8.6, собранный с помощью mingw 4.9.2? какой там размер, например QtWebKit4.dll?
« Последнее редактирование: Март 07, 2016, 19:26 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #26 : Март 07, 2016, 21:48 »

up
но упёрся в другой нежданчик - сборка дошла до отладочной библиотеки webkit, и начались чудеса - компоновщик съедает всю оперативную память (ему достаётся 1.4 ГБ или 98% в виртуальной машине)

Линковка debug webkit очень жирная. Иногда помогает mkspec win32-g++-4.6, но если памяти мало, то не поможет и он.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #27 : Март 07, 2016, 23:14 »

У виртуалки памяти 1.6 ГБ, больше дать не могу. Win7 на удивление умеет ужиматься, компоновщик получает до 1.4 ГБ. С ключом win32-g++-4.6 этого может хватить?

На машине с 2 ГБ физической памяти и хостом Linux 64, в виртуалке с 1 ГБ и гостевой Linux 32 дебаговый webkit без проблем собирался.
« Последнее редактирование: Март 07, 2016, 23:16 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #28 : Март 08, 2016, 14:13 »

Win7 на удивление умеет ужиматься, компоновщик получает до 1.4 ГБ. С ключом win32-g++-4.6 этого может хватить?

Не факт. Я точно не помню сколько он сожрёт даже с g++-4.6.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #29 : Март 09, 2016, 18:10 »

Меня сейчас больше интересует, вариант собирается. Пересобрал с явным указанием -platform, всё равно QMAKE_HOST.arch == x86 вместо x86_64.
« Последнее редактирование: Март 09, 2016, 18:15 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.097 секунд. Запросов: 22.