在linux內(nèi)核配置時(shí),會(huì)發(fā)現(xiàn)報(bào)各種各樣的錯(cuò),在使用過(guò)程中源碼是沒(méi)有問(wèn)題的,就因?yàn)樵黾恿四硞€(gè)功能,按理來(lái)說(shuō)增減配置不會(huì)對(duì)系統(tǒng)有太大的影響,可能每個(gè)廠家維護(hù)的代碼有自己的風(fēng)格和差異。
下面還原這個(gè)報(bào)錯(cuò):
執(zhí)行make menuconfig后敲問(wèn)號(hào)搜尋配置路徑

我這里配置啟用perf
重新編譯會(huì)出現(xiàn),這里出現(xiàn)很多需要配置的,如果不熟悉的話很難選擇正確,因?yàn)楣俜揭呀?jīng)針對(duì)方案進(jìn)行了配置:

如果只敲回車(chē)不選擇或者選擇錯(cuò)了,最后編譯如下,即使make clean也是一樣的結(jié)果:

最終解決這個(gè)問(wèn)題的關(guān)鍵是在內(nèi)核路徑執(zhí)行make distclean,清除所有編譯生成的結(jié)果,才會(huì)出現(xiàn)使用默認(rèn)配置

最終編譯成功:

下面分享一些linux編譯容易出錯(cuò)的問(wèn)題以及大致的解決思路:
在Linux環(huán)境下編譯程序時(shí),可能會(huì)遇到各種問(wèn)題。以下是一些常見(jiàn)的Linux編譯錯(cuò)誤及其解決路徑:
1. 頭文件缺失或包含路徑不正確:
問(wèn)題表現(xiàn)**:編譯器提示找不到某個(gè)頭文件。
解決路徑**:確保所有需要的頭文件已安裝,并通過(guò)`-I/path/to/includes`參數(shù)指定正確的包含路徑。
2. 符號(hào)未定義:
問(wèn)題表現(xiàn):鏈接階段出現(xiàn)`undefined reference to function XYZ`錯(cuò)誤。
解決路徑:檢查是否遺漏了庫(kù)文件的鏈接,使用`-llibraryname`選項(xiàng)鏈接所需的庫(kù)(例如 `-lmylib`),同時(shí)可能需要 `-L/path/to/library` 來(lái)指定庫(kù)文件所在目錄。
3. 結(jié)構(gòu)體、聯(lián)合體等類(lèi)型定義缺失:
問(wèn)題表現(xiàn):類(lèi)似“sem_union存儲(chǔ)大小未知”這樣的錯(cuò)誤。
解決路徑:如果系統(tǒng)不再提供某個(gè)類(lèi)型,需要按照文檔或者源碼要求自行定義這個(gè)類(lèi)型。
4. C++相關(guān)問(wèn)題:
缺少標(biāo)準(zhǔn)庫(kù)包含:如沒(méi)有包含`iostream`或`string`頭文件。
命名空間問(wèn)題:未使用`std::`前綴引用標(biāo)準(zhǔn)庫(kù)對(duì)象。
編譯器選擇:使用`gcc`編譯C++代碼而不是`g++`,導(dǎo)致鏈接問(wèn)題。
解決路徑:確保正確包含頭文件,使用適當(dāng)命名空間,并用`g++`編譯C++源文件。
5. 動(dòng)態(tài)庫(kù)查找路徑問(wèn)題:
問(wèn)題表現(xiàn):運(yùn)行時(shí)找不到動(dòng)態(tài)庫(kù)。
解決路徑:將動(dòng)態(tài)庫(kù)路徑添加到`/etc/ld.so.conf`或設(shè)置環(huán)境變量`LD_LIBRARY_PATH`指向動(dòng)態(tài)庫(kù)所在的目錄。
6. 內(nèi)核模塊編譯問(wèn)題:
內(nèi)核配置不正確:編譯內(nèi)核模塊時(shí),需確保內(nèi)核配置與模塊匹配。
依賴(lài)性問(wèn)題:確認(rèn)驅(qū)動(dòng)程序所需的內(nèi)核特性已開(kāi)啟。
7. 編碼格式問(wèn)題:
源代碼亂碼:跨平臺(tái)轉(zhuǎn)移代碼時(shí),可能因編碼格式不同造成亂碼。
解決路徑:統(tǒng)一源碼文件的編碼格式,例如在Linux下通常使用UTF-8編碼。
8. 權(quán)限問(wèn)題:
執(zhí)行文件權(quán)限不足:無(wú)法啟動(dòng)服務(wù)或運(yùn)行程序。
解決路徑:檢查用戶(hù)和組權(quán)限,必要時(shí)以root身份或相應(yīng)用戶(hù)組重新安裝或啟動(dòng)服務(wù)。
9. Makefile或構(gòu)建腳本錯(cuò)誤:
問(wèn)題表現(xiàn):make過(guò)程中報(bào)錯(cuò),可能是依賴(lài)關(guān)系設(shè)置不當(dāng)或命令行參數(shù)有誤。
解決路徑:審查并修正Makefile規(guī)則,確保編譯命令和鏈接命令正確無(wú)誤。
-
Android
+關(guān)注
關(guān)注
12文章
4026瀏覽量
134042 -
內(nèi)核
+關(guān)注
關(guān)注
4文章
1468瀏覽量
42891 -
源碼
+關(guān)注
關(guān)注
8文章
685瀏覽量
31337
發(fā)布評(píng)論請(qǐng)先 登錄
SINA210-編譯Android系統(tǒng)
iTOP4412開(kāi)發(fā)板Android4.4源碼編譯分享
4418開(kāi)發(fā)板Android源碼整體&單獨(dú)編譯
香橙派全志芯片開(kāi)發(fā)板下載交叉編譯工具鏈說(shuō)明
Linux內(nèi)核配置與編譯
RK3288 android7.1.2 內(nèi)核極其源碼編譯過(guò)程是怎樣的步驟?
全志XR806適配最新鴻蒙3.0_LTS
【全志V853開(kāi)發(fā)板試用】編譯 Tina Linux部分之buildroot 編譯
Android內(nèi)核編譯教程
Google Android的操作系統(tǒng)內(nèi)核編譯圖文教程
嵌入式Linux的內(nèi)核編譯
STM32MP157 Linux系統(tǒng)移植開(kāi)發(fā)篇8:Linux內(nèi)核配置方法及編譯
AOSP Android11系統(tǒng)源碼和內(nèi)核源碼簡(jiǎn)析
基于Android13的AOSP源碼下載及編譯指南
全志Android源碼內(nèi)核新增配置編譯報(bào)錯(cuò)解決
評(píng)論