Название: Cборка и подключение SQL-плагина/драйвера iBase для Qt+MinGW Отправлено: Kapik от Октябрь 28, 2005, 00:11 Привожу подробное решение проблемы, видимо с другими
sql-плагинами решается аналогично. Речь идет о Qt-4.0.1-OpenSource-MinGW под Windows и FireBird-1.5.2 В составе FireBird-1.5.2 файлов библиотеки вида gds32*.lib - нет. Они заменены на fbclient*.lib и имеются в двух форматах MS и Borland. Для MinGW обе эти библиотеки НЕ ПОДХОДЯТ! Для получения рабочей библиотеки под MinGW делаем так: 1) reimp fbclient_ms.lib 2) Убираем все знаки подчеркивания `_` в начале каждой строки. к примеру: Цитировать _BLOB_close@4 @91 _BLOB_display@16 @92 _BLOB_dump@16 @93 _isc_start_transaction _gds__alloc@4 @1 _gds__attach_database@24 @2 заменяем на: Цитировать BLOB_close@4 @91 BLOB_display@16 @92 BLOB_dump@16 @93 isc_start_transaction gds__alloc@4 @1 gds__attach_database@24 @2 Все строки в файле !!! 3) dlltool -k --def fbclient.def --output-lib libfbclient.a --dllname fbclient.dll РЕЗУЛЬТАТ: Подходящая для MinGW библиотека libfbclient.a Для сборки плагина iBase для Qt делаем так: 1) В директории ($QTDIR)\src\plugins\sqldrivers\ibase\ibase.pro находим кусок типа: Цитировать win32 { !win32-borland : LIBS *= gds32_ms.lib win32-borland : LIBS += gds32_bor.lib } заменяем его на: Цитировать win32 { LIBS *= -lfbclient } (***) Замечание (***) строка `-lfbclient` означает, что будет производиться поиск файла библиотеки `libfbclient.a`, для этого в начале указывается `-l`, т.е. производится поиск `lib`+`fbclient`+`.a` 2) qmake -o Makefile "INCLUDEPATH+=($FIREBIRD)\include" "LIBS+=-L($FIREBIRD)\lib" ibase.pro !) В строке LIBS+= не перепутать регистр символов в котором вводим `-L` ! именно в верхнем регистре и со знаком минус. !) Между `-L` и ($FIREBIRD)\lib ПРОБЕЛ НЕ СТАВИТСЯ ! !) Здесь ($QTDIR) - путь к корневой директории QT, например D:\Qt-4.0.1 !) Здесь ($FIREBIRD) - путь к корневой директории FireBird, например D:\FireBird-1.5.2 РЕЗУЛЬТАТ: Собранный плагин При статической компоновке драйвера iBase в Qt делаем так: 1) В директории ($QTDIR)\src\sql\drivers\drivers.pri находим кусок типа: Цитировать win32 { !win32-borland : LIBS *= gds32_ms.lib win32-borland : LIBS += gds32_bor.lib } заменяем его на: Цитировать win32 { LIBS *= -lfbclient } 2) При конфигурировании Qt указываем пути к ($FIREBIRD)\include и ($FIREBIRD)\lib configure -qt-sql-ibase -I ($FIREBIRD)\include -L ($FIREBIRD)\lib !) Здесь ($QTDIR) - путь к корневой директории QT, например D:\Qt-4.0.1 !) Здесь ($FIREBIRD) - путь к корневой директории FireBird, например D:\FireBird-1.5.2 !) Между -I и ($FIREBIRD)\include обязательно вставляем ` ` пробел. !) Между -L и ($FIREBIRD)\lib обязательно вставляем ` ` пробел. РЕЗУЛЬТАТ: Статически скомпонованный драйвер Вот кажется и все :) Название: Re: Cборка и подключение SQL-плагина/драйвера iBase для Qt+M Отправлено: Kapik от Октябрь 28, 2005, 03:34 В предыдущем посте закралась ошибочка, что касается статической
компоновки драйвера :) Правильно так: При статической компоновке драйвера iBase в Qt делаем так: 1) В директории ($QTDIR)\src\sql\drivers\drivers.pri находим кусок типа: Цитировать win32 { !win32-borland : LIBS *= gds32_ms.lib win32-borland : LIBS += gds32_bor.lib } заменяем его на: Цитировать win32 { LIBS *= ($FIREBIRD)\lib\libfbclient.a } 2) При конфигурировании Qt указываем пути к ($FIREBIRD)\include и путь к библиотеке ($FIREBIRD)\lib\libfbclient.a configure -qt-sql-ibase -I ($FIREBIRD)\include -L ($FIREBIRD)\lib\libfbclient.a !) Здесь ($QTDIR) - путь к корневой директории QT, например D:\Qt-4.0.1 !) Здесь ($FIREBIRD) - путь к корневой директории FireBird, например D:\FireBird-1.5.2 !) Между -I и ($FIREBIRD)\include обязательно вставляем ` ` пробел. !) Между -L и ($FIREBIRD)\lib обязательно вставляем ` ` пробел. РЕЗУЛЬТАТ: Статически скомпонованный драйвер Дело в том, что configure рассматривает путь, указанный в -I <путь> как путь к ДИРЕКТОРИИ. Но в -L <путь> - как путь к КОНКРЕТНОЙ БИБЛИОТЕКЕ. В этом и была ошибочка :) Что касается сборки плагина, то можно делать так, как было описано в предыдущем посте, а можно и так: Для сборки плагина iBase для Qt делаем так: 1) В директории ($QTDIR)\src\plugins\sqldrivers\ibase\ibase.pro находим кусок типа: Цитировать win32 { !win32-borland : LIBS *= gds32_ms.lib win32-borland : LIBS += gds32_bor.lib } заменяем его на: Цитировать win32 { LIBS *= ($FIREBIRD)\lib\libfbclient.a } 2) qmake -o Makefile "INCLUDEPATH+=($FIREBIRD)\include" ibase.pro РЕЗУЛЬТАТ: Собранный плагин Дело в том, что при явном указании пути к библиотеке ($FIREBIRD)\lib\libfbclient.a добавлять в строку параметров qmake директиву "LIBS+=..." - не требуется, т.к. путь к библиотеке указан явно. Какой способ сборки плагина выбрать не имеет значения :) Вот теперь кажется все :) Название: Гм Отправлено: ladserg от Октябрь 31, 2005, 18:12 Не надо всего этого колдовства, в папку:
$QTDIR\src\plugins\sqldrivers\ibase\ копируете файл fbclient_ms.lib, переименовываете его в gds32_ms.lib, компилируете библиотеку или плагин, и будет вам счастье. Изменять при этом ничего не надо. У меня именно так и работет. Название: Re: Гм Отправлено: Kapik от Октябрь 31, 2005, 22:06 Цитата: "ladserg" Не надо всего этого колдовства, в папку: $QTDIR\src\plugins\sqldrivers\ibase\ копируете файл fbclient_ms.lib, переименовываете его в gds32_ms.lib, компилируете библиотеку или плагин, и будет вам счастье. Изменять при этом ничего не надо. У меня именно так и работет. И что, действительно работает :P Ведь fbclient_ms.lib в MS-формате, а ld (линкер MinGW) линкует библиотеки только в .a формате ! Может у тебя не MinGW, а MS Visual Studio ? - Тогда вопросов нет ! В любом случае спасибо за еще один вариант решения проблемы, поскольку когда я искал решение ничего не нашел, а теперь кому надо получит возможность выбрать из вариантов :) Ну и еще, в процессе поиска решения я достаточно покопался как и в Qt, так и в MinGW что по-моему очень полезно :) Название: Re: Гм Отправлено: ladserg от Ноябрь 01, 2005, 07:20 Цитата: "Kapik" ... И что, действительно работает :P Ведь fbclient_ms.lib в MS-формате, а ld (линкер MinGW) линкует библиотеки только в .a формате ! Работает, MinGW спокойно использует MS lib'ы, у меня по крайней мере проблем не было. Цитата: "Kapik" Может у тебя не MinGW, а MS Visual Studio ? - Тогда вопросов нет ! MS Visual Studio я не пользую. Цитата: "Kapik" В любом случае спасибо за еще один вариант решения проблемы, поскольку когда я искал решение ничего не нашел, а теперь кому надо получит возможность выбрать из вариантов :) Ну и еще, в процессе поиска решения я достаточно покопался как и в Qt, так и в MinGW что по-моему очень полезно :) Тоже плюс. |