Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] статическая сборка плагинов QT 
V
    Опции темы
ecspertiza
  Дата 12.11.2008, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



Собрать QT проект как оказалось несложно, сложно в него статически засунуть все плагины
кто знает как это можно организовать?
http://doc.trolltech.com/4.3/plugins-howto...#static-plugins
тролли вроде как ето описаль ток что то у мя невыходит.


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
ecspertiza
  Дата 13.11.2008, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



вообщем решение гдето нашел забыл правда где, вообщем пишу для тех кого интересует статическая сборка приложений.
1.Первым делом необходимо скачать и установить QT а так же компилятор (я использую MinGW).
2.Конфигурирование, для ентого необходимо:
в командной строке, перейти в папку  QT/версия прописать там
Код

  configure.exe - static -debug-and-release (остальные флаги)


у меня было так
Код

   configure.exe -static -debug-and-release -qt-sql-ibase -plugin-sql-ibase


после продолжительной конфигурации необходимо собрать QT,
переходим в папочку QT/версия/src далее make

если возникли ошибки то поправляем, 

после этого если собрать проект то QtCore.dll,QtGui.dll и т.д не понадобятся но если вы в своем приложении подключаете плагины то они работать не будут.

правим main.cpp чтоб он выглядел так 
Код

#include <QApplication>
#include <QtPlugin>

QT_BEGIN_NAMESPACE
Q_IMPORT_PLUGIN(имя плагина)
...
QT_END_NAMESPACE

int main(int argc, char * argv[])
{
  QApplication a(argc,argv)
  .......
  return a.exec()
}


теперь прога будет подключать плагины, но это ешё не всё необходимо ешё поправить файл проекта(*.pro)

Код

   QTPLUGIN += имя плагинов
   LIBS += имя либов плагинов


вот теперь сборка, линковка, и т.д. теперь плагины подключатся, и проект будет отлично работать на другом компеsmile

имена плагинов можно посмотреть тут =>> http://doc.trolltech.com/4.3/plugins-howto...#static-plugins


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
SABROG
Дата 13.11.2008, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Первое замечание. Ты говорил, что нашел способ сборки статических приложений без пересборки Qt. 
Цитата(ecspertiza @ 12.11.2008,  12:37)
я нащёл способ статической линковке  приложения для етого совсем необязятельно пересобирать QT но вот при сборке приложения ошибка:
Код

