Bug 31178 - Отсутствует поддержка COM/XPCOM интерфейса для С++ кода
Summary: Отсутствует поддержка COM/XPCOM интерфейса для С++ кода
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: virtualbox-sdk (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Evgeny Sinelnikov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-07-30 17:50 MSK by solo
Modified: 2015-09-01 18:33 MSK (History)
4 users (show)

See Also:


Attachments
Правленный /usr/lib64/virtualbox/sdk/bindings/xpcom/samples/Makefile (1.51 KB, text/plain)
2015-07-30 17:50 MSK, solo
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description solo 2015-07-30 17:50:08 MSK
Created attachment 6326 [details]
Правленный /usr/lib64/virtualbox/sdk/bindings/xpcom/samples/Makefile

В пакете virtualbox-sdk отсутствует поддержка COM/XPCOM интерфейса для С++ кода. По факту, это бага апстрима сильно мешающий разработке на С++ (по словам коллег апстрим о нём знает, но исправлять в ближайшее время не планирует).

  Подробности:

1. Пример для С++, присутсвующий в virtualbox-sdk, не собирается:

$ cd /usr/lib64/virtualbox/sdk/bindings/xpcom/samples

$ make DEFS_XPCOM=RT_OS_LINUX
g++ -c -g -fshort-wchar -I../include -I../include/nsprpub -I../include/string -I../include/xpcom -I../include/ipcd -DRT_OS_LINUX -o tstVBoxAPIXPCOM.o tstVBoxAPIXPCOM.cpp
tstVBoxAPIXPCOM.cpp:76:26: fatal error: VBox/com/com.h: Нет такого файла или каталога
compilation terminated.
make: *** [tstVBoxAPIXPCOM.o] Ошибка 1

  Причина -- в коде примера присутствуют инклюды файлов, не попадающих в официальный SDC VirtualBox`а (цитирую tstVBoxAPIXPCOM.cpp):

#include <VBox/com/com.h>
#include <VBox/com/string.h>
#include <VBox/com/array.h>
#include <VBox/com/Guid.h>
#include <VBox/com/ErrorInfo.h>
#include <VBox/com/errorprint.h>

#include <VBox/com/VirtualBox.h>

#include <iprt/stream.h>

2. В самом файле примера, /usr/lib64/virtualbox/sdk/bindings/xpcom/samples/tstVBoxAPIXPCOM.cpp, присутствует указание -- использовать код компонентов самого VirtualBox`а в качестве примеров C++ приложений взаимодействующих с VirtualBox`ом по COM/XPCOM:

 * This sample program is intended to demonstrate the minimal code necessary
 * to use VirtualBox XPCOM API for learning puroses only. The program uses
 * pure XPCOM and doesn't have any extra dependencies to let you better
 * understand what is going on when a client talks to the VirtualBox core
 * using the XPCOM framework.
 *
 * However, if you want to write a real application, it is highly recommended
 * to use our MS COM XPCOM Glue library and helper C++ classes. This way, you
 * will get at least the following benefits:
 *
 * a) better portability: both the MS COM (used on Windows) and XPCOM (used
 *    everywhere else) VirtualBox client application from the same source code
 *    (including common smart C++ templates for automatic interface pointer
 *    reference counter and string data management);
 * b) simpler XPCOM initialization and shutdown (only a single method call
 *    that does everything right).
 *
 * Currently, there is no separate sample program that uses the VirtualBox MS
 * COM XPCOM Glue library. Please refer to the sources of stock VirtualBox
 * applications such as the VirtualBox GUI frontend or the VBoxManage command
 * line frontend.

  Если указанной рекомендации последовать, то оказывается что для сборки такого рода приложений нужны хидеры, расположенные в каталогах:

а) VirtualBox/include/VBox/com/ (см. http://git.altlinux.org/gears/v/virtualbox.git?p=virtualbox.git;a=tree;f=VirtualBox/include/VBox/com;hb=63c8b1bd1adfb50cb24d7e9a917fe2260157ec8e)

б)  VirtualBox/include/iprt/ (см. http://git.altlinux.org/gears/v/virtualbox.git?p=virtualbox.git;a=tree;f=VirtualBox/include/iprt;h=d028814f1e5230735a3f996c83fa60244440c28f;hb=63c8b1bd1adfb50cb24d7e9a917fe2260157ec8e)

  Если указанные каталоги поместить в /usr/lib64/virtualbox/sdk/bindings/xpcom/include/ (как /usr/lib64/virtualbox/sdk/bindings/xpcom/include/VBox/com/ и /usr/lib64/virtualbox/sdk/bindings/xpcom/include/iprt/) и использовать правленный /usr/lib64/virtualbox/sdk/bindings/xpcom/samples/Makefile (в оригинальном tstVBoxAPIXPCOM не линкуется с VBoxRT.so, что приводит к ошибке), пример начинает собираться (пользователь должен иметь право записи в /usr/lib64/virtualbox/sdk/bindings/xpcom/samples):

$ cd /usr/lib64/virtualbox/sdk/bindings/xpcom/samples

$ make DEFS_XPCOM="RT_OS_LINUX IN_RING3 VBOX_WITH_XPCOM VBOX_WITH_XPCOM_NAMESPACE_CLEANUP"
g++ -c -g -fshort-wchar -I../include -I../include/nsprpub -I../include/string -I../include/xpcom -I../include/ipcd -DRT_OS_LINUX -DIN_RING3 -DVBOX_WITH_XPCOM -DVBOX_WITH_XPCOM_NAMESPACE_CLEANUP -o tstVBoxAPIXPCOM.o tstVBoxAPIXPCOM.cpp
g++ -g -o tstVBoxAPIXPCOM tstVBoxAPIXPCOM.o \
        ../../../..//VBoxXPCOM.so \
        ../../../..//VBoxRT.so \
        -Wl,-rpath ../../../..// \
        -ldl -lpthread

$ ls tstVBoxAPIXPCOM
tstVBoxAPIXPCOM

  Предлагаю помимо virtualbox-sdk собирать и virtualbox-sdk-xpcom, содержащий недостающие хидеры (<sdk>/bindings/xpcom/include/VBox/com/ и <sdk>/bindings/xpcom/include/iprt/). Готов подготовить соответствующее NMU.
Comment 1 Repository Robot 2015-09-01 18:33:18 MSK
virtualbox-4.3.30-alt2 -> sisyphus:

* Tue Sep 01 2015 Aleksey Avdeev <solo@altlinux> 4.3.30-alt2
- Add subpackage virtualbox-sdk-xpcom (Closes: 31178)
- Add synonyms lowercase (Closes: 31245)