Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: кып от Март 03, 2010, 17:29



Название: CMake и сборка plugin
Отправлено: кып от Март 03, 2010, 17:29
Всем категорический привет.

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

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

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

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

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

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

P.S. Все что нашел на эту тему в сети перепробовал, ничего не помогает :(


Название: Re: CMake и сборка plugin
Отправлено: Пантер от Март 03, 2010, 17:52
Вот подправил.


Название: Re: CMake и сборка plugin
Отправлено: Rcus от Март 03, 2010, 17:53
А как именно не работает? У меня все нормально собралось и заработало после копирования по образу .pro DESTDIR
Разница в размере файлов объясняется разными флагами компилятора: например в режиме RelWithDebInfo CMake по-умолчанию использует оптимизацию -O2, но не определяет -DQT_NO_DEBUG, в режиме Release используется -O3, что порой увеличивает размер получаемого файла.


Название: Re: CMake и сборка plugin
Отправлено: кып от Март 03, 2010, 18:22
Вот подправил.

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

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



Название: Re: CMake и сборка plugin
Отправлено: кып от Март 03, 2010, 18:25
А как именно не работает?

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

А размер у меня сильно отличается, раза в два.


Название: Re: CMake и сборка plugin
Отправлено: BRE от Март 03, 2010, 18:26
У QPluginLoader есть метод: QString QPluginLoader::errorString () const
Что он пишет?

P.S. У меня, кстати, тоже все работает.  ::)


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


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

Компилится то все как раз нормально. Работает потом неправильно.


Название: Re: CMake и сборка plugin
Отправлено: кып от Март 03, 2010, 18:39
У QPluginLoader есть метод: QString QPluginLoader::errorString () const
Что он пишет?

P.S. У меня, кстати, тоже все работает.  ::)

Сейчас попробую.


Название: Re: CMake и сборка plugin
Отправлено: кып от Март 03, 2010, 18:52
QPluginLoader::errorString ()  возвращает Unknown error

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

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





Название: Re: CMake и сборка plugin
Отправлено: Пантер от Март 03, 2010, 18:57
mkdir build && cd build && cmake -G "MinGW Makefiles" .. && make


Название: Re: CMake и сборка plugin
Отправлено: BRE от Март 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)


Название: Re: CMake и сборка plugin
Отправлено: кып от Март 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"


Название: Re: CMake и сборка plugin
Отправлено: BRE от Март 03, 2010, 19:17
Я по совету BRE вывел текст ошибки, получил - "Unknown error"
Эта ошибка присваивается по умолчанию. Ты ее проверяешь еще до того, как пытаешься загрузить плагин. Попробуй сделать как я предложил чуть выше.


Название: Re: CMake и сборка plugin
Отправлено: кып от Март 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 раньше выходных проверить не получится.


Название: Re: CMake и сборка plugin
Отправлено: Пантер от Март 03, 2010, 19:20
Попробуй пересобрать. SET (CMAKE_BUILD_TYPE Release)  написал в первом цмэйке? Запости сюда его.


Название: Re: CMake и сборка plugin
Отправлено: кып от Март 03, 2010, 19:31
Попробуй пересобрать. SET (CMAKE_BUILD_TYPE Release)  написал в первом цмэйке? Запости сюда его.

Так тоже не получается.

Получилось путем добавления в первом цмэйке
Код:
ADD_DEFINITIONS(${QT_DEFINITIONS})
ADD_DEFINITIONS(-DQT_NO_DEBUG)

Только это что, выходит дебаг версию плагинов под виндой собрать не получится?




Название: Re: CMake и сборка plugin
Отправлено: BRE от Март 03, 2010, 19:34
Только это что, выходит дебаг версию плагинов под виндой собрать не получится?
Попробуй собрать Qt и в дебаг версии...  ::)


Название: Re: CMake и сборка plugin
Отправлено: кып от Март 03, 2010, 19:36
Попробуй собрать Qt и в дебаг версии...  ::)

Так под виндой она и так в обоих (debug release) версиях.


Название: Re: CMake и сборка plugin
Отправлено: кып от Март 03, 2010, 19:39
Ладно, вопрос в каком то виде решен.
ОГРОМНОЕ СПАСИБО за помощь, а то я третий день маюсь, а основную работу то же работать надо  :D