Название: ЧТО ?! НИКТО НЕ СОБИРАЛ QT С ПОДДЕРЖКОЙ IBASE !!! Отправлено: Kapik от Октябрь 25, 2005, 17:43 Под виндой установлены:
MinGW 4.1.0 Qt-4.0.1-OpenSource-MinGW FireBird 1.5.2 Все пути к MinGW/bin и Qt/bin, а также системные переменные установлены. запускаю: configure -platform win32-g++ -share -qt-sql-ibase -I d:\firebird\include -L d:\firebird\lib mingw32-make ПОЛУЧАЮ: Цитировать gcc -c -O2 -O2 -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_EDITION=QT_EDITION_DESKTOP -DQT_BOOTSTRAPPED -DQT_RCC -DQT_LITE_UNICODE -DQT_NO_DATASTREAM -DQT_NO_THREAD -DQT_NO_QOBJECT -DQT_NO_UNICODETABLES -DQT_NO_LIBRARY -DQT_NODLL -I"..\..\corelib\arch\generic" -I"D:/Qt/include" -I"." -I"D:/Qt/include/QtCore" -I"D:/Qt/include/QtXml" -I"..\..\3rdparty\zlib" -I"." -I"D:/Qt/mkspecs/win32-g++" -o tmp\obj\release_shared\zutil.o ..\..\3rdparty\zlib\zutil.c g++ -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -Wl,-s -Wl,-subsystem,console -o "..\..\..\bin\rcc.exe" object_script.rcc.Release d:\firebird\lib D:\MinGW\BIN\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: d:\firebird\lib: No such file: Permission denied collect2: ld returned 1 exit status mingw32-make[3]: *** [..\..\..\bin\rcc.exe] Error 1 mingw32-make[3]: Leaving directory `D:/Qt/src/tools/rcc' mingw32-make[2]: *** [release] Error 2 mingw32-make[2]: Leaving directory `D:/Qt/src/tools/rcc' mingw32-make[1]: *** [sub-tools\rcc-make_default-ordered] Error 2 mingw32-make[1]: Leaving directory `D:/Qt/src' mingw32-make: *** [sub-src-make_default-ordered] Error 2 Права доступа к директориям lib и include - правильные :) ЧТО ЗА ХРЕНЬ ?! Кроме того, в ibase.pro прописаны gds32_ms.lib и gds32_bor.lib, а их естественно нет. ПРАВЛЮ РУЧКАМИ gds32 на fbclient - ПРАВИЛЬНО ?! ИЛИ НЕТ ?! КОРОЧЕ В ЧЕМ КОСЯК ? ПОМОГИТЕ !!!!!!!!!!!!!!!!!!! УЖЕ НЕДЕЛЮ пытаюсь разобраться - НЕ МОГУ !!!! Название: ЧТО ?! НИКТО НЕ СОБИРАЛ QT С ПОДДЕРЖКОЙ IBASE !!! Отправлено: DenKor от Октябрь 26, 2005, 07:38 Пересобирай lib библиотеки в формате *.a и меняй ссылки в makefile
Название: ЧТО ?! НИКТО НЕ СОБИРАЛ QT С ПОДДЕРЖКОЙ IBASE !!! Отправлено: alexandrl от Октябрь 26, 2005, 09:44 Я првавил какой-то makefile (касаемо IBASE) на предмет указания полного пути к lib-файлу.
Название: ЧТО ?! НИКТО НЕ СОБИРАЛ QT С ПОДДЕРЖКОЙ IBASE !!! Отправлено: Kapik от Октябрь 26, 2005, 22:37 Цитата: "DenKor" Пересобирай lib библиотеки в формате *.a и меняй ссылки в makefile А как это сделать ? Ведь у меня нет исходников для fbclient.lib ! Название: ЧТО ?! НИКТО НЕ СОБИРАЛ QT С ПОДДЕРЖКОЙ IBASE !!! Отправлено: DenKor от Октябрь 27, 2005, 14:29 Поиск рулит
http://prog.org.ru/forum/topic_1712_.html#7026 Для тебя аналогично, берешь свою dll и def файл Название: ЧТО ?! НИКТО НЕ СОБИРАЛ QT С ПОДДЕРЖКОЙ IBASE !!! Отправлено: Kapik от Октябрь 27, 2005, 22:14 Цитата: "DenKor" Поиск рулит http://prog.org.ru/forum/topic_1712_.html#7026 Для тебя аналогично, берешь свою dll и def файл СПАСИБО ! НЕМНОГО ПРОДВИНУЛСЯ ВПЕРЕД :) НО ПРОБЛЕМЫ ОСТАЛИСЬ :evil: Сконвертировал библиотеку: reimp fbclient_ms.lib получил libfbclient.a и соответственно fbclient.def, кстати в .def файле и .a файле ссылки на функции получились верные, т.е. вида isc_sqlcode@4 Изменил ibase.pro следующим образом: LIBS *= -lfbclient Далее собираю: qmake -o Makefile "INCLUDEPATH+=d:\firebird\include" "LIBS+=-Ld:\firebird\lib" ibase.pro mingw32-make И ПОЛУЧАЮ :twisted: : Цитировать Creating library file: D:\Qt\plugins\sqldrivers\libqsqlibased.a tmp\obj\debug_shared\qsql_ibase.o(.text+0x179): In function `Z13getIBaseErrorR7QStringPlRl': D:/Qt/src/plugins/sqldrivers/ibase/../../../sql/drivers/ibase/qsql_ibase.cpp:52: undefined reference to isc_sqlcode@4 Но ведь в fbclient.def и libfbclient.a прописаны именно isc_sqlcode@4, а не isc_sqlcode ! В ЧЕМ ПРОБЛЕМА ? НЕ МОГУ ПОНЯТЬ ! Название: В догонку Отправлено: Kapik от Октябрь 27, 2005, 22:17 Все пути и имена файлов - корректные, т.е.
при сборке плагина make ищет ТАМ ГДЕ НАДО и ТО ЧТО НАДО ! НО ВОТ ПРОБЛЕМА :( см. предыдущий пост. Название: ЧТО ?! НИКТО НЕ СОБИРАЛ QT С ПОДДЕРЖКОЙ IBASE !!! Отправлено: Kapik от Октябрь 28, 2005, 00:02 :D ВСЕ ПОЛУЧИЛОСЬ ! УРА ! :D
Привожу подробное решение проблемы, видимо с другими sql-плагинами решается аналогично. Для получения рабочей библиотеки под 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 обязательно вставляем ` ` пробел. РЕЗУЛЬТАТ: Статически скомпонованный драйвер Вот кажется и все :) Отдельное спасибо DenKor ! Название: Re: ЧТО ?! НИКТО НЕ СОБИРАЛ QT С ПОДДЕРЖКОЙ IBASE !!! Отправлено: Astrologer от Сентябрь 30, 2010, 15:36 Вот мой файл .pri и как вы указали у меня таких строк несколько.
Код: contains(sql-drivers, all ) { |