在linux內核配置時,會發現報各種各樣的錯,在使用過程中源碼是沒有問題的,就因為增加了某個功能,按理來說增減配置不會對系統有太大的影響,可能每個廠家維護的代碼有自己的風格和差異。
下面還原這個報錯:
執行make menuconfig后敲問號搜尋配置路徑

我這里配置啟用perf
重新編譯會出現,這里出現很多需要配置的,如果不熟悉的話很難選擇正確,因為官方已經針對方案進行了配置:

如果只敲回車不選擇或者選擇錯了,最后編譯如下,即使make clean也是一樣的結果:

最終解決這個問題的關鍵是在內核路徑執行make distclean,清除所有編譯生成的結果,才會出現使用默認配置

最終編譯成功:

下面分享一些linux編譯容易出錯的問題以及大致的解決思路:
在Linux環境下編譯程序時,可能會遇到各種問題。以下是一些常見的Linux編譯錯誤及其解決路徑:
1. 頭文件缺失或包含路徑不正確:
問題表現**:編譯器提示找不到某個頭文件。
解決路徑**:確保所有需要的頭文件已安裝,并通過`-I/path/to/includes`參數指定正確的包含路徑。
2. 符號未定義:
問題表現:鏈接階段出現`undefined reference to function XYZ`錯誤。
解決路徑:檢查是否遺漏了庫文件的鏈接,使用`-llibraryname`選項鏈接所需的庫(例如 `-lmylib`),同時可能需要 `-L/path/to/library` 來指定庫文件所在目錄。
3. 結構體、聯合體等類型定義缺失:
問題表現:類似“sem_union存儲大小未知”這樣的錯誤。
解決路徑:如果系統不再提供某個類型,需要按照文檔或者源碼要求自行定義這個類型。
4. C++相關問題:
缺少標準庫包含:如沒有包含`iostream`或`string`頭文件。
命名空間問題:未使用`std::`前綴引用標準庫對象。
編譯器選擇:使用`gcc`編譯C++代碼而不是`g++`,導致鏈接問題。
解決路徑:確保正確包含頭文件,使用適當命名空間,并用`g++`編譯C++源文件。
5. 動態庫查找路徑問題:
問題表現:運行時找不到動態庫。
解決路徑:將動態庫路徑添加到`/etc/ld.so.conf`或設置環境變量`LD_LIBRARY_PATH`指向動態庫所在的目錄。
6. 內核模塊編譯問題:
內核配置不正確:編譯內核模塊時,需確保內核配置與模塊匹配。
依賴性問題:確認驅動程序所需的內核特性已開啟。
7. 編碼格式問題:
源代碼亂碼:跨平臺轉移代碼時,可能因編碼格式不同造成亂碼。
解決路徑:統一源碼文件的編碼格式,例如在Linux下通常使用UTF-8編碼。
8. 權限問題:
執行文件權限不足:無法啟動服務或運行程序。
解決路徑:檢查用戶和組權限,必要時以root身份或相應用戶組重新安裝或啟動服務。
9. Makefile或構建腳本錯誤:
問題表現:make過程中報錯,可能是依賴關系設置不當或命令行參數有誤。
解決路徑:審查并修正Makefile規則,確保編譯命令和鏈接命令正確無誤。
-
Android
+關注
關注
12文章
4026瀏覽量
133988 -
內核
+關注
關注
4文章
1468瀏覽量
42874 -
源碼
+關注
關注
8文章
685瀏覽量
31319
發布評論請先 登錄
SINA210-編譯Android系統
iTOP4412開發板Android4.4源碼編譯分享
4418開發板Android源碼整體&單獨編譯
Linux內核配置與編譯
【全志V853開發板試用】編譯 Tina Linux部分之buildroot 編譯
Android內核編譯教程
Google Android的操作系統內核編譯圖文教程
STM32MP157 Linux系統移植開發篇8:Linux內核配置方法及編譯
AOSP Android11系統源碼和內核源碼簡析
基于Android13的AOSP源碼下載及編譯指南
全志Android源碼內核新增配置編譯報錯解決
評論