Название: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: Tertium Organum от Апрель 05, 2007, 15:17 Надеюсь, это не выглядит как спам. Просто только недавно я делал топик по 4.2.0. Но там было несколько криво. Не ручаюсь, что здесь все наилучшим способом делается, но это работает, и на это ушло вобщем два дня.
Итак: 0. слили с того-что-нельзя-называть-дабы-не-упоминать-о-неупоминаемом-имя-которого-мы-не-произносим-вслух qt-win-commercial-src-4.2.3.zip 1. скопировали исходники в c:\qt\4.2.3 2. Создали файл .qt-license в Documents and Settings\<user name>\ 3. Вписали в него: # Qt license file (Created by the binary installer) LicenseID="XXXXXXXXX" Licensee="<user name>" LicenseKeyExt=XXXXXXX-XXXXXXX-XXX-XXXXXXX-XXXXXX-XXXXXX-XXXX генератор найти не составит труда 4.Находим C:\Qt\4.2.3\mkspecs\win32-msvc2005\qmake.conf. Правим в нем, чтобы линковать к кутешным либам MSVCRT статически: QMAKE_CFLAGS_RELEASE = -O2 -MD QMAKE_CFLAGS_DEBUG = -Zi -MDd на QMAKE_CFLAGS_RELEASE = -O2 -MT QMAKE_CFLAGS_DEBUG = -Zi -MTd Находим строку типа «CONFIG += qt warn_on release...» и убираем в ее конце директивы embed_manifest_dll и embed_manifest_exe 5. C:\Qt\4.2.3\projects.pro комментарим строку: # SUBDIRS += demos examples 6. Запускаем Пуск –> Microsoft Visual Studio 2005 ->Visual Studio Tools ->Visual Studio 2005 Command Prompt и пишем в ней: cd c:\qt\4.2.3 configure -debug-and-release -static -qt-libjpeg -qt-zlib -qt-gif -no-qt3support ждем, пока не напишет что теперь можно пускать nmake. Однако не nmake пускаем пока. 7. Заходим в папку C:\Qt\4.2.3\src\, открываем в студии src.sln. Выделяем все проекты с шифтом, заходим в Properties -> C/C++ -> Output files -> Program database file name Задаем строку: $(TargetDir)$(TargetName).pdb Теперь, если нужны будут pdb файлы (чтобы можно было в отладке свободно ходить), надо будет в студии сделать нужным либам Rebuild Selected. По месту создадутся одноименные либам pdbшники, а не как по дефолту vc8. Целиком собирать в студии я не стал, проще было воспользоваться nmake. 8. Компилим moc, rcc, uic. Без них сборка nmake'ом невозможна. В c:\qt\4.2.3\bin должны появиться соотв. экзешники. Студию не закрываем. 9. Если нужно не все, а только сама QT и тулзы, делаем простой батничек в c:\qt\4.2.3\, например, mybuild.bat : nmake sub-src nmake sub-tools 10. В консоли мокрософта пишем: mybuild.bat или просто nmake Ждем окончания компиляции nmake clean 11. Возвращаемся в студию, выделяем и билдим нужные нам библиотеки. Я компилил qtmain, QtGui, QtCore, QtNetwork, QtOpenGL, QtSQL, QtXML. Потом делаем в c:\qt\4.2.3\: del /f /s /q *.obj del /f /s /q *.ilk del /f /s /q *.pch 12. Процесс завершен. Теперь надо ставить qt-vsintegration-1.2.2.exe, скопированный с того-что-нельзя-называть-дабы-не-упоминать-о-неупоминаемом-имя-которого-мы-не-произносим-вслух. Папка с QT в результате занимает у меня 516 метров. Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: pastor от Апрель 05, 2007, 18:59 Дополню вышесказанное статьей: Building static Qt on Windows (http://wiki.qtcentre.org/index.php?title=Building_static_Qt_on_Windows)
Название: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: aliks-os от Апрель 06, 2007, 12:38 Скиньте мне пожалуйста на мыло адрес
того-что-нельзя-называть-дабы-не-упоминать-о-неупоминаемом-имя-которого-мы-не-произносим-вслух. добавлено спустя 2 часа 27 минут: А можно ли поставить и юзать все это на WinXP без установки VS. А то у меня нет его, а при сборке использую компилятор от Борланда и выскакивают куча ошибок Название: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: noosooth от Апрель 06, 2007, 17:06 Чтобы не плодить топики напишу тут.
Я тут недавно переписывал драйвер для одной железяки под виндой. Отладочную инфу от драйвера наблюдал в DebugView, а она до кучи перехватывала и OutputDebugString от win32 приложений. Смешно конечно. Отлаживал драйвер, а увидел что выводит в debugger Qt'овое приложение. Короче увидел я там, что моё поделие, собранное при помощи компилятора от VS2005 со static release Qt 4.2.3 + статически слинкованный runtime, сыпет при запуске и иногда в процессе работы qWarning'ами типа: Цитировать [2252] QObject::moveToThread: Current thread (01522428) is not the object's thread (00DA44A0). [2252] Cannot move to target thread (00DA44A0) Странно думаю, ведь сразу после запуска поток в программе у меня один. Полез собрал release /examples/mainwindows/mdi Та же фигня при запуске. На работе приложения оно вроде никак не сказывается. Спрашивается что в данном случае не нравится QObject::moveToThread? И кого он собственно move? P.S. Что-то похожее проскакивало тут (http://lists.trolltech.com/qt-interest/2007-02/thread00694-0.html), но как-то невнятно. Название: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: ReAmimaFan от Апрель 10, 2007, 15:16 Сделал все как было написано в первом посте и при попытке откомпилировать проек получаю
cannot open input file 'c:\Qt\4.2.2\lib\QtGui4.lib' Что я сделал не правильно подскажите плз. З.Ы. поделитесь кто нибудь ключиком к 4.2.3 Название: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: Tertium Organum от Апрель 12, 2007, 09:02 блин, QtGui4.lib - это статлиба для линковки dll!
надо грузить QtGui.lib или QtGuid.lib для отладочного проекта проект, создаваемый интегратором хочет динамическую куте по умолчанию ключик как и на все остальные продукты троллтека, здесь писать не дают, на личку кину Название: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: ReAnimaFan от Апрель 12, 2007, 12:30 Цитата: "Tertium Organum" надо грузить QtGui.lib или QtGuid.lib для отладочного проекта проект, создаваемый интегратором хочет динамическую куте по умолчанию Не подскажете как сделать так чтобы он хотел статическую куте? Буду очень благодарен. Название: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: Tertium Organum от Апрель 14, 2007, 00:15 просто прописать в настройках линкера -> инпут вместо QtGui4.lib
QtGui.lib Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: WW от Май 28, 2007, 12:50 Цитата: "Tertium Organum" 4.Находим C:\Qt\4.2.3\mkspecs\win32-msvc2005\qmake.conf. Правим в нем, чтобы линковать к кутешным либам MSVCRT статически: QMAKE_CFLAGS_RELEASE = -O2 -MD QMAKE_CFLAGS_DEBUG = -Zi -MDd на QMAKE_CFLAGS_RELEASE = -O2 -MT QMAKE_CFLAGS_DEBUG = -Zi -MTd Находим строку типа «CONFIG += qt warn_on release...» и убираем в ее конце директивы embed_manifest_dll и embed_manifest_exe А есть решение под MinGW. Чтобы "все свое ношу с собой". А то завязка на mingw32.dll остается... Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: pastor от Май 28, 2007, 13:52 Цитата: "WW" А есть решение под MinGW. Чтобы "все свое ношу с собой". А то завязка на mingw32.dll остается... Читаем по ссылке во вотром посте этой темы Название: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: WW от Май 28, 2007, 14:20 :D Пасиб! Слона-то и не приметил.
Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: Djavdet от Сентябрь 26, 2007, 11:28 для 4.3.1 версии QT схема покатит?
Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: pastor от Сентябрь 26, 2007, 14:44 Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: 3epo4 от Сентябрь 27, 2007, 11:42 Сделал все по инструкции, в итогде такие ошибки линковки:
Цитировать 1>------ Build started: Project: screenshot, Configuration: Release Win32 ------ 1>MOC screenshot.h 1>Compiling... 1>moc_screenshot.cpp 1>screenshot.cpp 1>main.cpp 1>Generating Code... 1>Linking... 1>MSVCRT.lib(MSVCR80.dll) : error LNK2005: _longjmp already defined in LIBCMT.lib(longjmp.obj) 1>MSVCRT.lib(MSVCR80.dll) : error LNK2005: _malloc already defined in LIBCMT.lib(malloc.obj) 1>MSVCRT.lib(MSVCR80.dll) : error LNK2005: _fprintf already defined in LIBCMT.lib(fprintf.obj) 1>MSVCRT.lib(MSVCR80.dll) : error LNK2005: ___iob_func already defined in LIBCMT.lib(_file.obj) 1>MSVCRT.lib(MSVCR80.dll) : error LNK2005: _free already defined in LIBCMT.lib(free.obj) 1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj) 1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj) 1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library 1>release\screenshot.exe : fatal error LNK1169: one or more multiply defined symbols found 1>screenshot - 8 error(s), 1 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: pastor от Сентябрь 27, 2007, 12:57 Сделал все по инструкции, в итогде такие ошибки линковки Очисть проект, перегенери мейк-файл или файл студийного проекта и попробуй собрать заново Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: WW от Сентябрь 27, 2007, 13:11 Эти ошибки сыпят тогда, когда Qt либы собраны по инструкции выше, а в опциях проекта - рантайм dll. Поправь проект и все соберется.
Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: 3epo4 от Сентябрь 27, 2007, 14:01 Эти ошибки сыпят тогда, когда Qt либы собраны по инструкции выше, а в опциях проекта - рантайм dll. Поправь проект и все соберется. В опции Runtime Library стоит Multi-threaded (/MT) или я что-то путаю? Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: pastor от Сентябрь 27, 2007, 15:08 В опции Runtime Library стоит Multi-threaded (/MT) или я что-то путаю? Все верно. А что за приложение вы пытаетесь собрать? Экзампл или свое? Попробуйте всеже nmake clean qmake nmake Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: 3epo4 от Сентябрь 27, 2007, 16:20 Все верно. А что за приложение вы пытаетесь собрать? Экзампл или свое? Попробуйте всеже nmake clean qmake nmake Попробовал, не работает, теже самые ошибки линкера. Собирал примеры Qt. Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: Hellraiser от Сентябрь 27, 2007, 17:07 Вот что дал поиск в MSDN по предупреждению линкера LNK4098:
Код: To use this run-time library ignore these libraries: И это действительно так. По умолчанию заточка идет под проект с поддержкой DLL. Для статической сборки надо явно указать директивы линкера. А Qt здесь не причем. Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: 3epo4 от Сентябрь 28, 2007, 06:05 Вот что дал поиск в MSDN по предупреждению линкера LNK4098: Код: To use this run-time library ignore these libraries: И это действительно так. По умолчанию заточка идет под проект с поддержкой DLL. Для статической сборки надо явно указать директивы линкера. А Qt здесь не причем. Спасибо, примеры теперь собираются, но Assistant не хочет, пишет: Цитировать main.obj : error LNK2019: unresolved external symbol "class QObject * __cdecl qt_plugin_instance_qjpeg(void)" (?qt_plugin_instance_qjpeg@@YAPAVQObject@@XZ) referenced in function "public: __thiscall StaticqjpegPluginInstance::StaticqjpegPluginInstance(void)" (??0StaticqjpegPluginInstance@@QAE@XZ) ..\..\bin\assistant.exe : fatal error LNK1120: 1 unresolved externals Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: Hellraiser от Сентябрь 28, 2007, 16:26 Ассистент хочет JPEG-плагин, идем в src/plugins/imageformats/jpeg и делаем последовательно qmake и nmake.
Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: 3epo4 от Сентябрь 28, 2007, 18:15 Ассистент хочет JPEG-плагин, идем в src/plugins/imageformats/jpeg и делаем последовательно qmake и nmake. JPEG-плагин ставится нормально, но компиляция Ассистента не выходит. Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: pastor от Сентябрь 28, 2007, 19:48 2 3epo4: Попробуйте зделать так:
Удалить имеющеюся сборку и начать заново. В <QTDIR>\mkspecs\win32-X\qmake.conf заменить QMAKE_CFLAGS_RELEASE = -O2 -MD QMAKE_CFLAGS_DEBUG = -Zi -MDd на QMAKE_CFLAGS_RELEASE = -O2 -MT QMAKE_CFLAGS_DEBUG = -Zi -MTd Далее просто сконфигурировать Qt как статическую: configure -static ..... Я делал именно так, никаких проблем. Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: 3epo4 от Сентябрь 29, 2007, 04:37 2 3epo4: Попробуйте зделать так: Удалить имеющеюся сборку и начать заново. В <QTDIR>\mkspecs\win32-X\qmake.conf заменить QMAKE_CFLAGS_RELEASE = -O2 -MD QMAKE_CFLAGS_DEBUG = -Zi -MDd на QMAKE_CFLAGS_RELEASE = -O2 -MT QMAKE_CFLAGS_DEBUG = -Zi -MTd Далее просто сконфигурировать Qt как статическую: configure -static ..... Я делал именно так, никаких проблем. Понятно. А дерективы embed_manifest_dll и embed_manifest_exe из CONFIG разве не надо убирать? Не в этом ли проблема "WARNING: Using static linking will disable the use of plugins. Make sure you compile ALL needed modules into the library." ? Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: 3epo4 от Сентябрь 29, 2007, 05:44 Переустановил Qt с исправленным qmake.conf, теперь всё ок.
Название: Re: 4.2.3 статически со стат. MSVCRT из сырцов с нуля Отправлено: pastor от Сентябрь 29, 2007, 10:41 Понятно. А дерективы embed_manifest_dll и embed_manifest_exe из CONFIG разве не надо убирать? Не в этом ли проблема "WARNING: Using static linking will disable the use of plugins. Make sure you compile ALL needed modules into the library." ? Если есть немного времени, вы можите добавить остальные флаги в qmake.conf и попробывать собрать Qt. имхо, проблема не в них, а где-то в пунктах начиная с 5 |