Название: unresolved external при статической линковке Отправлено: Nazgul от Октябрь 02, 2005, 15:58 Доброго времени суток!
Поставил под MVS 7.1 - Qt 4.0.0-win-commercial-VS2003 и интегратор. Все работает нормально. Но желательна была статическая линковка библиотек. Отконфигурил с -static: configure -static nmake. Теперь при билде проекта выводятся сообщения: QtStatic error LNK2019: unresolved external symbol "private: static struct QString::Data QString::shared_null" (?shared_null@QString@@0UData@1@A) referenced in function "public: __thiscall QString::QString(char const *)" (??0QString@@QAE@PBD@Z) QtStatic error LNK2001: unresolved external symbol "public: static struct QMetaObject const QWidget::staticMetaObject" (?staticMetaObject@QWidget@@2UQMetaObject@@B) QtStatic error LNK2019: unresolved external symbol "private: static struct QByteArray::Data QByteArray::shared_null" (?shared_null@QByteArray@@0UData@1@A) referenced in function "public: __thiscall QByteArray::QByteArray(void)" (??0QByteArray@@QAE@XZ) QtStatic error LNK2019: unresolved external symbol "public: static enum QSysInfo::WinVersion const QSysInfo::WindowsVersion" (?WindowsVersion@QSysInfo@@2W4WinVersion@1@B) referenced in function _WinMain@16 В чём может быть проблема? Название: unresolved external при статической линковке Отправлено: zlatko от Октябрь 03, 2005, 16:40 Если нетрудно попробуй с нуля пересобрать приложение. В 3 кт мне такой подход помогал
Название: unresolved external при статической линковке Отправлено: Nazgul от Октябрь 03, 2005, 18:55 Не - тут не помогает. Создаю новый проект - ничего не добовляю (ну кроме того что он сам там создал) - пытаюсь откомпилировать - вываливаются ошибки.
Это с GUI приложением. С консольным веселее: билдится нормально - но размер исходника 3.5 КБ - при запуске появляется сообщение о том что не найдена QtCore4.dll... Название: unresolved external при статической линковке Отправлено: nEoN от Октябрь 04, 2005, 09:17 В первом случае посмотри настройки проекта в MSVC++ Project Properties->Linker->Input->"Additional Dependencies". Скорее всего там отсутствует ссылка на библиотеку "C:\Qt\4.0.0\lib\QtCore4.lib" и "C:\Qt\4.0.0\lib\QtGui4.lib".
А во втором случае в переменную среды "PATH" надо добавить путь к библиотекам Qt. Название: unresolved external при статической линковке Отправлено: Nazgul от Октябрь 04, 2005, 17:23 Цитировать В первом случае посмотри настройки проекта в MSVC++ Project Properties->Linker->Input->"Additional Dependencies". Скорее всего там отсутствует ссылка на библиотеку "C:\Qt\4.0.0\lib\QtCore4.lib" и "C:\Qt\4.0.0\lib\QtGui4.lib". Там прописано следующее: qtmain.lib QtCore4.lib QtGui4.lib Цитировать А во втором случае в переменную среды "PATH" надо добавить путь к библиотекам Qt. Это понятно - но я то компилировал консольный проект уже с реконфигурированной Qt с флагом -static - он же вроде как должен их с сабой носить... А он почему-то по старинке компилит без статического подключения библиотек... Поставил себе Qt 4.0.1 - тут тоже в принципе несоскучишся: "configure -static" - выполнилось нормально а вот после команды "nmake" - долго что-то компилилось и выдало: вначале кучу ворнингов типа: C:/Qt\4.0.1\tools\designer\src\lib\shared\qtundo.cpp(131) : warning C4273: 'QtCommand::QtCommand' : inconsistent dll linkage C:/Qt\4.0.1\tools\designer\src\lib\shared\qtundo.cpp(146) : warning C4273: 'QtCommand::QtCommand' : inconsistent dll linkage C:/Qt\4.0.1\tools\designer\src\lib\shared\qtundo.cpp(262) : warning C4273: 'QtCommand::mergeMeWith' : inconsistent dll linkage C:/Qt\4.0.1\tools\designer\src\lib\shared\qtundo.cpp(417) : warning C4273: 'QtUndoStack::QtUndoStack' : inconsistent dll linkage C:/Qt\4.0.1\tools\designer\src\lib\shared\qtundo.cpp(436) : warning C4273: 'QtUndoStack::commandAt' : inconsistent dll linkage C:/Qt\4.0.1\tools\designer\src\lib\shared\qtundo.cpp(455) : warning C4273: 'QtUndoStack::isClean' : inconsistent dll linkage C:/Qt\4.0.1\tools\designer\src\lib\shared\qtundo.cpp(481) : warning C4273: 'QtUndoStack::setClean' : inconsistent dll linkage C:/Qt\4.0.1\tools\designer\src\lib\shared\qtundo.cpp(502) : warning C4273: 'QtUndoStack::beforeChange' : inconsistent dll linkage C:/Qt\4.0.1\tools\designer\src\lib\shared\qtundo.cpp(514) : warning C4273: 'QtUndoStack::afterChange' : inconsistent dll linkage после ворнингов: cl return error 0x2..... Название: unresolved external при статической линковке Отправлено: Nazgul от Октябрь 04, 2005, 19:15 С "warning C4273: 'QtUndoStack::setClean' : inconsistent dll linkage"
в 4.0.1 вроде справился вызовом "nmake /I". Вроде всё дальше нормально было - но теперь при билде проекта опять теже самые ошибки: :( QtStatic error LNK2019: unresolved external symbol "private: static struct QString::Data QString::shared_null" (?shared_null@QString@@0UData@1@A) referenced in function "public: __thiscall QString::QString(char const *)" (??0QString@@QAE@PBD@Z) QtStatic error LNK2001: unresolved external symbol "public: static struct QMetaObject const QWidget::staticMetaObject" (?staticMetaObject@QWidget@@2UQMetaObject@@B) QtStatic error LNK2019: unresolved external symbol "private: static struct QByteArray::Data QByteArray::shared_null" (?shared_null@QByteArray@@0UData@1@A) referenced in function "public: __thiscall QByteArray::QByteArray(void)" (??0QByteArray@@QAE@XZ) QtStatic error LNK2019: unresolved external symbol "public: static enum QSysInfo::WinVersion const QSysInfo::WindowsVersion" (?WindowsVersion@QSysInfo@@2W4WinVersion@1@B) referenced in function _WinMain@16 Название: unresolved external при статической линковке Отправлено: Nazgul от Октябрь 04, 2005, 19:50 проблема решилась.
мда... неожидал немного такого... наконец-то стукнуло в бошку глянуть как там в экзамплах - и почему-то в экзамплах в "Project Properties->Linker->Input->"Additional Dependencies" вместо стандартных: qtmain.lib QtCore4.lib QtGui4.lib были прописаны: C:\Qt\4.0.1\lib\qtmaind.lib C:\Qt\4.0.1\lib\QtCored.lib C:\Qt\4.0.1\lib\QtGuid.lib kernel32.lib user32.lib shell32.lib uuid.lib ole32.lib advapi32.lib ws2_32.lib gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib winspool.lib msimg32.lib теперь всё нормально линкуется и пустое окошко занимает 3,8М - что не может не радовать 8) Название: unresolved external при статической линковке Отправлено: ukc от Октябрь 05, 2005, 11:10 Вот сюда решил перебраться, в старом (http://prog.org.ru/forum/topic_1717.html) топике всё больше где qt достать обсуждают.
Про техподдержку я имел ввиду тот факт, что в их листе рассылки куча вопросов о несобирающейся статически QT, которые стоят без ответов. Я неверно понял, у меня действительно только 3 qtшные либы были в списке либ. Добавил остальные - всё слинковалось. А dllины эти (msvcp71.dll и msvcr71.dll) вроде как содержат CRT, и по идее должны замещаться либами через Project Options->C++->Code Generation->Runtime Library. Если поставить Multithread (статическую), прокет не линкуется =(. Название: unresolved external при статической линковке Отправлено: Nazgul от Октябрь 05, 2005, 15:02 Цитировать Про техподдержку я имел ввиду тот факт, что в их листе рассылки куча вопросов о несобирающейся статически QT, которые стоят без ответов. Я это тоже заметил. Но я так думаю что всё это неспроста. При проблемах статической линковке в других компиляторах (не в MVS ) помощь видна - а вот для MVS - глубоко молчание... Скорее всего потому что для MVS всё платное - и у кого проблемы - и кто заплатил - смело связует с техподдержкой конторы - и ему мигом отвечают - а если вопрос задется в общем форуме - то с тех поддержки канешно отвечать не буду - я так думаю они даже подчищают сообщения - я када лазил по сообщениям - видел как интересные темы просто пустые - даже без вопроса (а на месте вопроса и ответа какие-то <text clear>) стоит! :lol: Цитировать А dllины эти (msvcp71.dll и msvcr71.dll) вроде как содержат CRT, и по идее должны замещаться либами через Project Options->C++->Code Generation->Runtime Library. Если поставить Multithread (статическую), прокет не линкуется =(. "Multithread (статическую)" - это какой флаг - /MD? канешно "nmake /I" - это "грубо и непрофессионально" - но пока другого выхода не вижу. Брал экзамплы с Qt и перебилдивал - вроде работают... Наверное нужно "пофантазировать на тему" preprocessor directive как пишут - что нужно что-то определить чтобы нужные строки компились в макросах - но дапустим при использовании в препроцессоре команды QT_MAKEDLL - при "nmake" - возникают вообще другие ошибки: embed.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: int __thiscall QImage::width(void)const " (__imp_?width@QImage@@QBEHXZ) referenced in function "public: void __thiscall Ui3Reader::embed(char const *,class QStringList const &)" (?embed@Ui3Reader@@QAEXPBDABVQStringList@@@Z) embed.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall QImage::~QImage(void)" (__imp_??1QImage@@UAE@XZ) referenced in function "public: void __thiscall Ui3Reader::embed(char const *,class QStringList const &)" (?embed@Ui3Reader@@QAEXPBDABVQStringList@@@Z) embed.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: bool __thiscall QImage::load(class QString const &,char const *)" (__imp_?load@QImage@@QAE_NABVQString@@PBD@Z) referenced in function "public: void __thiscall Ui3Reader::embed(char const *,class QStringList const &)" (?embed@Ui3Reader@@QAEXPBDABVQStringList@@@Z) embed.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QImage::QImage(void)" (__imp_??0QImage@@QAE@XZ) referenced in function "public: void __thiscall Ui3Reader::embed(char const *,class QStringList const &)" (?embed@Ui3Reader@@QAEXPBDABVQStringList@@@Z) ..\..\..\bin\uic3.exe : fatal error LNK1120: 98 unresolved externals NMAKE : fatal error U1077: 'link' : return code '0x460' Stop. NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio .NET 2003\ VC7\BIN\nmake.exe"' : return code '0x2' Stop. Та и особо не пофантазируеш - на млоём атлоне 2.2Г по часу-полтора билдится.... Название: unresolved external при статической линковке Отправлено: Rainbow от Октябрь 06, 2005, 10:15 У меня во временя маздая похожее было. Как оказалось прична upgrade VS 2002 -> 2003. Решилось очень жестоко: переинсталяцией маздая.
Если менял студию, то можешь не сомневатся в чем проблема. Название: unresolved external при статической линковке Отправлено: Nazgul от Октябрь 06, 2005, 17:31 Винду переустанавливал совсем недавано. И ставил на неё токо 2003-ю. Больше ничего (для 6-ой и 2005 бета2 - другой винт - другая система :) ). Та и наврятли в этом - тут возможно что-то с макросами не-то - может при конфигурировании какой-нить макрос нужно определить, то ли ошибка у них в исходниках... Причём это для 4.0.1.
4.0.0 и билдится со -static и проекты компилируются нормально... Вот подумываю сравнить qglobal.h этиз версий - сёдня вечерком посмотрю - мож так что нить прояснится.... |