c++ - VirtualBox Guest Additions 编译和 iso 打包

标签 c++ virtualbox kbuild

我正在根据官方 documentation 编译 VirtualBox Guest Additions| .分别构建 64 位和 32 位附加内容并尝试将其打包到 iso 镜像中。

目标系统是 Windows 7 x64。根据文档的所有软件要求,包括确切的版本。只应构建附加项(VBOX_ONLY_ADDITIONS := 1 在 LocalConfig.kmk 中)

32位编译不设置目标是正常的

call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /Release /x86 /win7
set BUILD_TARGET_ARCH=x86
set PATH=%PATH%;%~dp0kBuild\bin\win.x86
cscript configure.vbs --with-DDK=C:\WinDDK\7600.16385.1 --with-MinGW-w64=C:\mingw\mingw64 --with-MinGW32=C:\mingw\mingw32 --with-libSDL=C:\SDL\x86\SDL-1.2.15 --with-openssl=C:\OpenSSL\x32 --with-libcurl=C:\curl\x86 --with-Qt5=C:\Qt\5.6.3\x86\msvc2010 --with-python=C:/Python27
call env.bat
kmk

64位编译也没有设置目标

call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /Release /x64 /win7
set BUILD_TARGET_ARCH=amd64
set PATH=%PATH%;%~dp0kBuild\bin\win.amd64
cscript configure.vbs --with-DDK=C:\WinDDK\7600.16385.1 --with-MinGW-w64=C:\mingw\mingw64 --with-MinGW32=C:\mingw\mingw32 --with-libSDL=C:\SDL\x64\SDL-1.2.15 --with-openssl=C:\OpenSSL\x64 --with-openssl32=C:\OpenSSL\x32 --with-libcurl=C:\curl\x64 --with-libcurl32=C:\curl\x86 --with-Qt5=C:\Qt\5.6.3\x64\msvc2010 --with-python=C:/Python27
call env.bat
kmk

尝试构建 x86 添加项(根据 Makefile.kmk 中的注释,必须在 x64 之前构建)

kmk additions-build-win.x86

...并得到错误

kBuild: Creating C:/Users/atatat/Projects/virtualbox/VirtualBox-5.2.2/out/win.x86/release/bin/additions/VBoxWHQLFake.exe
C:/Users/atatat/AppData/Local/Temp/make3416-1.sh: 1: Syntax error: "(" unexpected
kmk.exe[1]: *** [C:/Users/atatat/Projects/virtualbox/VirtualBox-5.2.2/out/win.x86/release/bin/additions/VBoxWHQLFake.exe] Error 2 (0x2)
kmk.exe[1]: Leaving directory `C:/Users/atatat/Projects/virtualbox/VirtualBox-5.2.2'
kmk_time: 0m2.823600s - exit code: 2
kmk: *** [additions-build-win.x86] Error 2 (0x2)

尝试构建 x64 版本时出现同样的错误:kmk additions-build-win.amd64

我的本​​地配置.kmk

VBOX_WITH_HARDENING :=
VBOX_PATH_WIX := C:\wix
VBOX_GSOAP_INSTALLED := 1
VBOX_PATH_GSOAP := C:\gsoap\gsoap-2.8\gsoap
VBOX_WITH_COMBINED_PACKAGE := 1
VBOX_WITH_QT_PAYLOAD := 1
VBOX_WITH_QTGUI_V5 := 1
VBOX_SIGNING_MODE := release
VBOX_TSA_URL := http://timestamp.digicert.com
VBOX_TSA_SHA2_URL := http://timestamp.digicert.com
VBOX_TSA_URL_ARGS := /t "$(VBOX_TSA_URL)"
VBOX_TSA_SHA2_URL_ARGS := /tr "$(VBOX_TSA_SHA2_URL)" /td sha256
VBOX_PATH_SIGN_TOOLS := C:\Program Files (x86)\Windows Kits\8.1\bin\x64
VBOX_PATH_SELFSIGN := C:\WinDDK\7600.16385.1\bin\selfsign
VBOX_PATH_WISUMINFO := "C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\sysmgmt\msi\scripts\WiSumInf.vbs"
VBOX_PATH_WISUBSTG  := "C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\sysmgmt\msi\scripts\WiSubStg.vbs"
VBOX_WITH_DOCS := 1
VBOX_WITH_DOCS_CHM := 1
VBOX_WITH_DOCS_PACKING := 1
VBOX_HAVE_XMLLINT := C:\xmllint\bin\xmllint.exe
VBOX_PATH_DOCBOOK        := C:/DocBook/xsl/
VBOX_PATH_DOCBOOK_DTD    := C:/DocBook/xml/
VBOX_XML_CATALOG         := $(PATH_TARGET)/manual/catalog
VBOX_XML_CATALOG_DOCBOOK := $(PATH_TARGET)/manual/docbook
VBOX_PATH_HTML_HELP_WORKSHOP := "C:\Program Files (x86)\HTML Help Workshop"
VBOX_PDFLATEX := "C:\Program Files\MikTeX\texmfs\install\miktex\bin\pdflatex.exe"
VBOX_PDFLATEX_CMD := $(VBOX_PDFLATEX) -halt-on-error -interaction batchmode
TOOL_CURL_FETCH := C:\curl\x64\curl.exe
PATH_TOOL_NASM := "C:\Program Files\NASM"
VBOX_INSTALLER_LANGUAGES := en_US
VBOX_WITH_TESTCASES :=
VBOX_WITH_VALIDATIONKIT :=
VBOX_WITH_VBOX_IMG := 1
VBOX_BUILD_PUBLISHER := 
VBOX_WITH_R0_LOGGING := 1
VBOX_PATH_DIFX := C:\WinDDK\7600.16385.1\redist\DIFx\DIFxAPI\amd64
VBOX_PATH_NSIS := C:\Program Files (x86)\NSIS

最佳答案

我在日志中看到的唯一错误是:

 C:/Users/atatat/AppData/Local/Temp/make3416-1.sh: 1: Syntax error: "(" unexpected

您应该查看该脚本,看看它在哪里阻塞了。请注意,它是一个 Unix shell 脚本,因此它必须由可能与 MinGW 一起提供的 shell 解释。

最后一点,有一个 guide (俄语)关于如何在 Windows 上构建 Virtualbox 及其组件。我从未尝试遵循它,但我从中学到的是,从头开始构建 VirtualBox 并不是一件容易的事。看起来现在 Oracle 对它的支持不是很好。很可能是他们的构建指令或脚本中存在错误。

关于c++ - VirtualBox Guest Additions 编译和 iso 打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49964772/

相关文章:

c++ - 如何使用 write Cloud() OpenCV 函数构造给定 3D 点坐标的点云?

c++ - 从文件中读取整数并将它们存储在数组 C++ 中

dll - InnoScriptStudio2 加载 ISCmplr.dll 时出错

linux - 如何构建内核模块的单个源文件

linux - Kconfig 和 LKM

c++ - 在 C++ API 中将一个张量的一大块复制到另一个张量中

c++ - 依赖图的设计模式

virtualbox - 为什么 Vagrant 尝试通过 SSH 连接到 Windows guest ?

sql-server - 无法从 Virtualbox 连接到 SQL Server

linux - Makefile 变量替换显然没有完成,即使 := is used in declaration