WINDOWS 7下virtualBox编译步骤

开源的virtualbox虚拟机提供了源码而且给出了编译环境以及编译步骤,这里只是试验一下

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

WINDOWS 7下virtualBox编译步骤_第1张图片

并且在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)”命令行中运行,执行过程中会安装虚拟机网络驱动,如下图所示:

WINDOWS 7下virtualBox编译步骤_第2张图片

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

WINDOWS 7下virtualBox编译步骤_第3张图片
VirtualBox成功编译出来后,在生成的out文件夹中会发现有SDK文件夹(当然也可以直接从官网下SDK),里面有例子,但是直接用Visual Studio编译的话会出一大堆错误,本文就是讲解如何使之编译通过。

如果使用Visual Studio直接建立工程,把例子CPP(\VirtualBox-4.2.8\out\win.x86\release\bin\sdk\bindings\mscom\samples\tstVBoxAPIWin.cpp)导入工程中,build时会出现以下错误:

1>Linking…
1>main.obj : error LNK2001: unresolved external symbol _CLSID_Session
1>main.obj : error LNK2001: unresolved external symbol _IID_ISession
1>main.obj : error LNK2001: unresolved external symbol _CLSID_VirtualBox
1>main.obj : error LNK2001: unresolved external symbol _IID_IVirtualBox
这时只需要include它lib下的tlb文件(这一步并不是必须的,但是为了将来使用VirtualBox SDK方便,建议先加上):

#import “C:\VirtualBox\VirtualBox-4.2.8\out\win.x86\release\bin\sdk\bindings\mscom\lib\VirtualBox.tlb” rename_namespace(“NBVirtualBox”)
并把lib文件夹下的“VirtualBox_i.c”添加到工程中参与build,就可以成功编译了,例子程序的输出:

Name: WinXP
Successfully retrieved error description: Could not find a registered machine named ‘Foobar’

下面是win7

  1. 系统环境

     A)  Windows 7专业版 Service Pack 1 32 位
    
     B)  Microsoft Visual Studio 2010
    
           版本 10.0.40219.1 SP1Rel
    
     C)  VirtualBox 4.2.10
    
    1. 所需开发包安装及编译

      2.1 Windows SDK v7.1

       For Windows 7 and .NET Framework 4      
      
       采用默认的安装方式,安装路径分别为:
      
       DestinationFolder for Tools
      
           C:\Program Files\Microsoft SDKs\Windows\v7.1
      
       DestinationFolder for Samples
      
           C:\Program Files\MicrosoftSDKs\Windows\v7.1\Samples
      
       这种方式安装过程失败,会弹出下对话框。
      
      
      
      
       随后,分别执行如下安装程序
      
       H:\Setup\WinSDKBuild\WinSDKBuild_x86
      
       H:\Setup\WinSDKSamples\WinSDKSamples_x86
      
       这两个安装程序执行后,表明SDK已安装完成,安装目录与默认的安装方式一致。
      
       说明:H:\表示GRMSDK_EN_DVD.ISO文件使用虚拟光驱软件打开后,映射的盘符。
      

      2.2 Windows DDK v7.1

      采用默认的安装方式,安装目录为C:\WinDDK\7600.16385.1
      

      2.3 MinGW

      2.3.1 MinGW Installation Manager的安装
      
          采用默认的安装方式,安装完成后,安装MinGW Base System,主要包括
      
          mingw32-binutils\mingw32-gcc\mingw32-gcc-g++\mingw32-gdb等.
      
      2.3.2 gcc-core-3.3.3-20040217-1.tar解压及替换
      
          解压gcc-core-3.3.3-20040217-1.tar文件,并将解压后的bin和lib子目录覆盖到C:\MinGW的目录下,
      
          替换同名文件。
      
      2.3.3 gcc-g++-3.3.3-20040217-1.tar解压及替换
      
          操作方式同2.3.2,include目录也一并覆盖并替换。
      
      2.3.4 mingw-runtime-3.8.tar解压及替换
      
          操作方式同2.3.2
      
      2.3.5 w32api-3.5.tar解压及替换
      
          操作方式同2.3.2
      
      2.3.6 binutils-2.13.90-20021006-2.tar解压及替换
      
          操作方式同2.3.2
      
      2.3.7 验证MinGW
      
          通过CMD命令窗口,执行gcc –v命令验证MinGW当前使用的gcc版本,如果上述操作成功,
      
          那么显示的gcc版本为3.3.3
      

      2.4 Qt4的安装

       安装文件为qt-opensource-windows-x86-vs2010-4.8.6,默认安装
      

      2.5 curl的安装

       下载并解压curl-7.42.1.tar.gz文件,解压后,在vs2010中打开solution文件
      
       D:\vbox_binutils\curl-7.42.1\projects\Windows\VC10,
      
       选择配置为DLL Release,编译完成后,将curl-7.42.1\build\Win32\VC10\DLLRelease
      
       目录下的libcurl.dll和libcurl.lib拷贝至
      
       C:\curl-7.40.0-devel-mingw32目录下。
      

      2.6 SDL的安装

       下载并解压SDL-devel-1.2.15-VC,并将解压后的子目录SDL-1.2.15拷贝至c:\根目录下将
      
       C:\SDL-1.2.15\lib\x86目录下的三个文件拷贝到C:\SDL-1.2.15\lib\目录下.
      

      2.7 zlib的安装

       下载并解压zlib128-dll.rar文件,并将解压后的zlib128-dll目录拷贝纸c:\根目录下。
      

      2.8 activeperl的安装

       默认安装
      

      2.9 openssl的编译及安装

       将openssl-0.9.8zf压缩包解压。并将openssl-0.9.8zf目录拷贝至c:\根目录.
      
       执行Visual Studio Command Prompt (2010),转到openssl源码的根目录,顺序执行如下命令
      
       perl Configure VC-WIN32
      
       ms\do_ms
      
       nmake -f ms\ntdll.mak
      
       编译完成后,将openssl中的include文件夹改名为inc。
      
       再将inc32重命名为“include”,然后创建bin、lib两个文件夹,将out32dll文件夹中所有的*.lib文件
      
       复制到lib文件夹,再将所有 *.exe、*.dll文件复制到bin文件夹
      

      2.10 Python的安装

       默认安装
      
    2. 编译步骤

      执行Visual Studio CommandPrompt (2010),转到VirtualBox-4.2.10源码的根目录,执行如下命令:

      cscript configure.vbs–with-MinGW32=C:\MinGW --with-libSDL=C:\SDL-1.2.15

      –with-openssl=C:\openssl-0.9.8zf --with-ibcurl=C:\curl-7.40.0-devel-mingw32

      –with-Qt4=C:\Qt\4.8.6

    3. VirtualBox的执行

      编译成功后,VirtualBox.exe位于\out\win.x86\release\bin子目录下,在执行VirtualBox之前,

      需要将如下文件拷贝至VirtualBox所在的目录:

WINDOWS 7下virtualBox编译步骤_第4张图片

    随后在Visual Studio Command Prompt (2010)下分别执行:“comregister.cmd”、“loadall.cmd”。

    最后,就可以执行VirtualBox.exe了。

你可能感兴趣的:(虚拟机,编译)