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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.4.3 (-static -release -qt-sql-mysql) Ошибка при использовании QtSql.lib  (Прочитано 6183 раз)
yaroslav429
Гость
« : Июль 16, 2010, 04:34 »

По форуму искал подобные проблемы, но не нашел ничего, что смогло бы мне помочь  Грустный

В общем, собрал Qt 4.4.3 commercial из исходников для msvc-2008.
Код
DOS
configure -release -static -qt-sql-mysql -qt-libjpeg -qt-zlib -qt-gif -no-qt3support -I C:\mysql\include -L C:\mysql\lib\opt -l libmysql
 
Сборку проводил в студии (по-моему, там тоже отлично собирается) - запустил projects.sln и "Построить решение".
После этого потестил немного - демки и примеры собираются и работают (не зависимы ни от чего), т.е. собралось нормально.
Далее собрал плагин mysql
Код
DOS
cd C:\Qt\4.4.3\src\plugins\sqldrivers\mysql
qmake -o Makefile "INCLUDEPATH+=C:\MySQL\include" "LIBS+=C:\MySQL\lib\opt\libmysql.lib" mysql.pro
nmake release
 
Собралось, но при сборке тестового приложения с использованием QtSql посыпались ошибки, типа unresolved external и я, на всякий пожарный, пересобрал QtSql
Код
DOS
cd C:\Qt\4.4.3\src\sql
C:\Qt\4.4.3\src\sql>qmake -o Makefile sql.pro "INCLUDEPATH+=C:\MySQL\include" "L
IBS+=C:\MySQL\lib\opt\libmysql.lib"
C:\Qt\4.4.3\src\sql>nmake release
 
Тоже нормально собралось, но ошибки не пропали. вот лог построения тестового приложения (-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 ==========
« Последнее редактирование: Июль 16, 2010, 21:23 от yaroslav429 » Записан
CrazyDeath
Гость
« Ответ #1 : Июль 16, 2010, 21:01 »

Вроде visual studio не находит саму библиотеку mysql.
вот выдержка из моего скрипта (bat), который указывает где библиотека.

Код:
set INCLUDE=c:\mysql\include;%INCLUDE%
set LIBPATH=c:\mysql\Embedded\static\release;%LIBPATH%
set LIB=c:\mysql\Embedded\static\release;%LIB%
Записан
yaroslav429
Гость
« Ответ #2 : Июль 16, 2010, 21:08 »

В предидущем посте забыл указать, что ошибки при сборке приложений, а не библиотек (исправил). Библиотеки собираются нормально.

Самое интересное для меня то, что приложение demos\sqlbrowser отлично видит драйвер QMYSQL, и все нормально работает. Вот и решил я в студии собрать плагин mysql (хотя работать он не должен в статической сборке, насколько я понял из предупреждения при configure). И все же, открываю src\plugins\sqldrivers\sqldrivers.sln в студии, а там только один проект - qsqllite. mysql был бы доступен при configure -qt-plugin-mysql?

Потом меня осенило посмотреть как строится demos\sqlbrowser. В файле проекта нашел
Код
XML
<Tool Name="VCLinkerTool" AdditionalDependencies="libmysql.lib ..."...>
Посмотрел у себя в проекте - у меня такого нет. Добавил "C:\MySQL\lib\opt\libmysql.lib", и собралось без ошибок, и заработало. Но на другой машине требует libmysql.dll. Это нормально? Или библиотека mysql должна быть встроена в статической сборке?

В общем, я так и не понял, как собрать статическую либу mysql для qt. Подскажите, пожалуйста где моя ошибка!

CrazyDeath, все эти пути я добавил, иначе, по моему, драйвер бы не собрался.
« Последнее редактирование: Июль 16, 2010, 21:19 от yaroslav429 » Записан
CrazyDeath
Гость
« Ответ #3 : Июль 17, 2010, 01:24 »

а тогда читай документацию как правильно линковать плагины для
статической сборки.
как то так Улыбающийся
Код:
Q_IMPORT_PLUGIN(qjpeg) //в main.cpp

QTPLUGIN     += qjpeg //в project.pro

libmysql.dll я обычно копирую в папку %QTDIR%\bin
« Последнее редактирование: Июль 17, 2010, 01:27 от CrazyDeath » Записан
yaroslav429
Гость
« Ответ #4 : Июль 17, 2010, 10:58 »

а тогда читай документацию как правильно линковать плагины для
статической сборки.
Да читал.. Но, видать, плохо читал =)
libmysql.dll я обычно копирую в папку %QTDIR%\bin
Но на машине, где не установлен сервер БД, все равно нужна длл, так что придется таскать с собой. Но, по моему, не должно быть зависимости в статической сборке В замешательстве

Хотя.. Зависимость от одной динамической библиотеки это не критично =)
Записан
CrazyDeath
Гость
« Ответ #5 : Июль 17, 2010, 14:20 »

что бы небыло зависимости от libmysql.dll, нужно линковать с библиотекой mysqlclient.lib
Записан
yaroslav429
Гость
« Ответ #6 : Июль 17, 2010, 16:32 »

что бы небыло зависимости от libmysql.dll, нужно линковать с библиотекой mysqlclient.lib
Вот за это спасибо! по моему сработало! Позже протестирую на другой машине. В листере тотала показывает, что нет зависимости от libmysql.dll
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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