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.
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)