Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Гурман от Февраль 15, 2016, 17:01



Название: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Февраль 15, 2016, 17:01
Для этого надо Qt 4.7.0 в 64 бита под этой виндой собрать. MinGW32 не умеет, выяснил это из разных форумов. Вроде есть MinGW-w64, но не ясно, соберётся ли им эта версия Qt, и вообще можно ли получить желаемое. Много чего обсуждают, у кого-то какие-то проблемы появляются, и ни разу не нашёл сообщения, что всё получилось. С Qt 4.х вообще не встречал, все сборки в 64 бита делают c Qt 5.x.

Что характерно - для нескольких разных Linux-ов и 32 и 64 бита варианты без проблем собирались и давно работают.

В общем, вопрос - кто делал подобное с Qt 4.7? Или хотя бы с Qt 4.8.x? Последовательность действий отличается от стандартной? Нужны какие-нибудь дополнительные действия? Это (https://wiki.qt.io/MinGW-64-bit) видел, там про Qt 5, про Qt 4.7.0 не ясно.


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: kambala от Февраль 15, 2016, 17:03
а если студией собрать?


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Февраль 15, 2016, 17:23
а если студией собрать?

не тот случай, не обсуждаемо


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Alex Custov от Февраль 15, 2016, 18:01
Я делал, обычная компиляция. Система должна быть 64-битной. Ставишь mingw 64-битный, компилишь Qt. Я компилил когда-то с помощью mingw 4.8.x, всё работало.


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Февраль 15, 2016, 18:30
Я делал, обычная компиляция. Система должна быть 64-битной. Ставишь mingw 64-битный, компилишь Qt. Я компилил когда-то с помощью mingw 4.8.x, всё работало.

вот этот (https://sourceforge.net/projects/mingw-w64/) mingw? или этот (https://sourceforge.net/projects/mingwbuilds/)? или этот (https://sourceforge.net/projects/mingw/files/)?


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: kai666_73 от Февраль 15, 2016, 19:43
Официальная дока:
https://wiki.qt.io/MinGW-64-bit

Раньше здесь были подходящие сборки Qt
http://tver-soft.org/qt64
но, по ходу, кануло в лету (
upd. Здесь еще доступно
https://sourceforge.net/projects/qt64ng/files/qt/x86-64/5.4.2/


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Февраль 15, 2016, 20:48
Официальная дока:
Здесь еще доступно

Спасибо, кэп... Но надо было полностью первое сообщение прочесть - там речь о Qt 4.7.x, с которым приложение собирается. Перевод его на 5.х никто не оплачивает.


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Alex Custov от Февраль 15, 2016, 21:28
Я делал, обычная компиляция. Система должна быть 64-битной. Ставишь mingw 64-битный, компилишь Qt. Я компилил когда-то с помощью mingw 4.8.x, всё работало.

вот этот (https://sourceforge.net/projects/mingw-w64/) mingw?

не совсем, но на том же сайте: https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Февраль 15, 2016, 22:07
Я делал, обычная компиляция. Система должна быть 64-битной. Ставишь mingw 64-битный, компилишь Qt. Я компилил когда-то с помощью mingw 4.8.x, всё работало.

вот этот (https://sourceforge.net/projects/mingw-w64/) mingw?

не совсем, но на том же сайте: https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/

Вот я оттуда скачивал только с другой страницы последнюю версию, называется mingw-builds-installer.exe. Говорит, что не может скачать repository.txt. Поискал про эту ошибку - оказывается она уже типа исправлена, скачал с другой ссылки  mingw-w64-installer.exe точно такого же размера, и также не работает. Win7 запущена в виртуалке, и разумеется в ней все защиты и брендмауер отключены, антивирусов нет, ничего в сети не мешает.


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Alex Custov от Февраль 15, 2016, 22:19
Вот я оттуда скачивал только с другой страницы последнюю версию, называется mingw-builds-installer.exe. Говорит, что не может скачать repository.txt. Поискал про эту ошибку - оказывается она уже типа исправлена, скачал с другой ссылки  mingw-w64-installer.exe точно такого же размера, и также не работает. Win7 запущена в виртуалке, и разумеется в ней все защиты и брендмауер отключены, антивирусов нет, ничего в сети не мешает.

Ты совсем не то скачал. Качай архивы из подкаталогов, например https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.9.2/threads-win32/seh/


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Февраль 15, 2016, 22:34
Вот я оттуда скачивал только с другой страницы последнюю версию, называется mingw-builds-installer.exe. Говорит, что не может скачать repository.txt. Поискал про эту ошибку - оказывается она уже типа исправлена, скачал с другой ссылки  mingw-w64-installer.exe точно такого же размера, и также не работает. Win7 запущена в виртуалке, и разумеется в ней все защиты и брендмауер отключены, антивирусов нет, ничего в сети не мешает.

Ты совсем не то скачал. Качай архивы из подкаталогов, например https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.9.2/threads-win32/seh/

И что с ними делать? Распаковать в C:\MinGW и настроить PATH? Или там что-то собирать надо? Если собирать, то чем?


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Alex Custov от Февраль 15, 2016, 23:10
И что с ними делать? Распаковать в C:\MinGW и настроить PATH?

распаковать куда-нибудь, и настроить PATH.


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Февраль 16, 2016, 18:51
Установил MinGW 64 4.8.1. Глухо не собирается Qt. При сборке moc.exe происходит фигня:

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

Не понятно - это дыра в дистрибутиве Qt 4.7.0, или что? В Windows XP 32 бита Qt 4.7.0 без проблем собирался с помощью MinGW еще более ранней версии. Но более раннего MinGW 64 бит нет в природе.


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: kai666_73 от Февраль 16, 2016, 19:20
Официальная дока:
Здесь еще доступно

Спасибо, кэп... Но надо было полностью первое сообщение прочесть - там речь о Qt 4.7.x, с которым приложение собирается. Перевод его на 5.х никто не оплачивает.
Сорри. Но тогда может быть самым простым будет перейти на 4.8.6 и использовать готовую сборку вот отсюда
https://sourceforge.net/projects/qt64ng/files/qt/x86-64/4.8.6/mingw-4.9/seh/


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Февраль 16, 2016, 19:28
может быть самым простым будет перейти на 4.8.6

нет, сейчас переходы на другие версии Qt исключены, надо собрать с 4.7.0 - это явно должно быть возможно, так как в Win32, Lin32 и Lin64 без проблем работает



Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Alex Custov от Февраль 16, 2016, 21:05
Установил MinGW 64 4.8.1. Глухо не собирается Qt. При сборке moc.exe происходит фигня:

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

А полная строка компиляции где происходит ошибка?


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Февраль 16, 2016, 21:35
да вот такое там присутствует:
Цитировать
-mthreads -Wl -o ..\..\..\bin\moc.exe

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

QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads -Wl
 
отсюда и попадает в Makefile - но как оно умудрялось тогда в win32 собирать?


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Old от Февраль 16, 2016, 21:49
-Wl это передача параметра линкеру. Правильно это должно выглядеть примерно так:
Код:
-mthreads -Wl,-o ..\..\..\bin\moc.exe
Это говорит линкеру генерировать целевой файл с этим именем.
Попробуйте добавить запятую (пробелов между этими опциями быть не должно).


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Alex Custov от Февраль 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


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Февраль 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 собирал.


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Февраль 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 на разных платформах - ни разу с такой ерундой не сталкивался.


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Alex Custov от Февраль 17, 2016, 16:13
Включать win32-g++-4.6 точно не надо - эта опция нужна только если компилятор версии 4.6.

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

P.S. От следующего сообщения ты не показал полный лог компиляции. Без него ничего понять невозможно.


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Февраль 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


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Март 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 в еще меньшем объеме ОЗУ виртуальной машины


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: ssoft от Март 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/ (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 битной версии, или пользоваться командной строкой.


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Март 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?


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Alex Custov от Март 07, 2016, 21:48
up
но упёрся в другой нежданчик - сборка дошла до отладочной библиотеки webkit, и начались чудеса - компоновщик съедает всю оперативную память (ему достаётся 1.4 ГБ или 98% в виртуальной машине)

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


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Март 07, 2016, 23:14
У виртуалки памяти 1.6 ГБ, больше дать не могу. Win7 на удивление умеет ужиматься, компоновщик получает до 1.4 ГБ. С ключом win32-g++-4.6 этого может хватить?

На машине с 2 ГБ физической памяти и хостом Linux 64, в виртуалке с 1 ГБ и гостевой Linux 32 дебаговый webkit без проблем собирался.


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Alex Custov от Март 08, 2016, 14:13
Win7 на удивление умеет ужиматься, компоновщик получает до 1.4 ГБ. С ключом win32-g++-4.6 этого может хватить?

Не факт. Я точно не помню сколько он сожрёт даже с g++-4.6.


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Март 09, 2016, 18:10
Меня сейчас больше интересует, вариант собирается. Пересобрал с явным указанием -platform, всё равно QMAKE_HOST.arch == x86 вместо x86_64.


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Alex Custov от Март 09, 2016, 18:30
я собирал на 64-битной системе Qt 4.8.6, QMAKE_HOST.arch был x86_64. Ты уверен, что использовал 64-битный компилятор? Если да, то запакуй и пришли скомпилированный Qt, посмотрим.


Название: Re:
Отправлено: Гурман от Март 09, 2016, 21:25
А смысл? Я посмотрел собранные DLLки в редакторе ресурсов - Qt собрался 64-х битный. Но указанная переменная qmake почему-то глухо x86. А мне нужно, чтобы была x86_64, у меня это в проектах используется.


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Март 10, 2016, 18:21
Выяснилось, почему у меня при всём вроде бы 64-х битном креатор хочет собрать 32-х битный проект. Оказывается, я установил 32-х битный QtCreator, хотя вроде выбирал где-то 64-х битный. В системных переменных есть автоматическая, которую устанавливает cmd, она содержит версию процессора: PROCESSOR_ARCHITECTURE=AMD64 так у меня она выглядит при выполнении set в командной строке. Но если я использую в проекте: message($$(PROCESSOR_ARCHITECTURE)) то в консоли QtCreator получаю Project MESSAGE: x86.


Название: Re: Приспичило собрать приложение под Win7 64 бита...
Отправлено: Гурман от Март 10, 2016, 23:30
В общем, всё получилось. Собирать 64-х битный Qt было влом, нашел собранный кем-то 3.0.0. Ругается на Qt, что нет точек входа в библиотеках - ну да, он же намного позднее, чем сам Qt, который я использовал. Но приложение собралось, и работает. ;D  Как я и ожидал, с Qt 4.8.6 и MinGW 4.9.2 всё проскочило сразу, без изменений - ессно, ведь оно у меня в Linux собирается каким-то GCC из последних, правда тоже с Qt 4.7.0. Это есть хорошо. Значит у меня приложение совместимо как минимум с Qt 4.8.6 и работает в средах Windows 32/64 и Linux 32/64. Это радовает!  :D

Уже хочу попробовать в Solaris и FreeBSD. Кто собирал в них Qt? Что там с версиями, разрядностью? Есть подводные камни?