在wince系統中,當我們完成了相關的開發和系統定製工作以後,會編譯wince系統,最後生成nk.bin和nk.nb0。我現在用wince6.0在自己的pc上面編譯一次用時19分16秒(有一天無聊,就測了一下)。下面介紹一下wince系統的編譯過程,大致分為4個階段:編譯階段(compile phase),系統產生階段(sysgen phase),檔案拷貝階段(release copy phase)和生成映像階段(make run-time image phase)。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
過程如圖:
從圖中可以看出,整個編譯都是通過呼叫blddemo.bat來實現的,實際上也是這樣,編譯wince就是用blddemo.bat,只不過後面可以跟不同的引數。編譯階段和系統產生階段由cebuild.bat完成,檔案拷貝階段由buildrel.bat完成,最後的生成映像階段由makeimg.exe完成。下面介紹一下各個階段。
1.編譯階段(compile phase)
這個過程指對wince路徑下的private和public目錄進行編譯,將裡面的源**編譯成庫檔案等,這個過程可能會花費幾個小時。除非改動了private或public目錄下的原始碼,否則是不需要編譯的。一般我們編譯自己的工程的時候,不需要這個步驟。
2.系統產生階段(sysgen phase)
在這個過程中,系統會根據你在pb中catalog中的選項,刪除和設定相應的sysgen環境變數,鏈結相應的靜態庫,過濾標頭檔案,為sdk建立所需的導入庫,同時還會為wince系統建立一些配置檔案。最後會編譯當前的bsp和應用程式。
3.檔案拷貝階段(release copy phase)
拷貝所有所需的檔案到工程的release目錄下面,主要是前面系統產生階段所產生的所有檔案。
4.生成映像階段(make run-time image phase)
該過程首先呼叫cenlscmp.exe根據國際語系與地區設定生成wince.nls檔案。然後呼叫fmerge.exe合併一些配置檔案,合併所有bib檔案為ce.bib,合併所有的reg檔案為reginit.ini,合併所有的dat檔案為initobj.dat,合併所有的db檔案為initdb.ini。之後呼叫regcomp.exe壓縮reginit.ini為default.fdf。根據local環境變數的設定呼叫res2exe.exe更新所有的dll,exe和cpl檔案中的資源檔案,主要是更新其中的語言部分。再呼叫txt2ucde.exe轉換所有ascii碼字串為unicode。最後呼叫romimage.exe合併所有檔案為nk.bin。
在整個編譯過程中有時會遇到編譯錯誤,這個可以通過察看build.log,build.err和build.wrn檔案來分析問題,這三個檔案應該是位於」\wince600」目錄下面。編譯錯誤可能在不同的編譯階段產生,我們也可以根據這一點來分析問題。
一般在系統產生階段(sysgen phase)出現錯誤很可能是由於丟失元件或檔案造成的,這時候build.log會提供更多資訊幫助分析問題。在這個階段產生錯誤,很可能是由於在當前工程中新增或者刪除wince元件造成的,其中有些元件的更改是需要進行」clean sysgen」的,而不能只使用」sysgen」命令。所以我的建議是每次新增或刪除元件都做」clean sysgen」。
如上面介紹系統產生階段(sysgen phase)也會編譯bsp和部分應用。所以如果錯誤出現在系統產生階段的編譯過程中,一般一種可能就是你的**有語法錯誤,當然這種錯誤很好查。還有一種可能出現的錯誤是連線錯誤,有可能是丟失了lib庫檔案或者鏈結錯了庫檔案,也有可能是呼叫了錯誤的api函式,還有就是設定了錯誤的環境變數,這些查起來相對困難一點。
如果錯誤產生在檔案拷貝階段(release copy phase),一種常見的問題就是和硬碟驅動器有關,檢查一下release目錄所在磁碟的磁碟空間。
如果問題出現在生成映像階段(make run-time image phase),根據編譯的輸出視窗的輸出資訊判斷問題出在哪個子階段。一種可能是你的bib檔案或者reg檔案中存在語法錯誤導致合併檔案時出錯,還有就是注意你的image的大小是否超過了config.bib檔案中的設定,還有就是可能丟失了某個或者某些檔案,這些丟失的檔案很可能是由於在前面的編譯過程中出現錯誤導致的。
當然,也有時候會遇到一些奇怪的問題,這些問題可能是由於沒有正確的安裝wince造成的,比如在安裝wince的時候,路徑中不要有中文或者空格或者其他比較奇怪的字元。補丁要按照順序來打,要不也可能會出現問題。
WinCE系統編譯過程
在wince系統中,當我們完成了相關的開發和系統定製工作以後,會編譯wince系統,最後生成nk.bin和nk.nb0。我現在用wince6.0在自己的pc上面編譯一次用時19分16秒 有一天無聊,就測了一下 下面介紹一下wince系統的編譯過程,大致分為4個階段 編譯階段 compile phas...
WinCE系統的編譯過程詳解
在wince系統中,當我們完成了相關的開發和系統定製工作以後,會編譯wince系統,最後生成nk.bin和nk.nb0。下面介紹一下wince系統的編譯過程,大致分為4個階段 編譯階段 compile phase 系統產生階段 sysgen phase 檔案拷貝階段 release copy pha...
WINCE編譯過程
在wince系統中,當我們完成了相關的開發和系統定製工作以後,會編譯wince系統,最後生成nk.bin和nk.nb0。我現在用wince6.0在自己的pc上面編譯一次用時19分16秒 有一天無聊,就測了一下 下面介紹一下wince系統的編譯過程,大致分為4個階段 編譯階段 compile phas...