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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Cборка и подключение SQL-плагина/драйвера iBase для Qt+MinGW  (Прочитано 8561 раз)
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 обязательно вставляем ` ` пробел.

РЕЗУЛЬТАТ: Статически скомпонованный драйвер

Вот кажется и все Улыбающийся
Записан
Kapik
Гость
« Ответ #1 : Октябрь 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
Гость
« Ответ #2 : Октябрь 31, 2005, 18:12 »

Не надо всего этого колдовства, в папку:

$QTDIR\src\plugins\sqldrivers\ibase\

копируете файл fbclient_ms.lib, переименовываете его в gds32_ms.lib, компилируете библиотеку или плагин, и будет вам счастье. Изменять при этом ничего не надо. У меня именно так и работет.
Записан
Kapik
Гость
« Ответ #3 : Октябрь 31, 2005, 22:06 »

Цитата: "ladserg"
Не надо всего этого колдовства, в папку:

$QTDIR\src\plugins\sqldrivers\ibase\

копируете файл fbclient_ms.lib, переименовываете его в gds32_ms.lib, компилируете библиотеку или плагин, и будет вам счастье. Изменять при этом ничего не надо. У меня именно так и работет.


И что, действительно работает  Показает язык
Ведь fbclient_ms.lib в MS-формате, а ld (линкер MinGW) линкует
библиотеки только в .a формате !

Может у тебя не MinGW, а MS Visual Studio ? - Тогда вопросов нет !

В любом случае спасибо за еще один вариант решения проблемы,
поскольку когда я искал решение ничего не нашел, а теперь
кому надо получит возможность выбрать из вариантов Улыбающийся

Ну и еще, в процессе поиска решения я достаточно покопался
как и в Qt, так и в MinGW что по-моему очень полезно Улыбающийся
Записан
ladserg
Гость
« Ответ #4 : Ноябрь 01, 2005, 07:20 »

Цитата: "Kapik"

...
И что, действительно работает  Показает язык
Ведь fbclient_ms.lib в MS-формате, а ld (линкер MinGW) линкует
библиотеки только в .a формате !

Работает, MinGW спокойно использует MS lib'ы, у меня по крайней мере проблем не было.
Цитата: "Kapik"

Может у тебя не MinGW, а MS Visual Studio ? - Тогда вопросов нет !

MS Visual Studio я не пользую.
Цитата: "Kapik"

В любом случае спасибо за еще один вариант решения проблемы,
поскольку когда я искал решение ничего не нашел, а теперь
кому надо получит возможность выбрать из вариантов Улыбающийся

Ну и еще, в процессе поиска решения я достаточно покопался
как и в Qt, так и в MinGW что по-моему очень полезно Улыбающийся

Тоже плюс.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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