VirtualBox開發環境的搭建詳解


有關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啦:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM