Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.58.137.218] |
|
Сообщ.
#1
,
|
|
|
Сунулся я искать, как мне реализовать межпроцессное взаимодействие и наткнулся на такую интересную штуку, как QtDBus. В документации к Qt указано, что QtDBus предназначена только для ОС unix, а под Windows работать не будет (и где, спрашивается, обещанная кросплатформенность?) Порылся в интернете, нашел несколько сайтов, где умельцы, все-таки оседлали dbus и рекомендуют к использованию. Например, пожалуй, самый распространенный:
https://sites.google.com/site/dimchansky/dbus или http://www.lothlorien.com/kf6gpe/?p=141 Однако, порывшись в статьях, с досадой бы вынужден констатировать, что они успели порядком устареть. Поэтому, опираясь на статьи, все пришлось делать самостоятельно. После 2-х дней мозгового и гугл штурма, мои старания таки увенчались успехом. Посему, хочу поделиться поэтапной инстукцией, как собрать QtDBus в домашних условиях Прошу прощения сразу, если какие-то пункты окажутся излишни, а какие-то я, возможно, пропустил. Уверен, что можно сделать иначе, более складно и красиво. Так что, сильно не бейте Итак. Сборка QDBus под Windows Сборка DBUS 1. Скачиваем и устанавливаем QtSDK .Оттуда нам нужен MinGW и QTCreator. 2. Прописываем путь до MinGW в переменной окружении path 3. Скачиваем и устанавливаем CMake (http://www.cmake.org/cmake/resources/software.html) 4. Скачиваем и устанавливаем libexpat 5. Скачиваем библиотеку dbus (http://cgit.freedesktop.org/dbus/dbus/snap.../dbus-1.4.0.zip). Распаковываем в корень, например c:\dbus-1.4.0. 6. Редактируем dbus-1.4.0\cmake\CMakeLists.txt, вставляем в самое начало: set(LIBEXPAT_LIBRARIES "C:/Program Files/win32libs/lib/libexpat.lib") set(LIBEXPAT_INCLUDE_DIR "C:/Program Files/win32libs/include") set(LIBEXPAT_FOUND ON) после строки project(dbus) 7. Создаем директорию, куда будет производиться сборка, например c:\dbus 8. Находим в исходниках файл dbus-arch-deps.h.in – убераем из имени файла «.in», комментируем все строки, кроме определения типов dbus_int32_t и dbus_uint32_t и заменяем тиипы на стандартные, чтобы получилось следующее: typedef int dbus_int32_t; typedef unsigned int dbus_uint32_t; typedef short dbus_int16_t; typedef unsigned short dbus_uint16_t; 9. Заходим в нее и выполняем команду cmake -G "MinGW Makefiles" ..\dbus-1.4.0\cmake -DDBUS_USE_EXPAT=on. Если MinGW настроен правильно, то должна начаться сборка. Внимание! Появляются ошибки! Например, у меня в файле dbus-file-win.c компилятор совершенно оправдано ругался, что в функции _dbus_make_file_world_readable не достаточное количество параметров, просто добавляем «,&error». 10. Линкуем. mingw32-make. Проверяем папку bin. Должны появиться libdbus-1.dll и libdbus-1.dll.a Сборка QDBUS 11. Скачиваем source QT (http://qt-project.org/downloads), устанавливаем. 12. В установленном каталоге ищем src/ dbus/ dbus.pro. Жмем. Должен запуститься QtCreator (если не запустился, просто ассоциируйте приложение с расширением «*.pro»). 13. Теперь нужно поменять инструмент. Дело в том, что по умолчанию QtCreator использует инструмент из установленного SDK, в котором, в чем собственнолично вы сами можете убедиться, отсутствуют больше половины необходимых для компиляции QDBus файлов. Заходим в меню Инструмент/Параметры. На вкладке Qt4 добаляем новый профиль. В появившемся окне ищем qmake.exe из ранее установленного каталога исходников. Жмем OK, после чего во вкладке Проекты выбираем созданный профиль. Теперь при сборке компилятор будет использовать файлы исходников, а не SDK. 14. В QtCreator’е открываем файл dbus.pro, добавляем строки INCLUDEPATH += с:/dbus-1.4.0 INCLUDEPATH += ../../include/QtCore INCLUDEPATH += с:/dbus win32 { wince*:LIBS_PRIVATE += -lws2 else:LIBS_PRIVATE += -lws2_32 \ -ladvapi32 \ -lnetapi32 \ -luser32 CONFIG(debug , debug|release):LIBS_PRIVATE += -ldbus-1 -Lс:/dbus/bin CONFIG(release, debug|release):LIBS_PRIVATE += -ldbus-1 -Lс:/dbus/bin else:LIBS_PRIVATE += -ldbus-1 } 15. Открываем файл qdbusmacros.h, добавляем определения строки: #undef QT_NO_DBUS #define QT_LINKED_LIBDBUS 16. Запускаем сборку. Если появилась ошибка на отстутствие типа dbus_uint64_t (я такой не нашел), просто переопределите его там же, в qdbusmacros.h: typedef quint64 dbus_uint64_t; 17. Идем в папку lib, любуемся собранными libQtDBus4.a, libQtDBusd4.a, QtDBus4.dll и QtDBusd4.dll. 18. Теперь, подключаем файлы к проекту, в котором хотим использовать возможности QDBus. Для этого в проекте *.pro указываем, что сборка будет производиться с библиотекой dbus и добавляем строки: QT += dbus INCLUDEPATH+= с:/Qt_4_8_3/lib windows { CONFIG(debug,debug|release): LIBS+=-lQtDBusd4 -Lс:/Qt_4_8_3/lib CONFIG(release,debug|release): LIBS+=-lQtDBus4 -Lс:/Qt_4_8_3/lib } Собираем! Усё |
Сообщ.
#2
,
|
|
|
Молоток! Я как раз искал. Дома буду - попробую! Так держать
|