window下编译virtualbox源码 4.3.34

来源:互联网 发布:mac for word审阅 编辑:程序博客网 时间:2024/06/06 02:07

环境说明 
编译主机系统:windows 7 64位操作系统,Service Pack 1 
virtualbox源码版本: 4.3.34

编译过程 
virtualbox作为开源x86指令架构虚拟机,有着和vmware一样的企业级别应用和性能,所以使用者众多,官方发布的各个版本的镜像和源码,如果官方镜像不符合我们的需求,按我们就需要根据源码来编译出自己的镜像。当然这么牛逼的复杂的编译过程,官方是有编译说明的,具体链接如下:https://www.virtualbox.org/wiki/Windows%20build%20instructions 既然有官方链接,为啥我还需要脱裤子放屁–多此一举的在这里写这篇文章呢,当然肯定是在编译过程中碰到了很多坑爹的问题,需要记录下,而是给各位看官做下参考。

需要的工具:如下所有工具下载链接请查看如上说的virtualbox的官方编译文档 
1. Visual Studio 2010 with service pack 1. 
2. Windows Platform SDK v7.1 
3. Windows Driver Development Kit (WDK) v7.1. 
4. MingW (32-bit Windows only): 
5. MingW (64-bit Windows only). 
6. Qt v4.7.x or later 
7. SDL v1.2.7 or later development package (VC6): 
8. libxml2 and libxslt1 libraries. 
9. the zlib library. 
10. the cURL library. 
11. OpenSSL 1.0.1. 
12. 签名工具(64-bit Windows only). WDK中自带: certmgr.exe, makecert.exe, signtool.exe and so on. 
13. gSOAP 2.7.12, 【可选】编译webservice API server才需要 
14. Python 2.x, 【可选】编译webservice and COM才需要 
15. Java SE 6 JDK,【可选】编译webservice and COM才需要

这里写图片描述

在windows 7 64位编译virtualbox,需要使用vs2010的x64 cmd来执行,如下图: 
这里写图片描述 
打开此工具后,命令行进入virtualbox 3.4.34的源码目录,事先在源码目录编写一个bat编译脚本,此处命名为make.bat,此脚本具体配置如下:

echo win64下请用“Visual Studio x64 Win64 命令提示(2010) ”运行此脚本set PATH=%PATH%;C:\VboxBuildTools\VBoxBuild\mingw64\bin;set PATH=%PATH%;C:\Virtualbox_4.3.34\tools\win.amd64\binset PATH=%PATH%;C:\VboxBuildTools\VBoxBuild\mingw64\bin;set PATH=%PATH%;C:\Virtualbox_4.3.34\tools\darwin.amd64\bin;set PATH=%PATH%;D:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE;set PATH=%PATH%;D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN;set PATH=%PATH%;D:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools;set PATH=%PATH%;C:\Windows\Microsoft.NET\Framework\v4.0.30319;set PATH=%PATH%;C:\Windows\Microsoft.NET\Framework\v3.5;set PATH=%PATH%;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;set PATH=%PATH%;D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcpackages;set PATH=%PATH%;D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64;set PATH=%PATH%;C:\VboxBuildTools\(Windows Driver Development Kit)GRMWDK_EN_7600_1\WDK;set PATH=%PATH%;C:\VboxBuildTools\(Windows Driver Development Kit)GRMWDK_EN_7600_1;echo 运行configure.vbscscript configure.vbs --with-MinGW-w64=C:\VboxBuildTools\VBoxBuild\mingw64 --with-libSDL=C:\VboxBuildTools\VBoxBuild\x64\libsdl --with-openssl=C:\VboxBuildTools\VBoxBuild\x64\libopenssl --with-libcurl=C:\VboxBuildTools\VBoxBuild\x64\libcurl --with-Qt4=C:\VboxBuildTools\VBoxBuild\x64\qt-4.8.6 --with-python=C:\Python27 --with-VC-Express-Editionecho 运行env.batcall "D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" amd64call env.batcall kbuild\envwin.cmd --win64 --releaseecho 运行kmk开始编译,此kmk命令请手动执行::kmkpause

