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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Visual Studio 2005 | LNK2019 - не линкуется статический плагин qsqlodbc  (Прочитано 8658 раз)
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");


Записан
inri13666
Гость
« Ответ #1 : Декабрь 21, 2008, 00:27 »

ПРоблема в том что плагины могут быть скомпилены тока в шаред версии
link
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Декабрь 21, 2008, 01:36 »

2 inri13666, что-то по ссылке я такого утверждения не увидел. Можешь уточнить?
Записан

Юра.
inri13666
Гость
« Ответ #3 : Декабрь 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.

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

=)
Записан
Detonator
Гость
« Ответ #4 : Декабрь 21, 2008, 10:09 »

Имеется в виду что динамические плагины нельзя загружать в статической версии, хотя есть примеры когда и это можно обойти. В статическую версию можно все нужные плагины прикомпилить сразу.
Записан
wyvern
Гость
« Ответ #5 : Декабрь 24, 2008, 16:23 »

собрал с ключом -qt-sql-oci с указанием необходимых путей

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

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

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

QOCIDriver: unable to create environment

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

опять непонятно, что делать
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #6 : Декабрь 24, 2008, 16:40 »

насколько я помню оракл
для работы вашей программы ему нужен набор библиотек называемый oracle client
и там несколько десятков мегобайт

аналогичная тут - не решена

а вам наверно сюда
Записан
wyvern
Гость
« Ответ #7 : Декабрь 24, 2008, 17:05 »

а вам наверно сюда

я там уже был Улыбающийся

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

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

QSqlDataBase: available drivers: QOCI8 QOCI

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


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