Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: once_again_abc от Июнь 04, 2012, 04:24



Название: 4.8.2 static build - не работает
Отправлено: once_again_abc от Июнь 04, 2012, 04:24
Собрал 4.8.2 статик (через VS2010 env.): configure -debug -opensource -static -no-accessibility -no-qt3support -platform win32-msvc2010 -mp
Все ок.
Подключаю в своем проекте QtCored.lib и QtGuid.lib

В проекте указываю статическую сборку и получаю сперва несколько сотен варнингов типа таких:
Код:
..
1>.obj : warning LNK4217: locally defined symbol ?postEvent@QCoreApplication@@SAXPAVQObject@@PAVQEvent@@@Z (public: static void __cdecl QCoreApplication::postEvent(class QObject *,class QEvent *)) imported in function "protected: virtual void __thiscall QAveragerPlotter::closeEvent(class QCloseEvent *)" (?closeEvent@QAveragerPlotter@@MAEXPAVQCloseEvent@@@Z)
1>.obj : warning LNK4217: locally defined symbol ??0QEvent@@QAE@W4Type@0@@Z (public: __thiscall QEvent::QEvent(enum QEvent::Type)) imported in function "protected: virtual void __thiscall QAveragerPlotter::closeEvent(class QCloseEvent *)" (?closeEvent@QAveragerPlotter@@MAEXPAVQCloseEvent@@@Z)
1>.obj : warning LNK4217: locally defined symbol ??1QEvent@@UAE@XZ (public: virtual __thiscall QEvent::~QEvent(void)) imported in function "public: virtual void * __thiscall QEvent::`scalar deleting destructor'(unsigned int)" (??_GQEvent@@UAEPAXI@Z)
1>.obj : warning LNK4217: locally defined symbol ?parent@QObject@@QBEPAV1@XZ (public: class QObject * __thiscall QObject::parent(void)const ) imported in function "protected: virtual void __thiscall QAveragerPlotter::showEvent(class QShowEvent *)" (?showEvent@QAveragerPlotter@@MAEXPAVQShowEvent@@@Z)
...
а затем пару десятков ошибок, типа:

Код:
1>.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::QString(char const *)" (__imp_??0QString@@QAE@PBD@Z)
1>.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::QString(char const *)" (__imp_??0QString@@QAE@PBD@Z)
1>.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::QString(char const *)" (__imp_??0QString@@QAE@PBD@Z)
1>.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::QString(char const *)" (__imp_??0QString@@QAE@PBD@Z)
1>.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::QString(char const *)" (__imp_??0QString@@QAE@PBD@Z)
1>.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::QString(char const *)" (__imp_??0QString@@QAE@PBD@Z)
1>.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::QString(char const *)" (__imp_??0QString@@QAE@PBD@Z)
1>.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::QString(char const *)" (__imp_??0QString@@QAE@PBD@Z)
1>.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::QString(char const *)" (__imp_??0QString@@QAE@PBD@Z)
1>.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::QString(char const *)" (__imp_??0QString@@QAE@PBD@Z)

Получается, что релиз неправильно собрался?
С shared версией проблем нет.


Название: Re: 4.8.2 static build - не работает
Отправлено: kambala от Июнь 04, 2012, 11:48
configure -debug -opensource -static -no-accessibility -no-qt3support -platform win32-msvc2010 -mp
Подключаю в своем проекте QtCored.lib и QtGuid.lib
Получается, что релиз неправильно собрался?
ты проект что ли в релиз конфигурации пытаешься собрать? слинковать его не получится.


Название: Re: 4.8.2 static build - не работает
Отправлено: once_again_abc от Июнь 05, 2012, 05:32
configure -debug -opensource -static -no-accessibility -no-qt3support -platform win32-msvc2010 -mp
Подключаю в своем проекте QtCored.lib и QtGuid.lib
Получается, что релиз неправильно собрался?
ты проект что ли в релиз конфигурации пытаешься собрать? слинковать его не получится.

почему не получится?

пс. я перепробовал 4 возможных конфигурации билда (с соответствующими либами, в первом сообщении опечатка QtCore(d)):

