问题描述
项目编译器从 gcc9.3 切换到 clang11 ,原有的 drivers/pci 目录下有几个文件编译不过,于是用原本的编译器编译后拷贝过来,想着执行 make 时,这个文件夹已被编译过,就不会再被编译,结果 pci 文件夹再次被编译,继续报错。
尝试了 2 种办法:
- 利用 Makefile 确定文件是否需要被编译的时间关系:当目标文件比依赖文件新时,make 不再更新,故将 pci 用 gcc 编译后的所有文件,均用 touch 功能将时间改到 2000 年。再次执行编译时,该文件夹仍然被编译。
- 注释掉 drivers 目录下,Makefile 中的 objm+= /pci ,由于 kernel 中其他文件,如需要引用 pci 中的.o 文件中的符号文件,故链接出错。
ld.lld: error: undefined symbol: pci_find_bus
>>> referenced by pci.c:40 (kernel/arch/arm64/kernel/pci.c:40)
求助
如何让新编译器不再编译 pci 目录,同时执行链接时,能找到 pci 对应的.o 文件中的符号?