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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QT4.4 full static + VC2008 - это утопия?  (Прочитано 18515 раз)
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« : Ноябрь 07, 2008, 09:45 »

Хотелось бы узнать, есть ли возможность собрать QT на MSVC2008 полностью статической. Что бы не было ни одной MS DLL. На данный момент есть зависимости msvcst81.dll и еще какой то рантам пакетик юзеру ставить нужно.

PS: да проблема обсуждалась тут, но как сделать полную статическую версию я не нашел.
Записан
Spicos
Гость
« Ответ #1 : Ноябрь 07, 2008, 11:01 »

да вроде можно.
ключик в qmake.conf помойму надо поменять
с
QMAKE_CFLAGS_RELEASE   = -O2 -MD
на
QMAKE_CFLAGS_RELEASE   = -O2 -MТ
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #2 : Ноябрь 07, 2008, 12:02 »

нада будет попробовать
Записан
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #3 : Ноябрь 07, 2008, 12:25 »

http://wiki.qtcentre.org/index.php?title=Building_static_Qt_on_Windows_with_MSVC
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #4 : Ноябрь 07, 2008, 14:47 »

начал пробовать - доложу
а не нашел ту ссылку потому что искал для 2008 Улыбающийся
Записан
Detonator
Гость
« Ответ #5 : Ноябрь 07, 2008, 14:48 »

У кого нибудь получилось?
Я пару недель назад пробовал, сама Qt для статики скомпилилась (-MТd). А вот когда я ее линкую с основной программой (тоже -MТd) куча runtime функций для QtCored.lib и QtGuid.lib не находятся.

Если кому удалось, объясните пожалуйста полный процесс как что делать.
« Последнее редактирование: Ноябрь 07, 2008, 15:14 от Detonator » Записан
Detonator
Гость
« Ответ #6 : Ноябрь 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)
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #7 : Ноябрь 08, 2008, 01:20 »

мой эксперимент не дошел до конца

был установленный MS VC 2008
захотел еще доставить MSDN
MSDN откатил инсталяцию VC2008

короче оставил собиратся - щас еще дома попробую))
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #8 : Ноябрь 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)
Записан
Detonator
Гость
« Ответ #9 : Ноябрь 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)
« Последнее редактирование: Ноябрь 08, 2008, 15:17 от Detonator » Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #10 : Ноябрь 08, 2008, 16:07 »

у тебя в проект должна включаться либа
winmm.lib или imp32.lib
точно не помню MSDN дома нет
глянь в нем, в каком файле PlaySound определна
Записан
Detonator
Гость
« Ответ #11 : Ноябрь 08, 2008, 19:54 »

Добавил Imm32.lib, все скомпилилось и заработало, ура!
Что то я ступил, грешил на саму Qt.
Размер exe меньше чем все dll по отдельности, а ведь потом еще и сжать upx-м или подобным можно.
Так что вариант со статической линковкой теперь для меня идеальный.
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #12 : Ноябрь 08, 2008, 22:26 »

А ты не пробовал на чистом компьютере? Просит ли что нить еще? Чистого компа нет под рукой Грустный Крутой
Записан
Detonator
Гость
« Ответ #13 : Ноябрь 08, 2008, 22:48 »

Нет, под рукой тоже ничего нет. Интересно будет попробовать под Win98/2000 на всякий случай, под виртуалкой позже попробую.
Записан
Spicos
Гость
« Ответ #14 : Ноябрь 10, 2008, 06:21 »

И это радует, что заработало.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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