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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Driver sqlite [SOLVED]  (Прочитано 6654 раз)
nata267
Гость
« : Январь 18, 2011, 14:47 »

Не подскажете как можно собрать драйвер sqlite на основе библиотеки sqlite3.dll??
« Последнее редактирование: Январь 20, 2011, 15:38 от nata267 » Записан
Sahab
Гость
« Ответ #1 : Январь 18, 2011, 15:13 »

раскрыть мысль более широко можно?
Записан
nata267
Гость
« Ответ #2 : Январь 18, 2011, 15:35 »

вот проект плагина драйвера, который есть в папке
QTDIR\src\plugins\sqldrivers\sqlite
Код:
TARGET	 = qsqlite

HEADERS = ../../../sql/drivers/sqlite/qsql_sqlite.h
SOURCES = smain.cpp \
  ../../../sql/drivers/sqlite/qsql_sqlite.cpp

!system-sqlite:!contains( LIBS, .*sqlite.* ) {
    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
}

include(../qsqldriverbase.pri)

т.е. он собирается из исходника sqlite3.c, а мне нужно на основе либы sqlite3.dll,
так вот я пробовала закоментить строчку SOURCES += ../../../3rdparty/sqlite/sqlite3.c
и скомпилировать так

cd %QTDIR%\src\plugins\sqldrivers\sqlite
qmake "INCLUDEPATH+=../../../3rdparty/sqlite" "LIBS+=-L../../../3rdparty/sqlite -lsqlite3"
mingw32-make

в папке ../../../3rdparty/sqlite у меня есть sqlite3.dll, libsqlite3.a и заголовочные файлы sqlite3.h...

получается скомпилировать qsqlited4.dll, libqsqlited4.a,  кладу их в папку sqldrivers относительно екзэшника приложения, но при запуске пишет driver not loaded

sqlite3.dll кладу рядом с экзешником
« Последнее редактирование: Январь 18, 2011, 16:54 от nata267 » Записан
Paullo
Гость
« Ответ #3 : Январь 18, 2011, 20:41 »

Вообще то SQlite разрабатывалась как встроеная база данных и рассчитана на то чтобы её всегда вкомпиливали внутрь приложения.
За счёт этого - производительность и экономия ресурсов. Это так, на всякий случай.
Записан
DmP
Гость
« Ответ #4 : Январь 18, 2011, 22:50 »

вот проект плагина драйвера, который есть в папке
QTDIR\src\plugins\sqldrivers\sqlite
Код:
!system-sqlite:!contains( LIBS, .*sqlite.* ) {
...
т.е. он собирается из исходника sqlite3.c, а мне нужно на основе либы sqlite3.dll,
так вот я пробовала закоментить строчку SOURCES += ../../../3rdparty/sqlite/sqlite3.c
и скомпилировать так

cd %QTDIR%\src\plugins\sqldrivers\sqlite
qmake "INCLUDEPATH+=../../../3rdparty/sqlite" "LIBS+=-L../../../3rdparty/sqlite -lsqlite3"
mingw32-make

в папке ../../../3rdparty/sqlite у меня есть sqlite3.dll, libsqlite3.a и заголовочные файлы sqlite3.h...
Как и писал раннее, ни чего комментировать для сборки плагина не надо, достаточно указать опцию system-sqlite. Собственно, это и так видно в файле который приведен выше.

Цитировать
получается скомпилировать qsqlited4.dll, libqsqlited4.a,  кладу их в папку sqldrivers относительно екзэшника приложения, но при запуске пишет driver not loaded

sqlite3.dll кладу рядом с экзешником
Нужно проверить, собрана ли программа и плагин одним компилятором и с одинаковой целью (RELEASE/DEBUG). Если это не поможет, то с помощью Dependency Walker проверить зависимости библиотек sqlite и плагина.
Записан
nata267
Гость
« Ответ #5 : Январь 19, 2011, 09:23 »

Вообще то SQlite разрабатывалась как встроеная база данных и рассчитана на то чтобы её всегда вкомпиливали внутрь приложения.
За счёт этого - производительность и экономия ресурсов. Это так, на всякий случай.

эта встроенная база не поддерживает icu расширение, стала бы я столько мучиться если бы у меня не было с ней проблем
Записан
nata267
Гость
« Ответ #6 : Январь 19, 2011, 12:19 »

нашла вот что по ссылке http://doc.trolltech.com/4.1/sql-driver.html#qsqlite-for-sqlite-version-3-and-above

Цитировать
How to Build the Plugin

SQLite version 3 is included as a third-party library within Qt. It can be built by passing the following parameters to the configure script: -plugin-sql-sqlite (build as a plugin) or -qt-sql-sqlite (linked directly into the Qt library).

If you don't want to use the SQLite library included with Qt, you can build it manually (replace $SQLITE by the directory where SQLite resides):

        cd $QTDIR/src/plugins/sqldrivers/sqlite
        qmake -o Makefile "INCLUDEPATH+=$SQLITE/include" "LIBS+=-L$SQLITE/lib -lsqlite"
        make

On Windows:

        cd %QTDIR%\src\plugins\sqldrivers\sqlite
        qmake -o Makefile "INCLUDEPATH+=C:\SQLITE\INCLUDE" "LIBS+=C:\SQLITE\LIB\SQLITE3.LIB" mysql.pro
        nmake

как сделать из dll lib??
Записан
DmP
Гость
« Ответ #7 : Январь 19, 2011, 12:27 »

cd %QTDIR%\src\plugins\sqldrivers\sqlite
qmake "INCLUDEPATH+=../../../3rdparty/sqlite" "LIBS+=-L../../../3rdparty/sqlite -lsqlite3"
mingw32-make

в папке ../../../3rdparty/sqlite у меня есть sqlite3.dll, libsqlite3.a и заголовочные файлы sqlite3.h..
А так что уже не собирается?
Для мингвина должно быть *.a. Та инструкция для msvc.
Записан
DmP
Гость
« Ответ #8 : Январь 19, 2011, 12:33 »

На сколько я понимаю, расширение icu можно собрать сразу вместе sqlite. Если при сборке указать -DSQLITE_ENABLE_ICU. Файл icu.c уже включен в исходники sqlite-amalgamation.
Записан
nata267
Гость
« Ответ #9 : Январь 20, 2011, 15:35 »

На сколько я понимаю, расширение icu можно собрать сразу вместе sqlite. Если при сборке указать -DSQLITE_ENABLE_ICU. Файл icu.c уже включен в исходники sqlite-amalgamation.

спасибо, но вопрос решен другим способом http://www.prog.org.ru/topic_16418_0.html
« Последнее редактирование: Январь 20, 2011, 15:38 от nata267 » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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