WINCE編譯過程中的錯誤出現階段

2022-09-17 03:30:14 字數 2103 閱讀 3149

在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)。

過程如圖:

從圖中可以看出,整個編譯都是通過呼叫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的時候,路徑中不要有中文或者空格或者其他比較奇怪的字元。補丁要按照順序來打,要不也可能會出現問題。

編譯Android原始碼過程中出現的錯誤

錯誤1 can t locate switch.pm in inc you may need to install the switch module inc contains etc perl usr local lib perl 5.18.2 usr local share perl 5.18....

Qt編譯過程中出現的問題

1.解壓原始碼zip包的時候,要使用引數 a,否則編譯會有問題。2.編譯過程中出現錯誤 qt usr include x11 extensions xiproto.h 1825 錯誤 expected unqualified id before delete 解決方法 開啟檔案qt usr incl...

Spark執行過程中的錯誤

配置完歷史伺服器之後測試saprkpi案例報以上錯誤。原因在於 spark env.sh和spark defaults.conf中配置logdierctory的路徑埠為8020 預設埠 這樣不對,因為spark產生的日誌檔案儲存到hdfs中,所以spark訪問hdfs的uri應該與hadoop的co...