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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: CMake и сборка plugin  (Прочитано 12647 раз)
кып
Гость
« : Март 03, 2010, 17:29 »

Всем категорический привет.

Может не в ту ветку, но так как я новичек в с++ вообще и в qt  в частности поэтому сюда.

Потихоньку изучаю qt и в частности добрался до написания плагинов к своему приложению.
Изучил примеры из Макса Шлее (про plugandpaintplugins то же знаю, но для начала что попроще), все замечательно получается, в т.ч. и собственные плагины.

И вот здесь же прочитал про CMake. Решил попробовать, вроде все работает, пока не попробовал собрать плагин и приложение работающее с ним.
Смысл такой, что все собирается без ошибок, но не работает. И размер исполняемого файла и библиотеки сильно отличается от таковых собранных с помощью qmake.

Прилагаю исходники из Макса Шлее со своими CMakeLists.txt (лежат в директориях build, как заставить cmake складывать результат в другое место пока не разобрался, так что из каталога сборки приходится копировать результат в корень ручками).

Помогите с этим разобраться.

qt 4.6.2
ось: windows xp pro
компилятор: MinGW

P.S. Все что нашел на эту тему в сети перепробовал, ничего не помогает Грустный
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Март 03, 2010, 17:52 »

Вот подправил.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Rcus
Гость
« Ответ #2 : Март 03, 2010, 17:53 »

А как именно не работает? У меня все нормально собралось и заработало после копирования по образу .pro DESTDIR
Разница в размере файлов объясняется разными флагами компилятора: например в режиме RelWithDebInfo CMake по-умолчанию использует оптимизацию -O2, но не определяет -DQT_NO_DEBUG, в режиме Release используется -O3, что порой увеличивает размер получаемого файла.
Записан
кып
Гость
« Ответ #3 : Март 03, 2010, 18:22 »

Вот подправил.

А у меня все равно не работает  :-(

Какие у вас версии qt, cmake, и mingw?

Записан
кып
Гость
« Ответ #4 : Март 03, 2010, 18:25 »

А как именно не работает?

Не работает в смысле плагин не подгружается, не добавляются в меню его функции.

А размер у меня сильно отличается, раза в два.
Записан
BRE
Гость
« Ответ #5 : Март 03, 2010, 18:26 »

У QPluginLoader есть метод: QString QPluginLoader::errorString () const
Что он пишет?

P.S. У меня, кстати, тоже все работает.  Строит глазки
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Март 03, 2010, 18:26 »

Как ты компилишь? Нужно в каталоге с первым CMakeLists создать каталог (пусть будет build), зайти в него, сделать cmake && make, когда все скомпилится, исполняемый файл окажется в каталоге build/bin, а плугин build/bin/plugins. Что именно не получается?
Косяк в винде, добавь в первый цмэйк SET (CMAKE_BUILD_TYPE Release). Тоже когда-то с этим намучался.
« Последнее редактирование: Март 03, 2010, 18:41 от Пантер » Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
кып
Гость
« Ответ #7 : Март 03, 2010, 18:38 »

Как ты компилишь? Нужно в каталоге с первым CMakeLists создать каталог (пусть будет build), зайти в него, сделать cmake && make, когда все скомпилится, исполняемый файл окажется в каталоге build/bin, а плугин build/bin/plugins. Что именно не получается?
Косяк винды, добавь в первый цмэйк SET (CMAKE_BUILD_TYPE Release)

Компилится то все как раз нормально. Работает потом неправильно.
Записан
кып
Гость
« Ответ #8 : Март 03, 2010, 18:39 »

У QPluginLoader есть метод: QString QPluginLoader::errorString () const
Что он пишет?

P.S. У меня, кстати, тоже все работает.  Строит глазки

Сейчас попробую.
Записан
кып
Гость
« Ответ #9 : Март 03, 2010, 18:52 »

QPluginLoader::errorString ()  возвращает Unknown error

Компилю так: cmake -G "MinGW Makefiles" CMakeLists.txt

У кого работает скажите версии qt, cmake, mingw. может тут что не так.



Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #10 : Март 03, 2010, 18:57 »

mkdir build && cd build && cmake -G "MinGW Makefiles" .. && make
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
BRE
Гость
« Ответ #11 : Март 03, 2010, 19:10 »

QPluginLoader::errorString ()  возвращает Unknown error
Сделай так:
Код
C++ (Qt)
QPluginLoader loader(...);
if( !loader.load() )
{
qDebug() << loader.errorString();
}
 

У кого работает скажите версии qt, cmake, mingw. может тут что не так.
[...]$ qmake-qt4 -v
QMake version 2.01a
Using Qt version 4.6.2 in /usr/lib64

[...]$ cmake --version
cmake version 2.6-patch 4

[...]$ gcc -v
Используются внутренние спецификации.
Целевая архитектура: x86_64-redhat-linux
Параметры конфигурации: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i586 --build=x86_64-redhat-linux
Модель многопоточности: posix
gcc версия 4.4.1 20090725 (Red Hat 4.4.1-2) (GCC)
Записан
кып
Гость
« Ответ #12 : Март 03, 2010, 19:11 »

mkdir build && cd build && cmake -G "MinGW Makefiles" .. && make

Что-то либо я Вас не понимаю, либо Вы меня.

Если я сделаю так, то cmake меня обругает за отсутствие файла.
Если я сразу в каталоге с первым CMakeLists.txt сделаю cmake && make, то
все собирается.
Создается папка bin c myapplication.exe, в ней папка plugins c libmyplugin.dll и libmyplugin.dll.a
Т.е. собирается все что должно, но работать оно не хочет.

Я по совету BRE вывел текст ошибки, получил - "Unknown error"
Записан
BRE
Гость
« Ответ #13 : Март 03, 2010, 19:17 »

Я по совету BRE вывел текст ошибки, получил - "Unknown error"
Эта ошибка присваивается по умолчанию. Ты ее проверяешь еще до того, как пытаешься загрузить плагин. Попробуй сделать как я предложил чуть выше.
Записан
кып
Гость
« Ответ #14 : Март 03, 2010, 19:18 »

Сделай так:
Код
C++ (Qt)
QPluginLoader loader(...);
if( !loader.load() )
{
qDebug() << loader.errorString();
}
 

"The plugin 'D:/.../chapter43/PlugIn/bin/plugins/libmyplugin.dll' uses incompatible Qt library.
(Cannot mix debug and release libraries.)"

Хотя я CMakeLists.txt указано SET (CMAKE_BUILD_TYPE Release)

P.S. У меня винда, в linux раньше выходных проверить не получится.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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