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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] QIBASE: Driver not loaded  (Прочитано 6693 раз)
UltraPenguin
Гость
« : Апрель 20, 2015, 16:33 »

Доброго времени суток!

Есть приложение и dll к нему, юзающая InterBase 9. Вот структура каталогов:
%appdir%/myapp.exe
%appdir%/gds32.dll - взят из папки bin Interbase'a
%appdir%/sqldrivers - все имеющиеся драйвера БД, в т.ч. qsqlibase(d)4.dll
%appdir%/DB/db.dll - собственно dll работы с БД.

Доступа к коду самого приложения нет, только к коду отлаживаемой dll. Работа ведется в MSVS2010 с использованием Qt 4.8.6.

qsqlibase компилировал согласно инструкции тут: http://doc.crossplatform.ru/qt/4.5.0/sql-driver.html#qibase-for-borland-interbase

Вот содержание ibase.pro:
Код:
TARGET = qsqlibase

SOURCES = main.cpp

INCLUDEPATH += C:\CodeGear\InterBase\SDK\include
LIBS += C:\CodeGear\InterBase\SDK\lib_ms\gds32_ms.lib
include(../../../sql/drivers/ibase/qsql_ibase.pri)

include(../qsqldriverbase.pri)

Вот содержание сгенерированного pro файла отлаживаемой dll:
Код:
TEMPLATE = lib
TARGET = db
DESTDIR = ../bin/win32/DB
QT += core gui sql xml
CONFIG += debug
DEFINES += QT_LARGEFILE_SUPPORT QT_SQL_LIB DB_LIB WIN32_LEAN_AND_MEAN QT_XML_LIB QT_DLL
INCLUDEPATH += ./GeneratedFiles \
    . \
    ./GeneratedFiles/Debug \
    ./3rd-party/Info-ZIP \
    ./../!_Groundwork \
    ./../!_Groundwork/App \
    ./3rd-party/ibtr
LIBS += -lws2_32 \
#    -lc:/CodeGear/InterBase/SDK/lib_ms/gds32_ms
# PRECOMPILED_HEADER = StdAfx.h
DEPENDPATH += .
MOC_DIR += ./GeneratedFiles/debug
OBJECTS_DIR += debug
UI_DIR += ./GeneratedFiles
RCC_DIR += ./GeneratedFiles
include(db.pri)
win32:RC_FILE = db.rc

Создание объекта БД:
Код:
db_ = QSqlDatabase::addDatabase(opts_.dbEngine(), uid_);

isValid() возвращает false, а в db_.lastError() "Driver not loaded" и в db_.drivers() "QSQLITE QODBS и другие, кроме QIBASE".
Кто-нибудь сталкивался с подобным?

UPD Dovgon (спасибо ему за это) натолкнул на мысль, что драйвер БД может находиться не в той папке. И действительно он искался только по стандартному пути %QTDIR%/plugins/sqldrivers/.
« Последнее редактирование: Апрель 22, 2015, 11:23 от UltraPenguin » Записан
Dovgon
Гость
« Ответ #1 : Апрель 21, 2015, 08:36 »

Пытаешься запустить из Qt creator?
Записан
UltraPenguin
Гость
« Ответ #2 : Апрель 21, 2015, 11:18 »

Нет. Использую MSVS
Записан
sociopath
Гость
« Ответ #3 : Апрель 21, 2015, 14:07 »

Есть предположение, что виновата строчка в проектнике драйвера LIBS += C:\CodeGear\InterBase\SDK\lib_ms\gds32_ms.lib . В рантайме скорее всего будет искать либу с именем gds32_ms.dll, а не gds32.dll (ну и соответственно он не находит, и драйвер не грузится).

А вообще не надо гадать на кофейной гуще, а пройтись dependency walker'ом по скомпилированному файлу драйвера, и увидеть, какую именно он библиотеку не подцепил.
Записан
Dovgon
Гость
« Ответ #4 : Апрель 21, 2015, 19:39 »

Посмотри пути откуда загружаются библиотеки

QApplication a(argc, argv);
qDebug()<<a.libraryPaths();
Записан
UltraPenguin
Гость
« Ответ #5 : Апрель 22, 2015, 11:16 »

Есть предположение, что виновата строчка в проектнике драйвера LIBS += C:\CodeGear\InterBase\SDK\lib_ms\gds32_ms.lib . В рантайме скорее всего будет искать либу с именем gds32_ms.dll, а не gds32.dll (ну и соответственно он не находит, и драйвер не грузится).

А вообще не надо гадать на кофейной гуще, а пройтись dependency walker'ом по скомпилированному файлу драйвера, и увидеть, какую именно он библиотеку не подцепил.

dependency walker'ом прошелся первым делом, ничего криминального нет, все в наличии. По поводу gds32_ms: точно дело не в этом.
Записан
UltraPenguin
Гость
« Ответ #6 : Апрель 22, 2015, 11:18 »

Посмотри пути откуда загружаются библиотеки

QApplication a(argc, argv);
qDebug()<<a.libraryPaths();

Хм... QApplication можно использовать в коде dll-ки?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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