Russian Qt Forum

Qt => Базы данных => Тема начата: wyvern от Декабрь 18, 2008, 12:09



Название: Visual Studio 2005 | LNK2019 - не линкуется статический плагин qsqlodbc
Отправлено: wyvern от Декабрь 18, 2008, 12:09
привет!

1) собрал qt 4.4.3 статически
2) собрал согласно Assistant статический плагин qsqlodbc. он появился в папке C:\Qt\4.4.3\plugins\sqldrivers (qsqlodbc.lib)
3) далее согласно Assistant подключил его к проекту

в main.cpp добавил

#include <QtPlugin>
QT_BEGIN_NAMESPACE
Q_IMPORT_PLUGIN(qsqlodbc)
QT_END_NAMESPACE


добавил в файл pro:
QTPLUGIN += qsqlodbc

в результате при линке в Visual Studio 2005 вылетает ошибка:
error LNK2019: unresolved external symbol "class QObject * __cdecl qt_plugin_instance_qsqlodbc(void)" (?qt_plugin_instance_qsqlodbc@@YAPAVQObject@@XZ) referenced in function "public: __thiscall StaticqsqlodbcPluginInstance::StaticqsqlodbcPluginInstance(void)" (??0StaticqsqlodbcPluginInstance@@QAE@XZ)   main.obj

причем сборка из ком. строки, кажется, удается. но и в этом случае при подключении к базе данных возникает ошибка, как-будто драйвер БД не подключен. возможно, эта ошибка возникает из-за способа обращения?
QSqlDatabase db;
db = QSqlDatabase::addDatabase("QODBC", "MAIN");




Название: Re: Visual Studio 2005 | LNK2019 - не линкуется статический плагин qsqlodbc
Отправлено: inri13666 от Декабрь 21, 2008, 00:27
ПРоблема в том что плагины могут быть скомпилены тока в шаред версии
link (http://www.doc.crossplatform.ru/qt/4.3.2/sql-driver.html)


Название: Re: Visual Studio 2005 | LNK2019 - не линкуется статический плагин qsqlodbc
Отправлено: lit-uriy от Декабрь 21, 2008, 01:36
2 inri13666, что-то по ссылке я такого утверждения не увидел. Можешь уточнить?


Название: Re: Visual Studio 2005 | LNK2019 - не линкуется статический плагин qsqlodbc
Отправлено: inri13666 от Декабрь 21, 2008, 05:43
Цитировать
Решение проблем

Вы должны всегда использовать библиотеки клиента, которые были собраны тем же компилятором, который вы используете для своего проекта. Если вы не можете получить описание источника сборки библиотеки клиента самостоятельно, попробуйте удостовериться, что предсобранная библиотека совместима с вашим компилятором, иначе вы получите множество ошибок "undefined symbols". Некоторые компиляторы имеют инструменты для преобразования библиотек, например, Borland предоставляет инструмент COFF2OMF.EXE для преобразования библиотек, которые были собраны в Microsoft Visual C++.

Если компиляция плагина прошла успешно, но он не может быть загружен, убедитесь в том, что следующие требования выполнены:
Убедитесь, что вы используете Qt библиотеку динамически; вы не может использовать плагины в статической сборке.
Убедитесь, что плагин в правильной директории. Можно использовать QApplication::libraryPaths(), чтобы определить, где Qt ищет плагины.
Убедитесь, что клиентские библиотеки СУБД доступны. Под Unix, выполните команду ldd и введите имя плагина в качестве параметра, например: ldd libqsqlmysql.so. Вы получите предупреждение, если какая-то из клиентских библиотек не найдена. Под Windows, вы можете использовать Visual Studio dependency walker.
Скомпилируйте Qt с установленным QT_DEBUG_COMPONENT, чтобы получить более подробную отладочную информацию во время загрузки плагинов.

Если у вас возникли проблемы с загрузкой плагинов и вы видите ошибку вроде этой:
     QSqlDatabase: QMYSQL driver not loaded
     QSqlDatabase: available drivers: QMYSQL

проблема, вероятно, в том, что плагин имеет неправильный ключ сборки. Для отладки удалите соответствующую запись в файле $HOME/.qt/qt_plugins_(qtversion).rc.

После чего снова попытайтесь загрузить этот плагин, и вы получите более детальное описание ошибки.

=)


Название: Re: Visual Studio 2005 | LNK2019 - не линкуется статический плагин qsqlodbc
Отправлено: Detonator от Декабрь 21, 2008, 10:09
Имеется в виду что динамические плагины нельзя загружать в статической версии, хотя есть примеры когда и это можно обойти. В статическую версию можно все нужные плагины прикомпилить сразу.


Название: Re: Visual Studio 2005 | LNK2019 - не линкуется статический плагин qsqlodbc
Отправлено: wyvern от Декабрь 24, 2008, 16:23
собрал с ключом -qt-sql-oci с указанием необходимых путей

все получилось, как и ожидалось

собираю теперь проект без всякой ерунды. просто подключил к проекту QtSql.lib (раньше тоже подключал) и oci.lib (с указанием пути). проект нормально собирается и запускается. однако для запуска потребовалось кинуть в папку с программой файл oci.dll.

так вот. запуск-то происходит, но при подключении к БД вылетает ошибка:

QOCIDriver: unable to create environment

lastError() сообщает: Unable to logon

опять непонятно, что делать


Название: Re: Visual Studio 2005 | LNK2019 - не линкуется статический плагин qsqlodbc
Отправлено: Admin от Декабрь 24, 2008, 16:40
насколько я помню оракл
для работы вашей программы ему нужен набор библиотек называемый oracle client
и там несколько десятков мегобайт

аналогичная тут (http://www.prog.org.ru/topic_7789_0.html) - не решена

а вам наверно сюда  (http://www.prog.org.ru/topic_6941_0.html)


Название: Re: Visual Studio 2005 | LNK2019 - не линкуется статический плагин qsqlodbc
Отправлено: wyvern от Декабрь 24, 2008, 17:05
а вам наверно сюда  (http://www.prog.org.ru/topic_6941_0.html)

я там уже был :)

а на моей машине уже стоит оракловский клиент, что меня и смущает

если попробовать вместо QOCI использовать QODBC, а он у меня не установлен, то среди ошибок вываливается сообщение:

QSqlDataBase: available drivers: QOCI8 QOCI

из чего я делаю вывод, что драйвер оракла нормально установился