项目编译器从 gcc9.3 切换到 clang11 ,原有的 drivers/pci 目录下有几个文件编译不过,于是用原本的编译器编译后拷贝过来,想着执行 make 时,这个文件夹已被编译过,就不会再被编译,结果 pci 文件夹再次被编译,继续报错。
ld.lld: error: undefined symbol: pci_find_bus
>>> referenced by pci.c:40 (kernel/arch/arm64/kernel/pci.c:40)
如何让新编译器不再编译 pci 目录,同时执行链接时,能找到 pci 对应的.o 文件中的符号?
1
pagxir 2023-09-01 14:03:38 +08:00 via Android
去好好解决报错。这种取巧办法只会让 bug 隐藏到运行时。内核数据结构的内存布局依赖于编译器,一个 kernel 是不允许用两个不同的编译器去编译的,除非你确定内存布局不会变。
|
2
NessajCN 2023-09-01 14:36:22 +08:00
你问得是个 xy 问题。
不要碰到解决不了的疑问先自己想当然地找个解决方法,搞不定又来问这个解决方法的解决方法 你直接把你换编译器之后编译不过的原因发上来才是正确的求助方法 |