Название: QT4.4 full static + VC2008 - это утопия?
Отправлено: Admin от Ноябрь 07, 2008, 09:45
Хотелось бы узнать, есть ли возможность собрать QT на MSVC2008 полностью статической. Что бы не было ни одной MS DLL. На данный момент есть зависимости msvcst81.dll и еще какой то рантам пакетик юзеру ставить нужно.
PS: да проблема обсуждалась тут, но как сделать полную статическую версию я не нашел.
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: Spicos от Ноябрь 07, 2008, 11:01
да вроде можно. ключик в qmake.conf помойму надо поменять с QMAKE_CFLAGS_RELEASE = -O2 -MD на QMAKE_CFLAGS_RELEASE = -O2 -MТ
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: Admin от Ноябрь 07, 2008, 12:02
нада будет попробовать
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: Sergey B. от Ноябрь 07, 2008, 12:25
http://wiki.qtcentre.org/index.php?title=Building_static_Qt_on_Windows_with_MSVC (http://wiki.qtcentre.org/index.php?title=Building_static_Qt_on_Windows_with_MSVC)
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: Admin от Ноябрь 07, 2008, 14:47
начал пробовать - доложу а не нашел ту ссылку потому что искал для 2008 :)
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: Detonator от Ноябрь 07, 2008, 14:48
У кого нибудь получилось? Я пару недель назад пробовал, сама Qt для статики скомпилилась (-MТd). А вот когда я ее линкую с основной программой (тоже -MТd) куча runtime функций для QtCored.lib и QtGuid.lib не находятся.
Если кому удалось, объясните пожалуйста полный процесс как что делать.
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: Detonator от Ноябрь 07, 2008, 18:05
Сегодня еще раз попробовал (все компилил и через -MT, и через -MTd), Qt компилится нормально, но конечное приложение не линкуется: То же самое с динамической - все нормально. В чем может быть проблема? 2>Linking... 2>dtypeengine.obj : error LNK2001: unresolved external symbol "public: static struct QVectorData QVectorData::shared_null" (?shared_null@QVectorData@@2U1@A) 2>dtypeengine.obj : error LNK2001: unresolved external symbol "public: static struct QListData::Data QListData::shared_null" (?shared_null@QListData@@2UData@1@A) 2>formattedtext.obj : error LNK2001: unresolved external symbol "public: static struct QListData::Data QListData::shared_null" (?shared_null@QListData@@2UData@1@A) 2>gamescriptengine.obj : error LNK2001: unresolved external symbol "public: static struct QListData::Data QListData::shared_null" (?shared_null@QListData@@2UData@1@A) 2>dtypeengine.obj : error LNK2001: unresolved external symbol "public: static struct QHashData QHashData::shared_null" (?shared_null@QHashData@@2U1@A) 2>gamemodule.obj : error LNK2001: unresolved external symbol "public: static struct QHashData QHashData::shared_null" (?shared_null@QHashData@@2U1@A) 2>gamescriptengine.obj : error LNK2001: unresolved external symbol "public: static struct QHashData QHashData::shared_null" (?shared_null@QHashData@@2U1@A) 2>scenescriptengine.obj : error LNK2001: unresolved external symbol "public: static struct QHashData QHashData::shared_null" (?shared_null@QHashData@@2U1@A) 2>dtypeengine.obj : error LNK2001: unresolved external symbol "private: static struct QByteArray::Data QByteArray::shared_null" (?shared_null@QByteArray@@0UData@1@A) 2>gamemodule.obj : error LNK2001: unresolved external symbol "private: static struct QByteArray::Data QByteArray::shared_null" (?shared_null@QByteArray@@0UData@1@A) 2>qtmaind.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "private: static struct QByteArray::Data QByteArray::shared_null" (?shared_null@QByteArray@@0UData@1@A) 2>scenescriptengine.obj : error LNK2001: unresolved external symbol "private: static struct QString::Data QString::shared_null" (?shared_null@QString@@0UData@1@A) 2>text.obj : error LNK2001: unresolved external symbol "private: static struct QString::Data QString::shared_null" (?shared_null@QString@@0UData@1@A) 2>formattedtext.obj : error LNK2001: unresolved external symbol "private: static struct QString::Data QString::shared_null" (?shared_null@QString@@0UData@1@A) 2>frame.obj : error LNK2001: unresolved external symbol "private: static struct QString::Data QString::shared_null" (?shared_null@QString@@0UData@1@A) 2>gamemodule.obj : error LNK2001: unresolved external symbol "private: static struct QString::Data QString::shared_null" (?shared_null@QString@@0UData@1@A) 2>gamescriptengine.obj : error LNK2001: unresolved external symbol "private: static struct QString::Data QString::shared_null" (?shared_null@QString@@0UData@1@A) 2>formattedtext.obj : error LNK2001: unresolved external symbol "private: static class QTextCodec * QString::codecForCStrings" (?codecForCStrings@QString@@0PAVQTextCodec@@A) 2>gamemodule.obj : error LNK2001: unresolved external symbol "private: static class QTextCodec * QString::codecForCStrings" (?codecForCStrings@QString@@0PAVQTextCodec@@A) 2>moc_frame.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QGraphicsWidget::staticMetaObject" (?staticMetaObject@QGraphicsWidget@@2UQMetaObject@@B) 2>moc_text.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QGraphicsWidget::staticMetaObject" (?staticMetaObject@QGraphicsWidget@@2UQMetaObject@@B) 2>moc_view.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QObject::staticMetaObject" (?staticMetaObject@QObject@@2UQMetaObject@@B) 2>moc_gamemodule.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QObject::staticMetaObject" (?staticMetaObject@QObject@@2UQMetaObject@@B) 2>moc_gamestate.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QObject::staticMetaObject" (?staticMetaObject@QObject@@2UQMetaObject@@B) 2>moc_gridlayout.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QObject::staticMetaObject" (?staticMetaObject@QObject@@2UQMetaObject@@B) 2>moc_stateobject.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QObject::staticMetaObject" (?staticMetaObject@QObject@@2UQMetaObject@@B) 2>moc_gamescriptengine.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QScriptEngine::staticMetaObject" (?staticMetaObject@QScriptEngine@@2UQMetaObject@@B) 2>moc_scenescriptengine.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QScriptEngine::staticMetaObject" (?staticMetaObject@QScriptEngine@@2UQMetaObject@@B) 2>moc_mainwindow.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QMainWindow::staticMetaObject" (?staticMetaObject@QMainWindow@@2UQMetaObject@@B) 2>moc_scene.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QGraphicsScene::staticMetaObject" (?staticMetaObject@QGraphicsScene@@2UQMetaObject@@B) 2>moc_sceneview.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QGraphicsView::staticMetaObject" (?staticMetaObject@QGraphicsView@@2UQMetaObject@@B) 2>moc_textbrowser.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QGraphicsProxyWidget::staticMetaObject" (?staticMetaObject@QGraphicsProxyWidget@@2UQMetaObject@@B) 2>qtmaind.lib(qtmain_win.obj) : error LNK2001: unresolved external symbol "public: static enum QSysInfo::WinVersion const QSysInfo::WindowsVersion" (?WindowsVersion@QSysInfo@@2W4WinVersion@1@B)
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: Admin от Ноябрь 08, 2008, 01:20
мой эксперимент не дошел до конца
был установленный MS VC 2008 захотел еще доставить MSDN MSDN откатил инсталяцию VC2008
короче оставил собиратся - щас еще дома попробую))
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: Admin от Ноябрь 08, 2008, 09:39
Так - эксперимент удался. Была взята Qt4.4.3, в mkspecs/win32-msvc2008/qmake.conf заменил с QMAKE_CFLAGS_RELEASE = -O2 -MD на QMAKE_CFLAGS_RELEASE = -O2 -MТ
и у CONFIG удалил опции embeded_dll embeded_exe
собрал QT собрал QWT собрал программу свою
получил вместо 6100K размера 6280K ( но пока проверит негде( )
PS: главное пересобрать ВСЕ библиотеки ( nmake clean & qmake & nmake)
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: Detonator от Ноябрь 08, 2008, 15:12
Перекомпилил Qt еще раз, сделал изменения как у тебя в посте выше. Вот такой bat файл cd C:\Qt\4.4.3 call C:\Qt\4.4.3\bin\qtvars.bat vsvars configure -static -debug-and-release -no-fast -exceptions -accessibility -stl -no-sql-sqlite -no-qt3support -no-opengl -qt-zlib -qt-gif -qt-libpng -qt-libmng -no-libtiff -qt-libjpeg nmake При линковке в конечное приложение все равно ошибки: Что я не так сделал? QtGuid.lib(qaccessible_win.obj) : error LNK2019: unresolved external symbol __imp__PlaySoundA@12 referenced in function "public: static void __cdecl QAccessible::updateAccessibility(class QObject *,int,enum QAccessible::Event)" (?updateAccessibility@QAccessible@@SAXPAVQObject@@HW4Event@1@@Z) 2>QtGuid.lib(qaccessible_win.obj) : error LNK2019: unresolved external symbol __imp__PlaySoundW@12 referenced in function "public: static void __cdecl QAccessible::updateAccessibility(class QObject *,int,enum QAccessible::Event)" (?updateAccessibility@QAccessible@@SAXPAVQObject@@HW4Event@1@@Z) 2>QtGuid.lib(qwininputcontext_win.obj) : error LNK2019: unresolved external symbol _ImmSetCandidateWindow@8 referenced in function "public: virtual void __thiscall QWinInputContext::update(void)" (?update@QWinInputContext@@UAEXXZ) 2>QtGuid.lib(qwininputcontext_win.obj) : error LNK2019: unresolved external symbol _ImmSetCompositionWindow@8 referenced in function "public: virtual void __thiscall QWinInputContext::update(void)" (?update@QWinInputContext@@UAEXXZ) 2>QtGuid.lib(qwininputcontext_win.obj) : error LNK2019: unresolved external symbol _ImmSetCompositionFontA@8 referenced in function "public: virtual void __thiscall QWinInputContext::update(void)" (?update@QWinInputContext@@UAEXXZ) 2>QtGuid.lib(qwininputcontext_win.obj) : error LNK2019: unresolved external symbol _ImmSetCompositionFontW@8 referenced in function "public: virtual void __thiscall QWinInputContext::update(void)" (?update@QWinInputContext@@UAEXXZ) 2>QtGuid.lib(qwininputcontext_win.obj) : error LNK2019: unresolved external symbol _ImmGetContext@4 referenced in function "struct HIMC__ * __cdecl getContext(struct HWND__ *)" (?getContext@@YAPAUHIMC__@@PAUHWND__@@@Z) 2>QtGuid.lib(qwininputcontext_win.obj) : error LNK2019: unresolved external symbol _ImmReleaseContext@8 referenced in function "void __cdecl releaseContext(struct HWND__ *,struct HIMC__ *)" (?releaseContext@@YAXPAUHWND__@@PAUHIMC__@@@Z) 2>QtGuid.lib(qwininputcontext_win.obj) : error LNK2019: unresolved external symbol _ImmNotifyIME@16 referenced in function "void __cdecl notifyIME(struct HIMC__ *,unsigned long,unsigned long,unsigned long)" (?notifyIME@@YAXPAUHIMC__@@KKK@Z) 2>QtGuid.lib(qwininputcontext_win.obj) : error LNK2019: unresolved external symbol _ImmGetCompositionStringA@16 referenced in function "long __cdecl getCompositionString(struct HIMC__ *,unsigned long,void *,unsigned long,bool *)" (?getCompositionString@@YAJPAUHIMC__@@KPAXKPA_N@Z) 2>QtGuid.lib(qwininputcontext_win.obj) : error LNK2019: unresolved external symbol _ImmGetCompositionStringW@16 referenced in function "long __cdecl getCompositionString(struct HIMC__ *,unsigned long,void *,unsigned long,bool *)" (?getCompositionString@@YAJPAUHIMC__@@KPAXKPA_N@Z)
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: Admin от Ноябрь 08, 2008, 16:07
у тебя в проект должна включаться либа winmm.lib или imp32.lib точно не помню MSDN дома нет глянь в нем, в каком файле PlaySound определна
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: Detonator от Ноябрь 08, 2008, 19:54
Добавил Imm32.lib, все скомпилилось и заработало, ура! Что то я ступил, грешил на саму Qt. Размер exe меньше чем все dll по отдельности, а ведь потом еще и сжать upx-м или подобным можно. Так что вариант со статической линковкой теперь для меня идеальный.
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: Admin от Ноябрь 08, 2008, 22:26
А ты не пробовал на чистом компьютере? Просит ли что нить еще? Чистого компа нет под рукой :( 8)
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: Detonator от Ноябрь 08, 2008, 22:48
Нет, под рукой тоже ничего нет. Интересно будет попробовать под Win98/2000 на всякий случай, под виртуалкой позже попробую.
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: Spicos от Ноябрь 10, 2008, 06:21
И это радует, что заработало.
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: mks56 от Ноябрь 10, 2008, 09:52
По-моему, должно требовать что-то подобное msvcrXX.dll. Или кому-нибудь удалось это победить?
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: ритт от Ноябрь 10, 2008, 10:32
перечитай тему
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: Detonator от Ноябрь 11, 2008, 23:21
По-моему, должно требовать что-то подобное msvcrXX.dll. Или кому-нибудь удалось это победить?
У меня скомпилилось все в статике, для запуска требует только стандартные виндовые dll: WSOCK32.dll IMM32.dll WINMM.dll KERNEL32.dll USER32.dll GDI32.dll ADVAPI32.dll SHELL32.dll ole32.dll OLEAUT32.dll
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: spirit от Ноябрь 12, 2008, 09:38
выложите мануал на вики, имхо будет полезно. :)
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: remiznik от Февраль 19, 2009, 21:35
сделал как тут написано вроде всё прошло успешно только теперь не могу собрать свой проект выдаёт ошибку QtCored4.lib(QtCored4.dll) : error LNK2005: "public: __thiscall QString::~QString(void)" (??1QString@@QAE@XZ) уже определен в test.obj QtCored4.lib(QtCored4.dll) : error LNK2005: "public: bool __thiscall QBasicAtomicInt::deref(void)" (?deref@QBasicAtomicInt@@QAE_NXZ) уже определен в test.obj msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) уже определен в LIBCMT.lib(typinfo.obj) msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) уже определен в LIBCMT.lib(typinfo.obj) LIBCMT.lib(crt0init.obj) : warning LNK4098: библиотека по умолчанию "msvcrtd.lib" противоречит использованию других библиотек; используйте параметр /NODEFAULTLIB:library test.obj : error LNK2001: неразрешенный внешний символ ""private: static struct QString::Data QString::shared_null" (?shared_null@QString@@0UData@1@A)" moc_test.obj : error LNK2001: неразрешенный внешний символ ""public: static struct QMetaObject const QDialog::staticMetaObject" (?staticMetaObject@QDialog@@2UQMetaObject@@B)"
может кто сталкивался ? подскажит как с этим бороться ?
Название: Re: QT4.4 full static + VC2008 - это утопия?
Отправлено: mks56 от Февраль 20, 2009, 13:40
1. Собирать проект нужно с ключом MT(d) вместо MD(d) 2. Имена статических библиотек qt также отличаются (4 - отсутствуют) 3. Библиотеки run-time для сборки примерно такие: gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib winspool.lib ws2_32.lib ole32.lib user32.lib msimg32.lib shell32.lib kernel32.lib uuid.lib advapi32.lib qtmaind.lib QtCored.lib QtGuid.lib Qt3Supportd.lib QtNetworkd.lib
|