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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: 4.8.2 static build - не работает  (Прочитано 7439 раз)
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 версией проблем нет.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #1 : Июнь 04, 2012, 11:48 »

configure -debug -opensource -static -no-accessibility -no-qt3support -platform win32-msvc2010 -mp
Подключаю в своем проекте QtCored.lib и QtGuid.lib
Получается, что релиз неправильно собрался?
ты проект что ли в релиз конфигурации пытаешься собрать? слинковать его не получится.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
once_again_abc
Гость
« Ответ #2 : Июнь 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
Записан
Serr500
Гость
« Ответ #3 : Июнь 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
Как подключаете?
Записан
once_again_abc
Гость
« Ответ #4 : Июнь 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
Как подключаете?


как обычно - указываю в опциях линковщика в качестве входных библиотек =) линковщик успешно находит библиотеки, но почему-то с именами классов и методов не может разобраться.
Записан
Serr500
Гость
« Ответ #5 : Июнь 05, 2012, 09:12 »

-debug-and-release судя по описанию делает абсолютно тоже что флаги -debug + -release
Если указать два флага, один из них конфигуратор, вроде бы, игнорирует.

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

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

Почему-то мне кажется, что у вас зоопарк различных сборок Qt и они при компиляции как-то перепутываются. Подозреваю, что qmake срабатывает от shared-сборки. Проверьте пути, переменную PATH и т.п.
Записан
once_again_abc
Гость
« Ответ #6 : Июнь 05, 2012, 10:01 »

-debug-and-release судя по описанию делает абсолютно тоже что флаги -debug + -release
Если указать два флага, один из них конфигуратор, вроде бы, игнорирует.

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

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

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

с путями у меня все в порядке, со сборками тоже, все четыре разложены каждая по своим полочкам. и я не использую .pro, qmake и Makefile. все собираю в вижуал студии (стандартный Win32 проект), через его настройки. ладно, будет время, поковыряюсь еще в линковщике, вероятно с опциями что-то не так...
Записан
once_again_abc
Гость
« Ответ #7 : Июнь 05, 2012, 15:02 »

если здесь есть люди, которые строят проект в вижуал студии и линкуются к статическим либам, прошу поделиться настрояками линкера.
Записан
_OLEGator_
Гость
« Ответ #8 : Июнь 05, 2012, 15:08 »

Ты используешь QtCored.lib и QtGuid.lib и собираешь релизную сборку?
Записан
once_again_abc
Гость
« Ответ #9 : Июнь 05, 2012, 22:11 »

Ты используешь QtCored.lib и QtGuid.lib и собираешь релизную сборку?

как я уже писал выше - нет, это была опечатка. для релизной статик версии использую QtCore.lib и QtGui.lib, для отладочной статик версии использую QtCored.lib и QtGuid.lib, для отладочной и релизной шаред - QtCored4.lib, QtGuid4.lib и QtCore4.lib и QtGui4.lib соответственно.
шаред собирается без проблем.
Записан
OKTA
Гость
« Ответ #10 : Июнь 20, 2012, 18:35 »

Может не совсем чего-то понимаю, но сегодня для mingw собрал статичускую версию без шума и пыли.
в qmake.conf добавил QMAKE_LFLAGS = -static ...
И configure обязательно со -static -no-exceptions.
p.s. даже openssl статически собрался)))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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