Вообщем, мне интересно, какие есть варианты 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
Ни то, ни другое, ни третье не помогло(
Подскажите, пожалуйста, что я не так делал