Участник системы WebMoney

Сборка драйвера QIBASE для Qt SDK 4.8.0

Предисловие

Сам потратил много времени на попытку собрать QIBASE драйвер для Qt SDK. Больше всего меня замучило сообщение об ошибке:

QSqlDatabase: QIBASE driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC

После долго и вдумчивого чтения форумов, мануалов и т.п. всетаки удалось собрать этот драйвер и заставить работать. Как оказалось, в интернете достаточно много упоминаний этой темы. И казалось бы много руководств. Но почему-то везде пишут отдельные моменты. Пришлось собирать по крупицам, додумывать... +подправлять файлы исходников.

Сборка драйвера

Важно! При установке используйте пути без пробелов. Иначе будут лишние сложности.

Для начала нам потребуются:

  1. Qt SDK for Open Source C++ development on Window — онлайн установщик Qt SDK.

  2. Firebird-2.1.4.18393-0_Win32.zip — Firebird 2.1 Zip kit for manual/custom installs of Classic or Superserver.

Установка Qt SDK 4.8.0

Запускаем скачанный Qt_SDK_Win_online_v1_1_4_en.exe.

Ставим отметки там где подчеркнуто красным, соглашаемся и ждем пока установится.

Если вы установили Qt SDK for Open Source C++ development on Windows - Offline Installer, то для "доустановки" Qt 4.8.0 Sources нужно запустить утилиту Maintain Qt SDK.

 

 

 

Я установил Qt SDK В каталог "G:\Qt\QtSDK"

Сборка драйвера QIBASE 

Распаковываем Firebird-2.1.4.18393-0_Win32.zip в... Я распаковал в папку "G:\Qt\Firebird_2_1".

К моменту начала сборки имеем:
"G:\Qt\QtSDK"
"G:\Qt\Firebird_2_1"

Собрать можно автоматически или в ручную.


Для автоматизации сборки я написал сценарий сборки в пакетном файле.

Берем скрипт BuildFBDriver.bat. Настраиваем первые 3 параметра:
QTSDK - путь к установленной Qt SDK
QTVER - версия. Нормально работает с 4.8.0. У предыдущих свои не стыковки в исходниках поэтому может и не работать...
FIREBIRD - путь к распакованному FIREBIRD. Обратите внимание, что мы скачали 32-х битную сборку Firebird! Что бы работать с 64-х битной сборкой нужно пересобирать Qt для 64-х битной платформы, а это уже другая тема....

Выставив нужные параметры, сохраняем и запускаем скрипт.

Привожу сам скриптик:

BuildFBDriver.bat
set QTSDK=G:\Qt\QtSDK
set QTVER=4.8.0
set FIREBIRD=G:\Qt\Firebird_2_1
REM --------------------------------------------------------
 
@echo Setting up environment for Qt usage...
set QTDESKTOP=%QTSDK%\Desktop\Qt\%QTVER%
set QTSRC=%QTSDK%\QtSources\%QTVER%
 
set QTDIR=%QTDESKTOP%\mingw
set PATH=%QTDIR%\bin;%QTSDK%\mingw\bin;%PATH%
 
@echo.
@echo.
@echo.
@echo.
@echo ---[Prepare]---
@echo ---[Path "%QTDIR%\include\QtSql\private\qsqlcachedresult_p.h"]---
if EXIST "%QTDIR%\include\QtSql\private\qsqlcachedresult_p.h" (
    if NOT EXIST "%QTDIR%\include\QtSql\private\qsqlcachedresult_p.h.bak" (
        move /y "%QTDIR%\include\QtSql\private\qsqlcachedresult_p.h" "%QTDIR%\include\QtSql\private\qsqlcachedresult_p.h.bak"
    ) ELSE (
        del "%QTDIR%\include\QtSql\private\qsqlcachedresult_p.h"
    )
    (
        echo #include "%QTSRC:\=/%/src/sql/kernel/qsqlcachedresult_p.h"
    ) >> "%QTDIR%\include\QtSql\private\qsqlcachedresult_p.h"
)
@echo.
@echo.
@echo.
@echo.
 
@echo ---[Build IBASE driver]---
cd /d "%QTSRC%\src\plugins\sqldrivers\ibase"
qmake "INCLUDEPATH+=%FIREBIRD:\=/%/include" "LIBS+=%FIREBIRD:\=/%/lib/fbclient_ms.lib" ibase.pro
set err=%err%;%ERRORLEVEL%
mingw32-make clean
set err=%err%;%ERRORLEVEL%
mingw32-make all
set err=%err%;%ERRORLEVEL%
@echo.
@echo.
@echo.
@echo.
 
@echo ---[copy libs]---
copy /y "%QTSRC%\src\plugins\sqldrivers\ibase\debug\qsqlibased4.dll" "%QTDIR%\plugins\sqldrivers"
copy /y "%QTSRC%\src\plugins\sqldrivers\ibase\debug\libqsqlibased4.a" "%QTDIR%\plugins\sqldrivers"
copy /y "%QTSRC%\src\plugins\sqldrivers\ibase\release\qsqlibase4.dll" "%QTDIR%\plugins\sqldrivers"
copy /y "%QTSRC%\src\plugins\sqldrivers\ibase\release\libqsqlibase4.a" "%QTDIR%\plugins\sqldrivers"
 
copy /y "%FIREBIRD%\bin\fbclient.dll" "%QTDIR%\bin"
 
@echo err cods: %err%
pause