Код:
configure -debug -shared
configure -debug -static
configure -release -shared
configure -release -static
все, что касается shared работает прекрасно как обычно, обе static конфигурации не работают. кьют не хочет линковаться ни в какоую =(

Код:
1>.exe : fatal error LNK1120: 1136 unresolved externals

и еще я заметил, что C:\4.8.2\mkspecs\win32-msvc2010\qmake.conf содержит вот эти флаги

Код:
QMAKE_CFLAGS_RELEASE    = -O2 -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG      = -Zi -MDd


Название: Re: 4.8.2 static build - не работает
Отправлено: Serr500 от Июнь 05, 2012, 07:50
Попробуйте собрать с ключом -debug-and-release.

и еще я заметил, что C:\4.8.2\mkspecs\win32-msvc2010\qmake.conf содержит вот эти флаги

Код:
QMAKE_CFLAGS_RELEASE    = -O2 -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG      = -Zi -MDd
Содержат. И что?

Подключаю в своем проекте QtCored.lib и QtGuid.lib
Как подключаете?


Название: Re: 4.8.2 static build - не работает
Отправлено: once_again_abc от Июнь 05, 2012, 08:40
Попробуйте собрать с ключом -debug-and-release.

какой в этом смысл? -debug-and-release судя по описанию делает абсолютно тоже что флаги -debug + -release

и еще я заметил, что C:\4.8.2\mkspecs\win32-msvc2010\qmake.conf содержит вот эти флаги

Код:
QMAKE_CFLAGS_RELEASE    = -O2 -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG      = -Zi -MDd
Содержат. И что?

я использую /MT, возможно в этом собака порылась, пока не проверял...

Подключаю в своем проекте QtCored.lib и QtGuid.lib
Как подключаете?


как обычно - указываю в опциях линковщика в качестве входных библиотек =) линковщик успешно находит библиотеки, но почему-то с именами классов и методов не может разобраться.


Название: Re: 4.8.2 static build - не работает
Отправлено: Serr500 от Июнь 05, 2012, 09:12
-debug-and-release судя по описанию делает абсолютно тоже что флаги -debug + -release
Если указать два флага, один из них конфигуратор, вроде бы, игнорирует.

я использую /MT, возможно в этом собака порылась, пока не проверял...
Разные флаги компиляции - лучший способ получить ошибки выполнения. Возможно, что и при линковке они вызывают ошибки.

как обычно - указываю в опциях линковщика в качестве входных библиотек =) линковщик успешно находит библиотеки, но почему-то с именами классов и методов не может разобраться.
Насколько я помню (давно не собирал статику) ничего линковщику указывать не надо. Достаточно добавить нужные модули в переменной QT в файле .pro и qmake сам сгенерирует правильный Makefile.

Почему-то мне кажется, что у вас зоопарк различных сборок Qt и они при компиляции как-то перепутываются. Подозреваю, что qmake срабатывает от shared-сборки. Проверьте пути, переменную PATH и т.п.


Название: Re: 4.8.2 static build - не работает
Отправлено: once_again_abc от Июнь 05, 2012, 10:01
-debug-and-release судя по описанию делает абсолютно тоже что флаги -debug + -release
Если указать два флага, один из них конфигуратор, вроде бы, игнорирует.

я использую /MT, возможно в этом собака порылась, пока не проверял...
Разные флаги компиляции - лучший способ получить ошибки выполнения. Возможно, что и при линковке они вызывают ошибки.

как обычно - указываю в опциях линковщика в качестве входных библиотек =) линковщик успешно находит библиотеки, но почему-то с именами классов и методов не может разобраться.
Насколько я помню (давно не собирал статику) ничего линковщику указывать не надо. Достаточно добавить нужные модули в переменной QT в файле .pro и qmake сам сгенерирует правильный Makefile.

Почему-то мне кажется, что у вас зоопарк различных сборок Qt и они при компиляции как-то перепутываются. Подозреваю, что qmake срабатывает от shared-сборки. Проверьте пути, переменную PATH и т.п.

с путями у меня все в порядке, со сборками тоже, все четыре разложены каждая по своим полочкам. и я не использую .pro, qmake и Makefile. все собираю в вижуал студии (стандартный Win32 проект), через его настройки. ладно, будет время, поковыряюсь еще в линковщике, вероятно с опциями что-то не так...


Название: Re: 4.8.2 static build - не работает
Отправлено: once_again_abc от Июнь 05, 2012, 15:02
если здесь есть люди, которые строят проект в вижуал студии и линкуются к статическим либам, прошу поделиться настрояками линкера.


Название: Re: 4.8.2 static build - не работает
Отправлено: _OLEGator_ от Июнь 05, 2012, 15:08
Ты используешь QtCored.lib и QtGuid.lib и собираешь релизную сборку?


Название: Re: 4.8.2 static build - не работает
Отправлено: once_again_abc от Июнь 05, 2012, 22:11
Ты используешь QtCored.lib и QtGuid.lib и собираешь релизную сборку?

как я уже писал выше - нет, это была опечатка. для релизной статик версии использую QtCore.lib и QtGui.lib, для отладочной статик версии использую QtCored.lib и QtGuid.lib, для отладочной и релизной шаред - QtCored4.lib, QtGuid4.lib и QtCore4.lib и QtGui4.lib соответственно.
шаред собирается без проблем.


Название: Re: 4.8.2 static build - не работает
Отправлено: OKTA от Июнь 20, 2012, 18:35
Может не совсем чего-то понимаю, но сегодня для mingw собрал статичускую версию без шума и пыли.
в qmake.conf добавил QMAKE_LFLAGS = -static ...
И configure обязательно со -static -no-exceptions.
p.s. даже openssl статически собрался)))