移植的本质是什么
有断时间我就在想,为什么freertos,lvgl等等的移植都是把库文件放进来,直接点击编译,然后把bug都处理完成就移植成功了,为什么呢?
明明我一个函数都没调用,为什么会有一堆错误,莫名其妙又能修改好,就移植成功了。
这里涉及到一个知识,在 C/C++ 中,编译器会将每个源文件编译为目标文件(.o
或 .obj
),然后链接器会将这些目标文件和库文件链接成最终的可执行文件。当你添加了一个库(比如 LVGL 或 FreeRTOS)到项目中,即便你没有显式调用库中的函数,编译器和链接器仍然会处理该库中的代码,尤其是当库中有全局变量、宏或初始化代码时,编译器和链接器可能会自动识别出某些依赖。
意思你不进行调用,编译器也会把放进来的文件进行包含关系的依赖排查!!!
所以,所谓的移植成功,就把库文件包含进来,单纯的编译就是来排除他们直接各种全局变量、宏或初始化的依赖关系,移植成功就是把这些依赖关系处理成功,也就是所谓的跑通!!