? ? ? ?有斷時間我就在想,為什么freertos,lvgl等等的移植都是把庫文件放進來,直接點擊編譯,然后把bug都處理完成就移植成功了,為什么呢?
明明我一個函數都沒調用,為什么會有一堆錯誤,莫名其妙又能修改好,就移植成功了。
這里涉及到一個知識,在 C/C++ 中,編譯器會將每個源文件編譯為目標文件(.o
或 .obj
),然后鏈接器會將這些目標文件和庫文件鏈接成最終的可執行文件。當你添加了一個庫(比如 LVGL 或 FreeRTOS)到項目中,即便你沒有顯式調用庫中的函數,編譯器和鏈接器仍然會處理該庫中的代碼,尤其是當庫中有全局變量、宏或初始化代碼時,編譯器和鏈接器可能會自動識別出某些依賴。
? ? 意思你不進行調用,編譯器也會把放進來的文件進行包含關系的依賴排查!!!
? ? 所以,所謂的移植成功,就把庫文件包含進來,單純的編譯就是來排除他們直接各種全局變量、宏或初始化的依賴關系,移植成功就是把這些依賴關系處理成功,也就是所謂的跑通!!