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