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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Проблема с линковкой (unresolved externals)  (Прочитано 12140 раз)
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 ужасная и бестолковая на мой взгляд =(
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Август 25, 2010, 13:51 »

вы либо юзаете Qt SDK как она есть (включая мингв), либо качаете либы для студии (бла бла VS2008 opensource development), по желанию качаете либо креатор, либо интегратор в студию и с ними работаете.
.а файлы - это не линуксовые библиотеки, а ggc'шные (то есть мингв). мингв либы qt (которые идут в поставке с SDK) и студийный компилер несовместимы

неужели доки в мсдн лучше? ахаха
Записан
BRE
Гость
« Ответ #2 : Август 25, 2010, 13:53 »

1. Скачал и установил Qt SDK 2010.04 для Windows. При установке не устанавливал minGW (хочу использовать Qt Creator как IDE + VS2005 tools).
В SDK лежат собранные библиотеки MinGW, если хочешь использовать VS, то перекомпилируй Qt этим компилятором.

пс. документация у Qt ужасная и бестолковая на мой взгляд =(
Удивило.  Строит глазки
Это ты наверное MSDN сравниваешь?
Записан
usr00210
Гость
« Ответ #3 : Август 25, 2010, 13:54 »

вы либо юзаете Qt SDK как она есть (включая мингв), либо качаете либы для студии (бла бла VS2008 opensource development), по желанию качаете либо креатор, либо интегратор в студию и с ними работаете.
.а файлы - это не линуксовые библиотеки, а ggc'шные (то есть мингв). мингв либы qt (которые идут в поставке с SDK) и студийный компилер несовместимы

неужели доки в мсдн лучше? ахаха

Спасибо за ответ! Смутно подозревал именно это =)

Сейчас на этапе новичка Qt для меня доки мсдн действительно _значительно_ лучше Qt-шных. По крайней мере речь идет о тех, которые включены в SDK.
Записан
Alex_cs_gsp
Гость
« Ответ #4 : Август 25, 2010, 15:19 »

Мне тоже MSDN намного больше нравится.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #5 : Август 25, 2010, 15:20 »

/*тычет пальцем и смеется*/
Записан
usr00210
Гость
« Ответ #6 : Август 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

Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #7 : Август 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й работают, проверял лично (у меня одного кутя работает без нареканий?Улыбающийся)
Записан
usr00210
Гость
« Ответ #8 : Август 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, как в местой вики сказано, но результатов нет. Может что-то еще?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #9 : Август 25, 2010, 16:18 »

хм, а как вы прилинковали релиз приложение к дебагнутым библиотекам?
Записан
usr00210
Гость
« Ответ #10 : Август 25, 2010, 16:29 »

хм, а как вы прилинковали релиз приложение к дебагнутым библиотекам?

никак, линковка с релиз библиотеками. я имел ввиду то, что релиз QtCore4 также ссылается на несуществующую ДЛЛ, что не мешает приложению запускаться.

Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #11 : Август 25, 2010, 18:30 »

Сильно подозреваю, что какая-то программа притащила с собой рантайм 2008 студии (msvcp90.dll и msvcr90.dll). Но этот рантайм только для релизных версий библиотек. Поэтому релиз работает, а дебаг - нет. Дебажный рантайм, насколько я знаю, ставит только сама студия.
Записан
usr00210
Гость
« Ответ #12 : Август 26, 2010, 01:42 »

Сильно подозреваю, что какая-то программа притащила с собой рантайм 2008 студии (msvcp90.dll и msvcr90.dll). Но этот рантайм только для релизных версий библиотек. Поэтому релиз работает, а дебаг - нет. Дебажный рантайм, насколько я знаю, ставит только сама студия.

Предположение не верно.

1. рантайм 2008 это не msvcp90.dll и msvcr90.dll, а msvcp80.dll и msvcr80.dll (пардон, с утра плохо вижу =) я говорил о 2005 студии)
2. msvcp90.dll и msvcr90.dll не обнаруживается в стандартных путях, о чем нам и сообщает Dependency Walker (см. выше)
« Последнее редактирование: Август 26, 2010, 01:44 от usr00210 » Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #13 : Август 26, 2010, 19:42 »

2. msvcp90.dll и msvcr90.dll не обнаруживается в стандартных путях, о чем нам и сообщает Dependency Walker (см. выше)
Их там и не должно быть: внимательно изучаем содержание папочки %WINDIR%\WinSxS. Это Dependancy Walker не может найти, а винда свой (мелкомягкий) рантайм знает где искать.
Записан
usr00210
Гость
« Ответ #14 : Август 28, 2010, 11:48 »

2. msvcp90.dll и msvcr90.dll не обнаруживается в стандартных путях, о чем нам и сообщает Dependency Walker (см. выше)
Их там и не должно быть: внимательно изучаем содержание папочки %WINDIR%\WinSxS. Это Dependancy Walker не может найти, а винда свой (мелкомягкий) рантайм знает где искать.

удар в голову. жестокий и беспощадный. Смеющийся спасибо за информацию, прожил бы вот так всю жизнь и не знал бы  Смеющийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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