有关VirtualBox的介绍请参考:VirtualBox_百度百科

由于VirtualBox官网提供的搭建方法不够详细,而且本人在它指导下,从下载所需的开发包,到最后生成二进制文件,中间遇到了许多的问题,官网都没有提供任何讲解,我通过在网上查找、自己摸索,最后终于成功编译生成了。以下本文仅提供Windows 32位下的VirtualBox开发环境搭建方法。

我的开发环境是:

Windows XP SP3

Visual Studio 2010 SP1

VirtualBox 4.2.8

1.准备所需开发包

(1) Visual Studio 2010 SP1

按照官方给的说明(https://www.virtualbox.org/wiki/Windows%20build%20instructions),下载所需的开发库,其中Visual Studio 2010 SP1安装好后,Windows Platform SDK v7.1就不用下载了;

(2) WDK v7.1

Windows Driver Development Kit (WDK) v7.1.按要求下载;

(3) MingW

MingW先下载前两个(gcc-core-3.3.3、gcc-g++-3.3.3),后面的3个不用下载,只需点第一个(Runtime),会跳转到一个页面,提示:“Looking for the latest version? Download mingw-get-inst-20120426.exe (662.7 kB)”,点击它下载安装,安装完后,将刚才下载的gcc-core与gcc-g++解压,并覆盖到安装完的MingW路径中,MingW就算准备完成;

(4) Qt4

下载Qt4,会很大,其实只需用到里面的bin、include、lib、src文件夹;

(5) cURL

再下载cURL,注意要下载devel的无SSL版本;

(6) SDL、zlib

剩下的SDL、zlib按要求下载,有开发版的就下开发版;

(7) openssl 0.9.8x

然后是下载openssl,记着一定要下载0.9.8x版本,太新的版本在后面编译会出问题,我下的是0.9.8y版本。安装openssl需要下载perl,我下载的是ActivePerl。

执行Visual Studio Command Prompt (2010),转到openssl源码的根目录,执行命令:

perl Configure VC-WIN32

执行完后会提示“Configured for VC-WIN32.” 然后执行命令:

ms\do_ms

然后是执行命令进行openssl编译:

nmake -f ms\ntdll.mak

如果没有问题,openssl则安装完毕。这时,需要手动创建include、bin、lib供后面VitualBox编译时使用。将openssl中的include文件夹改名为其它名字,再将inc32重命名为“include”,然后创建bin、lib两个文件夹,将out32dll文件夹中所有的*.lib文件复制到lib文件夹,再将所有*.exe、*.dll文件复制到bin文件夹。到此,openssl开发库准备完毕。

(8) Python 2.7.3

最后是要下载python 2.7.3,在后面编译时会用到。最好下载2.7版本,其它版本在后面编译时会有奇怪的错误。

2.编译VirtualBox

执行Visual Studio Command Prompt (2010),转到virtualbox源码的根目录。执行命令:

cscript configure.vbs --with-MinGW32=C:\VirtualBox\VBoxLib\MinGW --with-libSDL=C:\VirtualBox\VBoxLib\SDL --with-openssl=C:\VirtualBox\VBoxLib\openssl --with-libcurl=C:\VirtualBox\VBoxLib\libcurl --with-Qt4=C:\VirtualBox\VBoxLib\qt

如果没有错误,会出现两个文件:AutoConfig.kmk、env.bat。执行命令:

env.bat

再执行命令进行编译:

kmk

此时,kmk会按顺序把VirtualBox中的源码进行编译和链接,在此过程中会出现一些问题,下面针对这些问题一一进行修正,修正完后,再执行kmk命令,就可以生成VirtualBox的所有二进制文件了。

(1)

报错信息:

当执行kmk之后,如果程序停下来并有如下提示:

kmk: *** Waiting for unfinished jobs....
kmk: *** Exiting with status 2

说明编译遇到了问题,查找上面第一个出现“error”的地方,可以看到这一行:

C:\VirtualBox\VirtualBox-4.2.8\src\VBox\Disassembler\DisasmCore.cpp : error C2220: warning treated as error - no 'object' file generated

解决方法:

这是因为源码DisasmCore.cpp文件中的内容编码不正确导致的,只需使用Windows自带的记事本notepad.exe打开此文件,选择菜单栏“文件”-->“另存为”,在“另存为”对话框的最下面“编码”处选择“Unicode”,并保存即可。然后再执行kmk命令,刚才出现的错误就没有了。以下还会出现类似的错误,用这个方法解决即可。下面我把所有要修正的内容都列出来,全部修正之后再执行kmk命令吧:

(2)

报错信息:

kBuild: Generating python - C:/VirtualBox/VirtualBox-4.2.8/out/win.x86/release/obj/VBoxOGLgen/spu_dispatch_table.h
kmk_redirect.exe: error: _spawnvp(_P_WAIT, "python-not-found.exe", ...) failed:No such file or directory

解决方法:

首先复制之前安装的Python的安装路径,然后在VirtualBox源码根目录的Makefile.kmk文件中添加一行:

VBOX_BLD_PYTHON=C:\Python27\python.exe

(3)

报错信息:

C:\VirtualBox\VirtualBox-4.2.8\include\VBox/vmm/hwacc_vmx.h(773) : error C2220:warning treated as error - no 'object' file generated

解决方法:

像上面(1)所说明的方法以Unicode编码重新保存文件即可。

(4)

报错信息:

C:\VirtualBox\VirtualBox-4.2.8\src\VBox\VMM\VMMAll\SELMAll.cpp : error C2220: warning treated as error - no 'object' file generated

解决方法:

像上面(1)所说明的方法以Unicode编码重新保存文件即可。

(5)

报错信息:

kBuild: Compiling VBoxMMRHook - C:/VirtualBox/VirtualBox-4.2.8/src/VBox/Additions/WINNT/VBoxMMR/logging.cpp
kmk: *** No rule to make target `C:/VirtualBox/VirtualBox-4.2.8/tools/win.x86/sdk/v7.1/Lib/WS2_32.lib', needed by `C:/VirtualBox/VirtualBox-4.2.8/out/win.x86/release/obj/VBoxMMRHook/VBoxMMRHook.dll'. Stop.

解决方法:

在VirtualBox源码中,找到这个路径下的Makefile.kmk文件:C:\VirtualBox\VirtualBox-4.2.8\src\VBox\Additions\WINNT\VBoxMMR\Makefile.kmk,将里面第62行、第63行的这两行内容注释掉,在前面添加“#”即可:

#VBOX_PATH_PSDK_v71    := \
# $(PATH_DEVTOOLS)/win.x86/sdk/v7.1

并且添加这一行内容:

VBOX_PATH_PSDK_v71 := $(PATH_SDK_WINPSDK71)

(6)

报错信息:

C:\VirtualBox\VirtualBox-4.2.8\src\VBox\Main\testcase\tstGuestCtrlParseBuffer.cpp(92) : error C2017: illegal escape sequence
C:\VirtualBox\VirtualBox-4.2.8\src\VBox\Main\testcase\tstGuestCtrlParseBuffer.cpp(92) : error C2146: syntax error : missing '}' before identifier '漩f漩'
C:\VirtualBox\VirtualBox-4.2.8\src\VBox\Main\testcase\tstGuestCtrlParseBuffer.cpp(92) : error C2146: syntax error : missing '}' before identifier '漩f漩'
C:\VirtualBox\VirtualBox-4.2.8\src\VBox\Main\testcase\tstGuestCtrlParseBuffer.cpp(92) : error C2146: syntax error : missing ';' before identifier '漩f漩'
C:\VirtualBox\VirtualBox-4.2.8\src\VBox\Main\testcase\tstGuestCtrlParseBuffer.cpp(92) : error C2143: syntax error : missing ';' before 'constant'
……

解决方法:

用Visual Studio打开文件VirtualBox-4.2.8\src\VBox\Main\testcase\tstGuestCtrlParseBuffer.cpp,按“Ctrl + G”定位到第92行,可以看到,在这些乱码中缺少了两个引号,加上使得语法正确即可:

原先:

改之后:

(7)

报错信息:

c:\virtualbox\virtualbox-4.2.8\src\vbox\devices\testcase\../PC/DevLPC.cpp : error C2220: warning treated as error - no 'object' file generated

解决方法:

像上面(1)所说明的方法以Unicode编码重新保存文件即可。

以上就是需要修正的问题,这时执行kmk命令,大概需要20分钟左右的时间,就可以生成VirtualBox的全部二进制文件,如果编译链接没有出错的话,最后kmk的输出如下图:

并且在VirtualBox源码根目录会生成“out”文件夹,大概有2.78G的大小,VirtualBox.exe执行文件就在“VirtualBox-4.2.8\out\win.x86\release\bin”中。

3.执行VirtualBox

在执行VirtualBox.exe之前,需要把运行时需要的dll库复制到与VirtualBox.exe同一路径或system32下,包括以下文件:

然后,需要执行VirtualBox.exe同一路径中的两个命令:“comregister.cmd”、“loadall.cmd”,其中,“loadall.cmd”必须要在“Visual Studio Command Prompt (2010)”命令行中运行,执行过程中会安装虚拟机网络驱动,如下图所示:

最后,就可以正常运行我们自己编译的VirtualBox.exe啦:

补充:如果在做第2步,编译VirtualBox时要执行cscript,需要指定DDK的路径,则添加参数:--with-DDK=[路径],如:--with-DDK=Z:\WinDDK\7600.16385.1

http://www.cnblogs.com/cxun/archive/2013/03/12/2956175.html

VirtualBox开发环境的搭建详解的更多相关文章

  1. VirtualBox开发环境的搭建详解(转)

    VirtualBox开发环境的搭建详解   有关VirtualBox的介绍请参考:VirtualBox_百度百科 由于VirtualBox官网提供的搭建方法不够详细,而且本人在它指导下,从下载所需的开 ...

  2. 嵌入式Qt开发环境的搭建详解

    一.嵌入式Qt开发环境的搭建前奏 1.下载arm-linux-gcc-4.4.3-20100728.tar.gz 2.下载qt-everywhere-opensource-src-4.8.5.tar. ...

  3. Ubuntu14.04搭建JSP与Servlet开发环境及其测试详解

    一,搭建JDK开发环境 1,在Java官网下载Jdk软件包,我的系统是64位Ubuntu14.04,所以选择jdk-8u25-linux-x64.tar.gz. 2,解压Jdk软件包 tar xvzf ...

  4. 在 IntelliJ IDEA 中配置 JSF 开发环境的入门详解

    JSF 作为 JavaEE 官方标准,在了解并掌握其基本开发技术后,对于功能要求较高.业务流程复杂的各种现代 Web 应用程序开发将会成为非常合适且强大的高效率开发利器.JSF 的开发环境搭建涉及到在 ...

  5. IDEA里如何安装Python插件打造开发环境(图文详解)

    前言 python是一种功能强大和适用面很广的开发语言,在大数据应用和机器学习日益流行的年代,python凭借其简洁.易用和可扩展性获得很多用户的支持,近年来使用率高速增长.python环境下,集成了 ...

  6. JavaWeb开发SSM框架搭建详解

    1.需要用到的jar包:由于很多的jar包不好下载,我直接上传到百度网盘: 很多,而且不好下载,我已经整理好好了: 链接:https://pan.baidu.com/s/1iIFprmstp86uKz ...

  7. eclipseIDE for javaee developers 开发环境搭建详解图文

    使用eclipse真的有年头了,相信java程序员没有不知道它的,最近在给团队中新来的应届生做指导,专门讲解了一下Eclipse开发环境的搭建过程,一是帮助他们尽快的熟悉IDE的使用,二也是保证团队开 ...

  8. 转】[1.0.2] 详解基于maven管理-scala开发的spark项目开发环境的搭建与测试

    场景 好的,假设项目数据调研与需求分析已接近尾声,马上进入Coding阶段了,辣么在Coding之前需要干马呢?是的,“统一开发工具.开发环境的搭建与本地测试.测试环境的搭建与测试” - 本文详细记录 ...

  9. Windows GTK+ 环境搭建(详解)

    来源:http://blog.sina.com.cn/s/blog_a6fb6cc901017ygy.html Windows GTK+ 环境搭建 最近要做界面的一些东西,但是对微软提供的类库MFC不 ...

随机推荐

  1. [译]Stairway to Integration Services Level 12 - 高级日志配置

    介绍 本文中,我们将结合之前学习的时间冒泡,日志记录,以及复制模型.建立一个自定义的SSIS包日志模型. SSIS Task事件回顾    Reviewing SSIS Task Events 在做实 ...

  2. HDU 2023题解分析

    我想说这道题我还没弄明白我错哪了,交了20多遍一直都是Runtime Error,改了N次还是不对,后来搜了一下,说是数组开小了,又把数组开大,还不对,又改发现一个平均值求错,再改,还不对,洗洗睡吧. ...

  3. HTML5 总结-地理定位-6

    HTML5 地理定位 定位用户的位置 HTML5 Geolocation API 用于获得用户的地理位置. 鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的. 浏览器支持 Int ...

  4. oracle 开发笔记“跨数据库查询复制”

    1.方法一:创建DBL(data base link) CREATE PUBLIC DATABASE LINK 数据链名称 CONNECT TO 登陆用户名 IDENTIFIED BY 密码 USIN ...

  5. werkzeug中reloader的实现

    在用flask开发时,如果把use_reloader设为True(debug设为True也能实现),那当你修改了app代码或调用环境发生改变时,服务器会自动重启,如下 * Detected chang ...

  6. Linux下gsoap实现webservice功能

    蓝字为关键字,等号=后面为关键字值. 一.介绍 我们用的webservice是根据gsoap编译工具来实现,gSOAP的编译器能够自动的将用户定义的本地化的C或C++数据类型转变为符合XML语法的数据 ...

  7. 安装ubuntu时的注意事项----个人小总结

    今天重装了一次ubuntu,以前是别人帮我装的,而这次是我自己照着网上教程装的. 这个教程还是挺不错的,我就是照着这个装成功的 http://jingyan.baidu.com/article/60c ...

  8. 最短路Dijkstra和Flyod

    Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要 ...

  9. 在优化SQL语句中使用虚拟索引

    定义:虚拟索引(virtual index) 是指没有创建对应的物理段的索引. 虚拟索引的目的:是在不损耗主机CPU,IO,磁盘空间去实际创建索引的情况下,来判断一个索引是否能够对SQL优化起到作用. ...

  10. Lua,Lua API,配置文件

    想像一个场景:你的c程序须要有一个窗体,你想让用户能够自己定义窗体大小.方法非常多.比方使用环境变量,或键值对的文件. 无论如何,你须要解析它. 使用lua配置文件是个不错的选择. 首先,你能够定义例 ...