编写了上述的make.bat之后,直接在vs2010的x64 cmd中执行make命令就可以了,具体过程碰到的问题,请参看如下的“编译FAQ”。 最后,64位系统下,编译完成,在源码下生成一个out目录,编译成功后的输出如下: 
这里写图片描述


编译FAQ:

问题1: 
在cmd中编译出现如下错误: 
LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 
kmk: * [D:/Work/SourceCode/Virtualbox_4.3.34/out/win.x86/release/obj/VBoxAuth/VBoxAuth.dll] Error 1123 
The failing command: 
@ D:/PROGRA~1/MICROS~1.0/VC/bin/link.exe -nologo -machine:x86 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LargeAddressAware /DynamicBase /NxCompat /Release /Debug /Version:403.34 
/STUB:D:/Work/SourceCode/Virtualbox_4.3.34/src/VBox/HostDrivers/Support/win/winstub.com /DISALLOWLIB:libc.lib /DISALLOWLIB:libcd.lib /DISALLOWLIB:libcmt.lib /DISALLOWLIB:libcmtd.lib /DISALLOWLIB:msvcr 
td.lib /DISALLOWLIB:msvcprtd.lib /OUT:D:/Work/SourceCode/Virtualbox_4.3.34/out/win.x86/release/obj/VBoxAuth/VBoxAuth.dll /IMPLIB:D:/Work/SourceCode/Virtualbox_4.3.34/out/win.x86/release/obj/VBoxA 
uth/VBoxAuth.lib /MAPINFO:EXPORTS /INCREMENTAL:NO /MAP:D:/Work/SourceCode/Virtualbox_4.3.34/out/win.x86/release/obj/VBoxAuth/VBoxAuth.map /DLL /LIBPATH:C:/PROGRA~2/MICROS~4/Windows/v7.0A/Lib @D:/Wo 
rk/SourceCode/Virtualbox_4.3.34/out/win.x86/release/obj/VBoxAuth/VBoxAuth.rsp 
kmk: * [D:/Work/SourceCode/Virtualbox_4.3.34/out/win.x86/release/obj/VBoxAuth/VBoxAuth.dll] Deleting file D:/Work/SourceCode/Virtualbox_4.3.34/out/win.x86/release/obj/VBoxAuth/VBoxAuth.lib' 
kmk: *** [D:/Work/SourceCode/Virtualbox_4.3.34/out/win.x86/release/obj/VBoxAuth/VBoxAuth.dll] Deleting file
D:/Work/SourceCode/Virtualbox_4.3.34/out/win.x86/release/obj/VBoxAuth/VBoxAuth.exp’ 
kmk: * [D:/Work/SourceCode/Virtualbox_4.3.34/out/win.x86/release/obj/VBoxAuth/VBoxAuth.dll] Deleting file `D:/Work/SourceCode/Virtualbox_4.3.34/out/win.x86/release/obj/VBoxAuth/VBoxAuth.rsp’ 
kmk: * Waiting for unfinished jobs…. 
kmk: * Exiting with status 2 
解决方法: 
用vs的x64的cmd对话框来运行上述命令

问题2: 
Microsoft (R) Windows Script Host Version 5.8 
版权所有(C) Microsoft Corporation 1996-2001。保留所有权利。 
Shell inheritance test: OK 
Source path: OK 
Checking for kBuild… 
Found kBuild: D:/Work/SourceCode/Virtualbox_4.3.34/kBuild 
Found kBuild binaries: D:/Work/SourceCode/Virtualbox_4.3.34/kBuild/bin/win.x86 
Checking for Windows DDK v7.1… 
Found Windows DDK v7.1: D:/Software/vbox_buildenv_install/WinDDK 
Checking for Visual C++… 
error: Executing ” (which we believe to be the Visual C++ compiler driver) failed. 
解决方法: 
计算机 -> 属性 -> “高级系统设置” -> “环境变量”中添加如下变量: 
path中增加vs路劲: 
%Path%=Path=c:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE;D:\Program Files\Microsoft Visual Studio 9.0\VC\BIN;C:\Program Files\Microsoft Visual Studio9.0\Common7\Tools;C:\WINDOWS\Microsoft.NET\Framework\v3.5;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages;(Path不需要新建) 
系统变量中添加include和lib变量: 
%include%=C:\Program Files\Microsoft Visual Studio 10.0\VC\include;(需要新建) 
%lib%=C:\Program Files\Microsoft Visual Studio 10.0\VC\lib; 
验证上述步骤是否成功: 
(之后就可以在命令行中使用cl了(win+R 输入cmd,键入 cl) ,如果在cmd中键入cl执行编译(或lib)时会出现mspdb100.dll无法找到的情况,是因为VC\Bin\下没有mspdb100.dll“这个文件,直接从Common7\IDE\下复制这个文件到VC\Bin\下即可解决。

C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE;D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN;C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools; 
C:\Windows\Microsoft.NET\Framework\v4.0.30319;C:\Windows\Microsoft.NET\Framework\v3.5;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcpackages;

问题3: 
编译的时候报错如下: 
kmk: No rule to make target D:/PROGRA~1/MICROS~1.0/VC/bin/lib/oldnames.lib', needed byD:/Work/SourceCode/Virtualbox_4.3.34/out/win.x86/release/obj/bin2c/bin2c.exe’. Stop. 
解决方法: 
1.此为64位编译时的错误,编辑AutoConfig.kmk,修改“PATH_TOOL_VCC100 := D:/PROGRA~1/MICROS~1.0/VC/bin” 为 “PATH_TOOL_VCC100 := D:/PROGRA~1/MICROS~1.0/VC” 
2.执行了步骤一之后,再单独执行kmk即可,因为configure.vbs会自动设置AutoConfig.kmk中的变量PATH_TOOL_VCC100

问题4: 
fatal error C1902: 程序数据库管理器不匹配;请检查安装: 
解决方法: 
到C:/Program Files/Microsoft Visual Studio 9.0/Common7/IDE下面拷贝mspdbsrv.exe到C:/Program Files/Microsoft Visual Studio 9.0/VC/bin下面,重启VS即可。

问题5: 
LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 
解决方法: 
连接器LNK是通过调用cvtres.exe完成文件向coff格式的转换的,所以出现这种错误的原因就是cvtres.exe出现了问题。例如:我的电脑里面安装了vs2010,最近更新了系统,打了一些补丁,结果就出现这种错误了。在电脑里面搜索发现 
C:\Program Files\Microsoft Visual Studio 10.0\VC\bin 
C:\Windows\winsxs\x86_netfx-cvtres_for_vc_and_vb_b03f5f7f11d50a3a_6.1.7600.16385_none_ba476986f05abc65 
C:\Windows\Microsoft.NET\Framework\v4.0.30319 
这三个路径里面都有cvtres.exe文件,于是我尝试使用第二个路径里面的文件替换第一个路径的文件,问题解决。如果是64为的,把C:\Windows\winsxs\amd64_netfx-cvtres_for_vc_and_vb_b03f5f7f11d50a3a_6.1.7601.22733_none_5ba3b291f5db50a0目录下的文件放到“D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64”路劲下解决

问题6: 
启动virtualbox之后有“Cannot access the kernel driver” 
解决方法: 
需要对virtualbox的几个以sys结尾的文件进行签名, 
前面工具使用请参考:http://jingyan.baidu.com/article/acf728fd21c3e7f8e510a3ef.html?qq-pf-to=pcqq.c2c 
具体步骤: 
1.在“命令行提示符”输入”bcdedit /set testsigning on”回车,然后命令行提示符会显示“操作成功完成”,就可以打开windows测试模式了。 
2.用dseo13b.exe测试签名工具对所有的以sys结尾和r0结尾的文件进行签名,然后运行SUPInstall.exe,重新注册驱动即可。 
3.对所有以r0结尾的文件镜像系统签名,比如VBoxDDR0.r0,否则启动vbox会报错:Failed to load VMMRO.r0

原创粉丝点击