Название: Проблема с линковкой (unresolved externals) Отправлено: usr00210 от Август 25, 2010, 13:45 Всем привет!
1. Скачал и установил Qt SDK 2010.04 для Windows. При установке не устанавливал minGW (хочу использовать Qt Creator как IDE + VS2005 tools). 2. Создаю простейшее приложение из пары строк типа QCoreApplication a(argc, argv); 3. По умолчанию проект (Makefile.debug) требует QtCored4.lib (т.е.) динамическая линковка Qt-шных библиотек, но я .lib файлов вообще не наблюдаю в директории /lib - только статические архивы .а 4. Руками в Makefile.debug меняю LIBS на QtCored4.а и получаю несколько unresolved: main.obj:: error: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall QCoreApplication::~QCoreApplication(void)" (__imp_??1QCoreApplication@@UAE@XZ) main.obj:: error: unresolved external symbol "__declspec(dllimport) public: static int __cdecl QCoreApplication::exec(void)" (__imp_?exec@QCoreApplication@@SAHXZ) main.obj:: error: unresolved external symbol "__declspec(dllimport) public: __thiscall QCoreApplication::QCoreApplication(int &,char * *)" (__imp_??0QCoreApplication@@QAE@AAHPAPAD@Z) т.е. что-то не так с библиотеками. вообще обычно архивы .а используются в Линухе. Подскажите пожалуйста как обойти эти грабли? пс. документация у Qt ужасная и бестолковая на мой взгляд =( Название: Re: Проблема с линковкой (unresolved externals) Отправлено: Авварон от Август 25, 2010, 13:51 вы либо юзаете Qt SDK как она есть (включая мингв), либо качаете либы для студии (бла бла VS2008 opensource development), по желанию качаете либо креатор, либо интегратор в студию и с ними работаете.
.а файлы - это не линуксовые библиотеки, а ggc'шные (то есть мингв). мингв либы qt (которые идут в поставке с SDK) и студийный компилер несовместимы неужели доки в мсдн лучше? ахаха Название: Re: Проблема с линковкой (unresolved externals) Отправлено: BRE от Август 25, 2010, 13:53 1. Скачал и установил Qt SDK 2010.04 для Windows. При установке не устанавливал minGW (хочу использовать Qt Creator как IDE + VS2005 tools). В SDK лежат собранные библиотеки MinGW, если хочешь использовать VS, то перекомпилируй Qt этим компилятором.пс. документация у Qt ужасная и бестолковая на мой взгляд =( Удивило. ::)Это ты наверное MSDN сравниваешь? Название: Re: Проблема с линковкой (unresolved externals) Отправлено: usr00210 от Август 25, 2010, 13:54 вы либо юзаете Qt SDK как она есть (включая мингв), либо качаете либы для студии (бла бла VS2008 opensource development), по желанию качаете либо креатор, либо интегратор в студию и с ними работаете. .а файлы - это не линуксовые библиотеки, а ggc'шные (то есть мингв). мингв либы qt (которые идут в поставке с SDK) и студийный компилер несовместимы неужели доки в мсдн лучше? ахаха Спасибо за ответ! Смутно подозревал именно это =) Сейчас на этапе новичка Qt для меня доки мсдн действительно _значительно_ лучше Qt-шных. По крайней мере речь идет о тех, которые включены в SDK. Название: Re: Проблема с линковкой (unresolved externals) Отправлено: Alex_cs_gsp от Август 25, 2010, 15:19 Мне тоже MSDN намного больше нравится.
Название: Re: Проблема с линковкой (unresolved externals) Отправлено: Авварон от Август 25, 2010, 15:20 /*тычет пальцем и смеется*/
Название: Re: Проблема с линковкой (unresolved externals) Отправлено: usr00210 от Август 25, 2010, 15:43 /*тычет пальцем и смеется*/ звезд много, а смеешься =) понятно ведь, что это дело привычки. у меня другая проблема возникла. помогите ее разрешить пожалуйста! установил библиотеки для VS2008 (у меня стоит 2005). проект линкуется в статике (размер исходника 440КБ). но при попытке запустить простейшее приложение вылетает ошибка: The application failed to initialize properly (0xc0150002). Click OK to terminate the application. Dependency Walker говорит, что QtCored4.DLL правильная, но внутри нее есть обращения к MSVCP90D.DLL которого в системе нет. Возможно в этом дело. QMAKESPEC=win32-msvc2005 QTDIR=C:\Nokia\MSVC Название: Re: Проблема с линковкой (unresolved externals) Отправлено: Авварон от Август 25, 2010, 15:57 звезд много, а смеешься =) понятно ведь, что это дело привычки. у меня другая проблема возникла. помогите ее разрешить пожалуйста! установил библиотеки для VS2008 (у меня стоит 2005). проект линкуется в статике (размер исходника 440КБ). но при попытке запустить простейшее приложение вылетает ошибка: The application failed to initialize properly (0xc0150002). Click OK to terminate the application. Dependency Walker говорит, что QtCored4.DLL правильная, но внутри нее есть обращения к MSVCP90D.DLL которого в системе нет. Возможно в этом дело. QMAKESPEC=win32-msvc2005 QTDIR=C:\Nokia\MSVC offtop: раз вы так ориентируетесь в мсдн, то в чем разница между System.IO.DriveInfo.Name и System.IO.DriveInfo.RootDirectory ( http://msdn.microsoft.com/ru-ru/library/system.io.driveinfo_properties.aspx ). не оффтоп: я так полагаю, что дело в разнице версий кьюта и студии и ничегонесделать (с) По крайней мере так пишут тут: http://tech.vkapoor.com/2007/12/error-code-0xc0150002-application.html PS: либы от 2008 в 10й работают, проверял лично (у меня одного кутя работает без нареканий?:)) Название: Re: Проблема с линковкой (unresolved externals) Отправлено: usr00210 от Август 25, 2010, 16:14 offtop: раз вы так ориентируетесь в мсдн, то в чем разница между System.IO.DriveInfo.Name и System.IO.DriveInfo.RootDirectory ( http://msdn.microsoft.com/ru-ru/library/system.io.driveinfo_properties.aspx ). не оффтоп: я так полагаю, что дело в разнице версий кьюта и студии и ничегонесделать (с) По крайней мере так пишут тут: http://tech.vkapoor.com/2007/12/error-code-0xc0150002-application.html PS: либы от 2008 в 10й работают, проверял лично (у меня одного кутя работает без нареканий?:)) на первый вопрос не отвечу, не моя специализация =) а вот построив приложение в Release конфигурации у меня получилось ее запустить без проблем. При этом QTCORED4.DLL все таже... т.е надо найти 10 отличий между сборками в Release и Debug со стороны Qt. Пробовал патчить mkspecs\win32-msvc2005\qmake.conf, как в местой вики сказано, но результатов нет. Может что-то еще? Название: Re: Проблема с линковкой (unresolved externals) Отправлено: Авварон от Август 25, 2010, 16:18 хм, а как вы прилинковали релиз приложение к дебагнутым библиотекам?
Название: Re: Проблема с линковкой (unresolved externals) Отправлено: usr00210 от Август 25, 2010, 16:29 хм, а как вы прилинковали релиз приложение к дебагнутым библиотекам? никак, линковка с релиз библиотеками. я имел ввиду то, что релиз QtCore4 также ссылается на несуществующую ДЛЛ, что не мешает приложению запускаться. (http://img829.imageshack.us/img829/4163/77066680.jpg) Название: Re: Проблема с линковкой (unresolved externals) Отправлено: Hellraiser от Август 25, 2010, 18:30 Сильно подозреваю, что какая-то программа притащила с собой рантайм 2008 студии (msvcp90.dll и msvcr90.dll). Но этот рантайм только для релизных версий библиотек. Поэтому релиз работает, а дебаг - нет. Дебажный рантайм, насколько я знаю, ставит только сама студия.
Название: Re: Проблема с линковкой (unresolved externals) Отправлено: usr00210 от Август 26, 2010, 01:42 Сильно подозреваю, что какая-то программа притащила с собой рантайм 2008 студии (msvcp90.dll и msvcr90.dll). Но этот рантайм только для релизных версий библиотек. Поэтому релиз работает, а дебаг - нет. Дебажный рантайм, насколько я знаю, ставит только сама студия. Предположение не верно. 1. 2. msvcp90.dll и msvcr90.dll не обнаруживается в стандартных путях, о чем нам и сообщает Dependency Walker (см. выше) Название: Re: Проблема с линковкой (unresolved externals) Отправлено: Hellraiser от Август 26, 2010, 19:42 2. msvcp90.dll и msvcr90.dll не обнаруживается в стандартных путях, о чем нам и сообщает Dependency Walker (см. выше) Их там и не должно быть: внимательно изучаем содержание папочки %WINDIR%\WinSxS. Это Dependancy Walker не может найти, а винда свой (мелкомягкий) рантайм знает где искать.Название: Re: Проблема с линковкой (unresolved externals) Отправлено: usr00210 от Август 28, 2010, 11:48 2. msvcp90.dll и msvcr90.dll не обнаруживается в стандартных путях, о чем нам и сообщает Dependency Walker (см. выше) Их там и не должно быть: внимательно изучаем содержание папочки %WINDIR%\WinSxS. Это Dependancy Walker не может найти, а винда свой (мелкомягкий) рантайм знает где искать.удар в голову. жестокий и беспощадный. ;D спасибо за информацию, прожил бы вот так всю жизнь и не знал бы ;D Название: Re: Проблема с линковкой (unresolved externals) Отправлено: Igors от Август 28, 2010, 11:58 Поэтому релиз работает, а дебаг - нет. Дебажный рантайм, насколько я знаю, ставит только сама студия. Та отож. Случайно не знаете "штатного" способа установить debug runtime? Мне было бы удобно отдавать заказчику промежуточные версии как debug. Пытался копировать все dll, но увы :-[Спасибо Название: Re: Проблема с линковкой (unresolved externals) Отправлено: Hellraiser от Август 28, 2010, 14:18 Думаю помогут вот эти статьи : http://msdn.microsoft.com/en-us/library/aa985618%28v=VS.90%29.aspx (http://msdn.microsoft.com/en-us/library/aa985618%28v=VS.90%29.aspx) и http://msdn.microsoft.com/en-us/library/ms235291%28v=VS.90%29.aspx (http://msdn.microsoft.com/en-us/library/ms235291%28v=VS.90%29.aspx) (читать про private assemblies).
Название: Re: Проблема с линковкой (unresolved externals) Отправлено: usr00210 от Август 29, 2010, 05:46 /*тычет пальцем и смеется*/ читая документацию, хочу еще раз высказаться - документация полной сакс. куча ошибок, от простейших грамматических в описании до совершенно тупых (копи-паст) и не очень в примерах и рефернс коде. к тому же как тут уже некоторые отмечали - нет нормального описания возвращаемых ошибок и исключений. ну и сами описания классов и функций очень бедные. сразу видно, что писали программисты, а не техрайтеры... короче, МСДН и ман рулят. и это уже не дело привычки. Название: Re: Проблема с линковкой (unresolved externals) Отправлено: Авварон от Август 29, 2010, 15:20 /*продолжает тыкать пальцем, уже лежа на полу*/
где же это вы ошибки-то нашли? а в винде прям так описаны все коды? рофл, если ф-ия вернула false, то действие одно - получайте код ошибки (GetLastError()) это по вашему хорошо документировано? то есть к каждой ф-ии написан список _всех_ кодов, к-ые она может вернуть? я что-то этого не видел Название: Re: Проблема с линковкой (unresolved externals) Отправлено: Alex_cs_gsp от Август 29, 2010, 17:04 GetLastError() лучше, чем ничего. Код ошибки сохраняете в лог., и можно узнать что привело к сбою. К тому же, все ошибки поделены на категории и можно легко сформировать сообщение для пользователя, что произошло. В Qt добрая половина методов возвращает бул. Вот, что с ним делать?
Название: Re: Проблема с линковкой (unresolved externals) Отправлено: Авварон от Август 29, 2010, 17:12 а) юзера не волнует код ошибки, в любом случае он будет писать вам
б) 90% кодов ошибок бесполезны (инвалид хэндл, недостаточный буффер - с этим вообще ололол, мы передаем в ф-ии работы с ФС буфер и его длину, которая ВСЕГДА должна быть равна MAX_PATH и если ее не передаем, то ловим ошибку о малом буфере, вот внимание, а нафига вообще были все эти действия) в) просто обрабатывать и писать что такая-то операция провалилась. Если нужна причина, есть класс Error (QSqlError или как-то так) или просто текстовое сообщение (QFile) Метод bool removeRows в том примере виртуальный и требует переопределения. Если вы возвращаете false (а это в моделях 50/50 случается в данном методе) то ошибку обрабатываете как удобно _вам_ Либо делаете класс эррора, либо кидаете эксепшн, либо кидаете сигнал с кодом ошибки - как удобно именно вам. По дефолту да, тот метод возвращает false, но это не ошибка, а он просто ничего не делает, что в доке и написано Название: Re: Проблема с линковкой (unresolved externals) Отправлено: Alex_cs_gsp от Август 29, 2010, 18:05 Я не хвалю Windows, эта штуковина появилась когда о ООП слышали не многие, и мне кажется, что именно поэтому и придумали дот нет, так как был выбор не большой - либо переписывать систему и как-то решать вопросы с совместимостью, либо делать фреймворк, который использует тот-же вынь-апи. Я говорю, что над справкой Qt недоработали, так как когда переходишь с худшего на лучшее, то претензии обычно возникать не должны.
Название: Re: Проблема с линковкой (unresolved externals) Отправлено: Авварон от Август 29, 2010, 18:14 все там доработали, если чего-то в ассистанте нет, то врядли это известно живым людям:)
по мсдн дот нета я спрашивал вопрос в начале темы, там тоже нихрена нет (кроме того что проперти "имя" возвращает имя, спс кэп) |