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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Стат. линковка приожения где юзается плагин... или альт. вариант деплоймента  (Прочитано 6111 раз)
Deaf_Dumb_Blind
Гость
« : Октябрь 31, 2008, 20:08 »

    Вообщем, мне интересно, какие есть варианты deployment'а приложения где используется плагин для sql.

    Есть 2 варианта, как вообще деплоить Qt приложение - статически слинковать и запаковать в инсталлер, либо слинковать динамически и в инсталлер запаковать так же все необходимые дллки. Но у меня, к сожалению, ничего не выходит ни тем, ни другим способом.

1) Про статическую линковку я нашел вот что:
Цитировать
Ensure that you are using a shared Qt library; you cannot use the plugins with a static build.
Но, с другой стороны, в ассистанте, я нашел совершенно другую инфу:
Цитировать
Plugins can be linked statically against your application. If you build the static version of Qt, this is the only option for including Qt's predefined plugins.

When compiled as a static library, Qt provides the following static plugins:
далее идет список плагинов, среди которого есть qsqlite и инструкция как их подключать:
вот ссылка: http://doc.trolltech.com/4.3/plugins-howto.html#static-plugins

Я делаю, все как тут написано: собираю Qt статически: "configure.exe -static", использую макрос Q_IMPORT_PLUGIN(qsqlite), в .pro файл добавляю строчку:
QTPLUGIN += qsqlite

Но при сборке, компилятро выдает ошибку "undefined reference to qt_plugin_instance_qsqlite"

Не могли бы вы подсказать, что я делаю неверно?

2) При динамической линковке возникают другие проблемы.
Плагин грузится из кутешной директории... А мне надо чтобы он загрузился, скажем, из <app dir>/plugins.
Тролтеховцы предлагают 3 способа решения проблемы:
[list=1]
  • юзать стороний инсталлер, который изменит пути прописанные внутри либы
  • юзать QApplication::addLibraryPath() \ QApplication::setLibraryPaths()
  • юзать qt.conf
первый вариант мне совсем не нравится.
Пробовал заюзать второй вариант, писал в приложении:
Код
C++ (Qt)
QString path = QCoreApplication::applicationDirPath();
QApplication::addLibraryPath( path );
Это мне не помогло, при коннекте в базе QDatabase возвращал ошибку "cannot load driver"
Как использовать qt.conf я совсем не понял... Я пытался в одной папке с .exe создать файл qt.conf следущего содержания:

Код
[Paths]
Plugins = \plugins
или такого:
Код
[Paths]
Plugins = /plugins
и такого
Код
[Paths]
Plugins = ..\plugins
Ни то, ни другое, ни третье не помогло(

Подскажите, пожалуйста, что я не так делал Обеспокоенный
Записан
Rcus
Гость
« Ответ #1 : Октябрь 31, 2008, 20:24 »

configure --help
Цитировать
                         turned on.
    -qt-sql-<driver> ... Enable a SQL <driver> in the Qt Library.
    -plugin-sql-<driver> Enable SQL <driver> as a plugin to be linked to at run
                         time.
                         Available values for <driver>:
                           mysql
                           psql
                           oci
                           odbc
                           tds
                           db2
 +                         sqlite
                           sqlite2
                           ibase
попробуйте при конфигурировании добавить к ключу -static еще -qt-sql-sqlite
Записан
Detonator
Гость
« Ответ #2 : Октябрь 31, 2008, 21:22 »

Цитировать
Ensure that you are using a shared Qt library; you cannot use the plugins with a static build.
Но, с другой стороны, в ассистанте, я нашел совершенно другую инфу:

Я так понял что потом новые плугины ты не сможешь подключать динамически, а все необходимые плугины ты должен сразу линковать статически. Хотя я статическую линковку сам пока не осилил, каких-то функций при линковке все равно не хватает
Записан
Deaf_Dumb_Blind
Гость
« Ответ #3 : Октябрь 31, 2008, 22:56 »

Цитировать
Ensure that you are using a shared Qt library; you cannot use the plugins with a static build.
Но, с другой стороны, в ассистанте, я нашел совершенно другую инфу:

Я так понял что потом новые плугины ты не сможешь подключать динамически, а все необходимые плугины ты должен сразу линковать статически. Хотя я статическую линковку сам пока не осилил, каких-то функций при линковке все равно не хватает

Это понятно, что при статической линковке потом будет невозможно подключать новые дллки. В этом то и весь смысл что все библиотеки собираются в 1 .exe файл.
вот из моей первой ссылочки цитата:
Цитировать
Plugins can be linked statically against your application. If you build the static version of Qt, this is the only option for including Qt's predefined plugins.

з.ы сейчас попробую собрать либу с ключем -qt-sql-sqlite
Записан
DarkPhoenix
Гость
« Ответ #4 : Ноябрь 01, 2008, 10:09 »

под виндой делаю так:
компилю проект, в каталог с exe кладу все необходимые dll, если проект с SQLite в каталоге с ехе создаю папку sqldrivers, туда кладу qsqlite4
и все работает.
линковка динамическая.
Записан
Deaf_Dumb_Blind
Гость
« Ответ #5 : Ноябрь 01, 2008, 10:29 »

попробуйте при конфигурировании добавить к ключу -static еще -qt-sql-sqlite
Спасибо, заработало )))

под виндой делаю так:
компилю проект, в каталог с exe кладу все необходимые dll, если проект с SQLite в каталоге с ехе создаю папку sqldrivers, туда кладу qsqlite4
и все работает.
линковка динамическая.
я пробовал так сделать, но у меня не получилось че-то... QSqlDatabase выдавал такой lastError() "driver not loaded".

аааааааа.. я кажись создавал такие папки ..\plugins\sqldrivers
попробую вечером без plugins
« Последнее редактирование: Ноябрь 01, 2008, 10:39 от Deaf_Dumb_Blind » Записан
DarkPhoenix
Гость
« Ответ #6 : Ноябрь 01, 2008, 10:31 »

у меня тоже выдавало такую ошибку, пока не сделал как описал выше.
пример содержимого каталога:
file - mingwm10.dll
file - QtCore4.dll
file - QtGui4.dll
file - QtSql4.dll
file - qtWiki.exe
fldr - sqldrivers
  file - qsqlite4.dll
« Последнее редактирование: Ноябрь 01, 2008, 10:35 от BW » Записан
Deaf_Dumb_Blind
Гость
« Ответ #7 : Ноябрь 01, 2008, 20:39 »

BW, попробовал положить папку sqlplugins прямиков в папку с myApp.exe - все заработало!

Всем огромное спасибо за помощь!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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