设为首页 收藏本站
查看: 1334|回复: 0

[经验分享] VirtualBox开发环境的搭建详解

[复制链接]

尚未签到

发表于 2015-4-14 06:06:13 | 显示全部楼层 |阅读模式
  有关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行,可以看到,在这些乱码中缺少了两个引号,加上使得语法正确即可:

原先:

DSC0000.png

改之后:

DSC0001.png


(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的输出如下图:

DSC0002.png

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


3.执行VirtualBox

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

DSC0003.png

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

DSC0004.png

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

DSC0005.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-56813-1-1.html 上篇帖子: VirtualBox的四种网络连接方式 下篇帖子: 用Android-X86和VirtualBox打造高性能Android开发环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表