Название: Qt 4.4.3 (-static -release -qt-sql-mysql) Ошибка при использовании QtSql.lib Отправлено: yaroslav429 от Июль 16, 2010, 04:34 По форуму искал подобные проблемы, но не нашел ничего, что смогло бы мне помочь :(
В общем, собрал Qt 4.4.3 commercial из исходников для msvc-2008. Код Сборку проводил в студии (по-моему, там тоже отлично собирается) - запустил projects.sln и "Построить решение". После этого потестил немного - демки и примеры собираются и работают (не зависимы ни от чего), т.е. собралось нормально. Далее собрал плагин mysql Код Собралось, но при сборке тестового приложения с использованием QtSql посыпались ошибки, типа unresolved external и я, на всякий пожарный, пересобрал QtSql Код Тоже нормально собралось, но ошибки не пропали. вот лог построения тестового приложения (-MT Release) ..... main.cpp Создание кода... Компиляция ресурсов... Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1 Copyright (C) Microsoft Corporation. All rights reserved. Компоновка... LINK : warning LNK4098: библиотека по умолчанию "LIBCMT" противоречит использованию других библиотек; используйте параметр /NODEFAULTLIB:library QtSql.lib(qsql_mysql.obj) : error LNK2019: ссылка на неразрешенный внешний символ _mysql_fetch_row@4 в функции "protected: virtual bool __thiscall QMYSQLResult::fetchNext(void)" (?fetchNext@QMYSQLResult@@MAE_NXZ) ......... QtSql.lib(qsql_mysql.obj) : error LNK2019: ссылка на неразрешенный внешний символ _mysql_list_tables@8 в функции "public: virtual class QStringList __thiscall QMYSQLDriver::tables(enum QSql::TableType)const " (?tables@QMYSQLDriver@@UBE?AVQStringList@@W4TableType@QSql@@@Z) D:\Workspace\Qt\test\Release\test.exe : fatal error LNK1120: 47 неразрешенных внешних элементов Журнал построения был сохранен в "file://d:\Workspace\Qt\test\test\Release\BuildLog.htm" test - ошибок 48, предупреждений 1 ========== Перестроение всех: успешно: 0, с ошибками: 1, пропущено: 0 ========== Название: Re: Qt 4.4.3 (-static -release -qt-sql-mysql) Ошибка при использовании QtSql.lib Отправлено: CrazyDeath от Июль 16, 2010, 21:01 Вроде visual studio не находит саму библиотеку mysql.
вот выдержка из моего скрипта (bat), который указывает где библиотека. Код: set INCLUDE=c:\mysql\include;%INCLUDE% Название: Re: Qt 4.4.3 (-static -release -qt-sql-mysql) Ошибка при использовании QtSql.lib Отправлено: yaroslav429 от Июль 16, 2010, 21:08 В предидущем посте забыл указать, что ошибки при сборке приложений, а не библиотек (исправил). Библиотеки собираются нормально.
Самое интересное для меня то, что приложение demos\sqlbrowser отлично видит драйвер QMYSQL, и все нормально работает. Вот и решил я в студии собрать плагин mysql (хотя работать он не должен в статической сборке, насколько я понял из предупреждения при configure). И все же, открываю src\plugins\sqldrivers\sqldrivers.sln в студии, а там только один проект - qsqllite. mysql был бы доступен при configure -qt-plugin-mysql? Потом меня осенило посмотреть как строится demos\sqlbrowser. В файле проекта нашел Код Посмотрел у себя в проекте - у меня такого нет. Добавил "C:\MySQL\lib\opt\libmysql.lib", и собралось без ошибок, и заработало. Но на другой машине требует libmysql.dll. Это нормально? Или библиотека mysql должна быть встроена в статической сборке? В общем, я так и не понял, как собрать статическую либу mysql для qt. Подскажите, пожалуйста где моя ошибка! CrazyDeath, все эти пути я добавил, иначе, по моему, драйвер бы не собрался. Название: Re: Qt 4.4.3 (-static -release -qt-sql-mysql) Ошибка при использовании QtSql.lib Отправлено: CrazyDeath от Июль 17, 2010, 01:24 а тогда читай документацию как правильно линковать плагины для
статической сборки. как то так :) Код: Q_IMPORT_PLUGIN(qjpeg) //в main.cpp libmysql.dll я обычно копирую в папку %QTDIR%\bin Название: Re: Qt 4.4.3 (-static -release -qt-sql-mysql) Ошибка при использовании QtSql.lib Отправлено: yaroslav429 от Июль 17, 2010, 10:58 а тогда читай документацию как правильно линковать плагины для Да читал.. Но, видать, плохо читал =)статической сборки. libmysql.dll я обычно копирую в папку %QTDIR%\bin Но на машине, где не установлен сервер БД, все равно нужна длл, так что придется таскать с собой. Но, по моему, не должно быть зависимости в статической сборке :-\Хотя.. Зависимость от одной динамической библиотеки это не критично =) Название: Re: Qt 4.4.3 (-static -release -qt-sql-mysql) Ошибка при использовании QtSql.lib Отправлено: CrazyDeath от Июль 17, 2010, 14:20 что бы небыло зависимости от libmysql.dll, нужно линковать с библиотекой mysqlclient.lib
Название: Re: Qt 4.4.3 (-static -release -qt-sql-mysql) Ошибка при использовании QtSql.lib Отправлено: yaroslav429 от Июль 17, 2010, 16:32 что бы небыло зависимости от libmysql.dll, нужно линковать с библиотекой mysqlclient.lib Вот за это спасибо! по моему сработало! Позже протестирую на другой машине. В листере тотала показывает, что нет зависимости от libmysql.dll |