我希望有人能够帮助解决我认为是链接器脚本问题的问题.
在添加对新函数的调用后,我遇到了一个奇怪的问题.没有函数调用,我的目标文件链接正确,但是,添加了新的函数调用,我得到一个未定义的引用来自另一个目标文件的符号(我已经验证它实际上是使用objdump存在).
同样奇怪的是,在函数调用存在的情况下,如果我首先使用ld -r链接所有目标文件(以提供可重定位的输出)然后使用我的链接脚本,则没有未定义的引用,但似乎链接脚本被忽略,因为输出二进制文件没有正确的入口点.
我的(交叉编译器)ld版本:
> i586-elf-ld --version
GNU ld(GNU Binutils)2.20.1.20100303
我试图证明存在"缺失"符号:
> i586-elf-ld -T link.ld -o kernel32.bin kernel_loader.o main.o stdio.o common.o gdt.o gdt.bin -y putch
Run Code Online (Sandbox Code Playgroud)main.o: reference to putch stdio.o: definition of putch main.o: In function `main': main.c:(.text+0x1f): undefined reference to `putch'
NB(当我生成此输出时,我使用gdt.bin的文件名作为nasm编译的汇编程序,它只是另一个.o文件,真的)
我可以在相应的目标文件中看到"缺失"的符号:
> i586-elf-objdump -ht stdio.o
stdio.o:文件格式elf32-i386Run Code Online (Sandbox Code Playgroud)Sections: Idx Name Size VMA LMA File off Algn 0 .text 000002f9 00000000 00000000 00000034 2**2 CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE 1 .data 0000000c 00000000 00000000 00000330 2**2 CONTENTS, …