debug/main.o(.text$_ZN29StaticqsqlibasePluginInstanceC1Ev[StaticqsqlibasePluginInstance::StaticqsqlibasePluginInstance()]+0x9): In function `ZSt3minIjERKT_S2_S2_':
C:/Users/ecspertiza/workspace/Directory/../../../../Qt/4.4.3/include/QtGui/qwidget.h: undefined reference to `qt_plugin_instance_qsqlibase()'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\Directory.exe] Error 1
mingw32-make[1]: Leaving directory `C:/Users/ecspertiza/workspace/Directory'
mingw32-make: *** [debug] Error 2


В этом гайде ты все-таки его пересобираешь ;)

Второе замечание. О сборке статических плагинов написано в Assistante:

Цитата

Static Plugins 
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: 

Plugin name
Type
Description
qtaccessiblecompatwidgets
Accessibility
Accessibility for Qt 3 support widgets
qtaccessiblewidgets
Accessibility
Accessibility for Qt widgets
qdecorationdefault
Decorations (Qtopia)
Default style
qdecorationwindows
Decorations (Qtopia)
Windows style
qgif
Image formats
GIF
qjpeg
Image formats
JPEG
qmng
Image formats
MNG
qimsw_multi
Input methods (Qtopia)
Input Method Switcher
qwstslibmousehandler
Mouse drivers (Qtopia)
tslib mouse
qgfxtransformed
Graphic drivers (Qtopia)
Transformed screen
qgfxvnc
Graphic drivers (Qtopia)
VNC
qscreenvfb
Graphic drivers (Qtopia)
Virtual frame buffer
qsqldb2
SQL driver
IBM DB2
qsqlibase
SQL driver
Borland InterBase
qsqlite
SQL driver
SQLite version 3
qsqlite2
SQL driver
SQLite version 2
qsqlmysql
SQL driver
MySQL
qsqloci
SQL driver
Oracle (OCI)
qsqlodbc
SQL driver
Open Database Connectivity (ODBC)
qsqlpsql
SQL driver
PostgreSQL
qsqltds
SQL driver
Sybase Adaptive Server (TDS)
qcncodecs
Text codecs
Simplified Chinese (People's Republic of China)
qjpcodecs
Text codecs
Japanese
qkrcodecs
Text codecs
Korean
qtwcodecs
Text codecs
Traditional Chinese (Taiwan)

To link statically against those plugins, you need to use the Q_IMPORT_PLUGIN() macro in your application and you need to add the required plugins to your build using QTPLUGIN. For example, in your main.cpp: 
         #include <QApplication>
         #include <QtPlugin>

         Q_IMPORT_PLUGIN(qjpeg)
         Q_IMPORT_PLUGIN(qgif)
         Q_IMPORT_PLUGIN(qkrcodecs)

         int main(int argc, char *argv[])
         {
             QApplication app(argc, argv);
             ...
             return app.exec();
         } 
In the .pro file for your application, you need the following entry: 
         QTPLUGIN     += qjpeg \
                         qgif \
                         qkrcodecs 
It is also possible to create your own static plugins, by following these steps: 
Add CONFIG += static to your plugin's .pro file. 
Use the Q_IMPORT_PLUGIN() macro in your application. 
Link your application with your plugin library using LIBS in the .pro file. 



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
ecspertiza
Дата 14.11.2008, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



Да насчёт статической сборки приложений без пересборки QT я всётаки погоречился, осознаю вину готов стать в угол, а вот то что на писано в Assistant несовсем работает, необходимо добавить ешо
Код

QT_BEGIN_NAMESPACE
....
QT_END_NAMESPACE


и добавить либы. 


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
SABROG
Дата 14.11.2008, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Написано:

Цитата

Importing Static Plugins 
The Basic Tools plugin is built as a static plugin, to ensure that it is always available to the application. This requires using the Q_IMPORT_PLUGIN() macro somewhere in the application (in a .cpp file) and specifying the plugin in the .pro file. 
For Plug & Paint, we have chosen to put Q_IMPORT_PLUGIN() in main.cpp: 
 #include "mainwindow.h"
 #include <QtPlugin>
 #include <QApplication>

 QT_BEGIN_NAMESPACE
 Q_IMPORT_PLUGIN(pnp_basictools)
 QT_END_NAMESPACE

 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     MainWindow window;
     window.show();
     return app.exec();
 } 
The argument to Q_IMPORT_PLUGIN() is the plugin's name, as specified with Q_EXPORT_PLUGIN2() in the plugin. 
In the .pro file, we need to specify the static library. Here's the project file for building Plug & Paint: 
 HEADERS        = interfaces.h \
                  mainwindow.h \
                  paintarea.h \
                  plugindialog.h
 SOURCES        = main.cpp \
                  mainwindow.cpp \
                  paintarea.cpp \
                  plugindialog.cpp
 LIBS           = -L$${QT_BUILD_TREE}/examples/tools/plugandpaint/plugins -lpnp_basictools

 if(!debug_and_release|build_pass):CONFIG(debug, debug|release) {
    mac:LIBS = $$member(LIBS, 0) $$member(LIBS, 1)_debug
    win32:LIBS = $$member(LIBS, 0) $$member(LIBS, 1)d
 } 
The LIBS line variable specifies the library pnp_basictools located in the ../plugandpaintplugins/basictools directory. (Although the LIBS syntax has a distinct Unix flavor, qmake supports it on all platforms.) 
The CONFIG() code at the end is necessary for this example because the example is part of the Qt distribution and Qt can be configured to be built simultaneously in debug and in release modes. You don't need to for your own plugin applications. 



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
kefir01
Дата 15.8.2010, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: 1
Всего: 2



Друзья, а не подскажете почему после успешной сборки статической версии qt c ключами -qt-sql-ibase и -plugin-sql-ibase

Добавлением в .pro файл программы

Код

LIBS += c:/firebird/lib/fbclient_ms.lib
QTPLUGIN += qsqlibase


в mail.cpp

Код

#include <QtPlugin>
QT_BEGIN_NAMESPACE
Q_IMPORT_PLUGIN(qsqlibase)
QT_END_NAMESPACE


вместо сборки я получаю
Код

C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x1387): undefined reference to `isc_cancel_events@12'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x1447): undefined reference to `isc_detach_database@8'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x16c9): undefined reference to `isc_event_block'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x1a83): undefined reference to `isc_que_events@28'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x2c24): undefined reference to `isc_sqlcode@4'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x2c4e): undefined reference to `fb_interpret@12'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x2da3): undefined reference to `isc_start_transaction'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x2f01): undefined reference to `isc_start_transaction'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x391b): undefined reference to `isc_cancel_events@12'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x4260): undefined reference to `isc_attach_database@24'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x5180): undefined reference to `isc_rollback_transaction@8'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x52c8): undefined reference to `isc_commit_transaction@8'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x5437): undefined reference to `isc_event_counts@16'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x54bc): undefined reference to `isc_que_events@28'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x6550): undefined reference to `isc_dsql_sql_info@24'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x664b): undefined reference to `isc_vax_integer@8'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x665e): undefined reference to `isc_vax_integer@8'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x67a2): undefined reference to `isc_array_lookup_bounds@24'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x6ca3): undefined reference to `isc_array_put_slice@28'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x6ef5): undefined reference to `isc_create_blob2@28'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x6f82): undefined reference to `isc_put_segment@16'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x70c7): undefined reference to `isc_close_blob@8'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x71eb): undefined reference to `isc_dsql_sql_info@24'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x725a): undefined reference to `isc_vax_integer@8'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x726f): undefined reference to `isc_vax_integer@8'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x7684): undefined reference to `isc_array_lookup_bounds@24'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x77f2): undefined reference to `isc_array_get_slice@28'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x7baa): undefined reference to `isc_commit_transaction@8'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x7cf0): undefined reference to `isc_dsql_free_statement@12'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x7e1a): undefined reference to `isc_open_blob2@28'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x7fae): undefined reference to `isc_get_segment@20'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x8062): undefined reference to `isc_close_blob@8'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x8170): undefined reference to `isc_close_blob@8'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x81ed): undefined reference to `isc_dsql_fetch@16'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x8cf2): undefined reference to `isc_dsql_allocate_statement@12'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x8d9d): undefined reference to `isc_dsql_prepare@28'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x8df9): undefined reference to `isc_dsql_describe_bind@16'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x8e66): undefined reference to `isc_dsql_describe_bind@16'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x8ede): undefined reference to `isc_dsql_describe@16'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x925f): undefined reference to `isc_dsql_free_statement@12'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x92c5): undefined reference to `isc_dsql_execute@20'
C:/Qt/qt/plugins/sqldrivers/libqsqlibase.a(qsql_ibase.o):qsql_ibase.cpp:(.text+0x944b): undefined reference to `isc_dsql_execute2@24'
collect2: ld returned 1 exit status


Спасибо.
PM MAIL   Вверх
Modul
Дата 16.8.2010, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



Ошибочка в pro-файле.

Это мой примерчик:
Код

TEMPLATE = app
TARGET = 
DEPENDPATH += .
INCLUDEPATH += ../prom/matem


# Input
SOURCES += t.cpp
LIBS = -LC:/myprog/console/plugins -lmatem


см. внимательно -L, -l
--------------------
I'll be back !
PM MAIL   Вверх
kefir01
Дата 16.8.2010, 03:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: 1
Всего: 2



Спасибо... попробую...
PM MAIL   Вверх
AlexYanky
Дата 23.6.2013, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 23.6.2013

Репутация: нет
Всего: нет



Уважаемые профи Qt. Начал изучать эту прекрасную библиотеку, но возникли вопросы.
Во первых установил SDK и кроме того собрал ее в статике, что бы не тягать за собой постоянно нужные
dll-ки, в общем есть и нормальная и статическая сборка.
Дальше нужно работать с MySQL. Собрал нужные плагины. Для обычной сборки получил такие
dll библиотеки: qsqlmysql4.dll, qsqlmysql4.lib, qsqlmysqld4.dll, qsqlmysqld4.lib.
Для статической сборки получил только такие библиотеки: qsqlmysql.lib, qsqlmysql.prl, qsqlmysqld.lib, qsqlmysqld.prl.
Далее для проверки хотел собрать демо-проект который есть в SDK - это sqlbrowser.pro, хотел его собрать и в
статике и в динамике. Но...
Делал как тут советовали умные люди:
1. В про-файле добавил
QTPLUGIN += MySQL
LIBS +="F:/QtSDK/4.8.4vs2010_static/plugins/sqldrivers/qsqlmysql4".
2. В мэйн-файле добавил:
#include <QtPlugin>
QT_BEGIN_NAMESPACE
Q_IMPORT_PLUGIN(MySQL)
QT_END_NAMESPACE

Собираю в статике, и...
в результате выдает вот что:
:-1: ошибка: LNK1181: не удается открыть входной файл "F:/QtSDK/4.8.4vs2010_static/plugins/sqldrivers/qsqlmysql4.lib"

В динамике такая же ситуация...

Помогите пожалуйста, очень прошу. Уже просто устал делать разные опыты, уже сил нет. Что делаю не так??? 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1286 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.