Openharmony南向編譯出錯自查手冊
在長期的openharmony教學過程中,發現經常會有學員被一些低級的,重復出現的錯誤所困擾,有些是因為粗心,有些是對原理和機制理解不到位,而一遍一遍的講解此種錯誤,不僅耗費巨量的時間,而且長此以往會消磨執教人員的耐性,變得易怒,本篇就用來記錄個種常見的錯誤,以供學員和各位初學者用來自查之用。
以下每種錯誤都非常典型,每個錯誤都配有截圖和文字說明,一般對照來看可解決90%以上的新手入門問題,并會在后續的教學活動中持續改進,建議收藏。
1、之前是好的.有一次輸入hb set提示找不到hb工具
原因分析:沒有在源碼目錄內執行,簡單判斷是否源碼目錄就看目錄里面有沒有一個ohos_config.json文件:
解決辦法:cd到源碼所在目錄內再執行hb set。
知識點:執行linux指令的時候需要注意當前工作目錄。
2、提示Unable to load xxx
原因分析:在BUILD.gn內沒有對應的目錄,導致到不到該路徑下的BUILD.gn文件。
解決辦法:修改BUILD.gn內的目錄名稱或檢查對應的名稱有沒有寫錯,如大小寫,空格等問題,特別是有些學員會粗心大意,目錄名稱前有空格或者大寫的L與I沒有區分。
此時重命名就會發現:
知識點:BUILD.gn內deps的寫法,冒號前是文件夾名稱。
3、提示unresolved xxx dependencies … need by xxx
原因分析:在BUILD.gn同級的文件夾內的BUILD.gn聲明的static_library名稱與deps里面的不一致。
解決辦法:修改deps內的冒號后面的庫名稱或者將文件夾內BUILD.gn聲明的static_library改成與deps內一致。
知識點:deps內冒號后面的內容是對應文件夾內的庫名稱。
補充知識:對于deps內的內容是出錯的高危區,出現這種錯誤一般是對deps機制不理解導致,現用一圖來說明deps到底改怎么寫:
4、提示 ERROR at xxx/BUILD.gn:25:12: Assignment had no effect.
[OHOS INFO] source = [
原因分析:source單詞拼寫錯誤,正確寫法是sources,同樣的其他類似問題如:
也是單詞拼寫錯誤。
解決辦法:將對應報錯的單詞改成正確的名稱。
知識點:正確的名稱為sources和include_dirs,如下圖:
推薦安裝gn插件,有顏色提示,還可以方便進行快捷鍵注釋,括號補全等操作。
在安裝之前:
安裝之后:
如果某一變量不是內置變量,則不能正確高亮:
5、提示ninja error: … needed by xxx.o, missing and unkonow rule to make it
原因分析:在static_library內的sources列表中將.c文件名寫錯了導致編譯時候找不到對應的源文件。
解決辦法:修改sources內的c文件名或者修改文件系統內的文件名使之與sources里的文件一致。
知識點:c語言編譯時依靠文件名尋找文件,對應的文件不存在則報錯。
6、提示某個符號未定義:undefined reference to xxx
原因分析:函數/變量名寫錯或調用一個根本不存在的函數/變量。
解決方式:將函數/變量名修改正確即可。
知識點:c語言編譯的相關知識。
7、提示too few arguments to function xxx
原因分析:c語言函數參數個數傳錯。
解決方式:正確傳入參數。
知識點:c語言基礎知識。
8、提示 Expected comma between items.
原因分析:在gn中列表的兩行數據沒有用逗號隔開,如下:
解決方式:輸入一個英文的逗號即可,建議:每一個列表項后面跟上一個逗號。
知識點:gn的基礎知識。
9、提示Replacing nonempty list.
原因分析:嘗試覆蓋一個非空的列表,如下例:
解決方式:在下一個變量處使用+=即可解決,+=代表在后面追加。
知識點:gn的基礎知識。
10、提示:fatal error: xxxx.h: No such file or directory
原因分析:在某個c文件里引用了某個頭文件,但是沒有在??include_dirs?
?里包含這個頭文件的路徑。
解決方式:在include_dirs內添加這個頭文件即可,寫在內部或使用+=在后面追加都行。
知識點:c語言編譯相關知識點。