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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: ЧТО ?! НИКТО НЕ СОБИРАЛ QT С ПОДДЕРЖКОЙ IBASE !!!  (Прочитано 11841 раз)
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 - ПРАВИЛЬНО ?! ИЛИ НЕТ ?!

КОРОЧЕ В ЧЕМ КОСЯК ?
ПОМОГИТЕ !!!!!!!!!!!!!!!!!!!
УЖЕ НЕДЕЛЮ пытаюсь разобраться - НЕ МОГУ !!!!
Записан
DenKor
Гость
« Ответ #1 : Октябрь 26, 2005, 07:38 »

Пересобирай lib библиотеки в формате *.a и меняй ссылки в makefile
Записан
alexandrl
Гость
« Ответ #2 : Октябрь 26, 2005, 09:44 »

Я првавил какой-то makefile (касаемо IBASE) на предмет указания полного пути к lib-файлу.
Записан
Kapik
Гость
« Ответ #3 : Октябрь 26, 2005, 22:37 »

Цитата: "DenKor"
Пересобирай lib библиотеки в формате *.a и меняй ссылки в makefile


А как это сделать ?
Ведь у меня нет исходников для fbclient.lib !
Записан
DenKor
Гость
« Ответ #4 : Октябрь 27, 2005, 14:29 »

Поиск рулит
http://prog.org.ru/forum/topic_1712_.html#7026

Для тебя аналогично, берешь свою dll и def файл
Записан
Kapik
Гость
« Ответ #5 : Октябрь 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
Гость
« Ответ #6 : Октябрь 27, 2005, 22:17 »

Все пути и имена файлов - корректные, т.е.
при сборке плагина make ищет ТАМ ГДЕ НАДО и
ТО ЧТО НАДО !

НО ВОТ ПРОБЛЕМА Грустный см. предыдущий пост.
Записан
Kapik
Гость
« Ответ #7 : Октябрь 28, 2005, 00:02 »

Веселый   ВСЕ ПОЛУЧИЛОСЬ ! УРА !  Веселый

Привожу подробное решение проблемы, видимо с другими
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 !
Записан
Astrologer
Гость
« Ответ #8 : Сентябрь 30, 2010, 15:36 »

Вот мой файл .pri и как вы указали у меня таких строк несколько.
Код:
contains(sql-drivers, all ) {
    sql-driver +=   psql mysql odbc oci tds db2 sqlite ibase
}

contains(sql-drivers, psql) {
    HEADERS +=      drivers/psql/qsql_psql.h
    SOURCES +=      drivers/psql/qsql_psql.cpp

    unix {
        !isEmpty(QT_LFLAGS_PSQL) {
            LIBS *= $$QT_LFLAGS_PSQL
            QMAKE_CXXFLAGS *= $$QT_CFLAGS_PSQL
        }
        !contains(LIBS, .*pq.*):LIBS *= -lpq
    }

    win32 {
!win32-g++:!contains( LIBS, .*pq.* ):LIBS *= -llibpq
     win32-g++:!contains( LIBS, .*pq.* ):LIBS *= -lpq
        LIBS *= -lws2_32 -ladvapi32
    }
}

contains(sql-drivers, mysql) {
    HEADERS +=      drivers/mysql/qsql_mysql.h
    SOURCES +=      drivers/mysql/qsql_mysql.cpp

    unix {
        isEmpty(QT_LFLAGS_MYSQL) {
            !contains(LIBS, .*mysqlclient.*):!contains(LIBS, .*mysqld.*) {
                use_libmysqlclient_r:LIBS *= -lmysqlclient_r
                else:LIBS *= -lmysqlclient
            }
        } else {
            LIBS *= $$QT_LFLAGS_MYSQL
            QMAKE_CXXFLAGS *= $$QT_CFLAGS_MYSQL
        }
    }

    win32:!contains(LIBS, .*mysql.*):!contains(LIBS, .*mysqld.*) {
        !win32-g++:LIBS     *= -llibmysql    
win32-g++:LIBS    *= -lmysql
    }    
}

contains(sql-drivers, odbc) {
     HEADERS += drivers/odbc/qsql_odbc.h
     SOURCES += drivers/odbc/qsql_odbc.cpp

     mac:!contains( LIBS, .*odbc.* ):LIBS        *= -liodbc
     unix:!contains( LIBS, .*odbc.* ):LIBS       *= -lodbc

     win32 {
         !win32-borland:LIBS     *= -lodbc32
         win32-borland:LIBS      *= $(BCB)/lib/PSDK/odbc32.lib
     }
}

contains(sql-drivers, oci) {
    HEADERS += drivers/oci/qsql_oci.h
    SOURCES += drivers/oci/qsql_oci.cpp

    unix:!contains( LIBS, .*clnts.* ):LIBS += -lclntsh

    win32:LIBS += -loci
}

contains(sql-drivers, tds) {
    HEADERS += drivers/tds/qsql_tds.h
    SOURCES += drivers/tds/qsql_tds.cpp

    unix:LIBS += -L$SYBASE/lib -lsybdb

    win32 {
        !win32-borland:LIBS += -lNTWDBLIB
        win32-borland:LIBS += $(BCB)/lib/PSDK/NTWDBLIB.LIB
    }
}

contains(sql-drivers, db2) {
    HEADERS += drivers/db2/qsql_db2.h
    SOURCES += drivers/db2/qsql_db2.cpp
    
    unix:LIBS += -ldb2
    
    win32 {
        !win32-borland:LIBS += -ldb2cli
#        win32-borland:LIBS  += $(BCB)/lib/PSDK/db2cli.lib
    }
}

contains(sql-drivers, ibase) {
    HEADERS += drivers/ibase/qsql_ibase.h
    SOURCES += drivers/ibase/qsql_ibase.cpp
    
    unix:LIBS *= -lgds  
    
    win32 {
        !win32-borland:LIBS *= -lgds32_ms
        win32-borland:LIBS  += gds32.lib
    }
}

contains(sql-drivers, sqlite2) {
    HEADERS += drivers/sqlite2/qsql_sqlite2.h
    SOURCES += drivers/sqlite2/qsql_sqlite2.cpp
    !contains(LIBS, .*sqlite.*):LIBS *= -lsqlite
}

contains(sql-drivers, sqlite) {
    !system-sqlite:!contains( LIBS, .*sqlite3.* ) {
        CONFIG(release, debug|release):DEFINES *= NDEBUG
        DEFINES += SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_COMPLETE
        INCLUDEPATH +=  ../3rdparty/sqlite
        SOURCES +=      ../3rdparty/sqlite/sqlite3.c
    } else {
        LIBS *= $$QT_LFLAGS_SQLITE
        QMAKE_CXXFLAGS *= $$QT_CFLAGS_SQLITE
    }

    HEADERS +=      drivers/sqlite/qsql_sqlite.h
    SOURCES +=      drivers/sqlite/qsql_sqlite.cpp
}

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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