ld找不到.o]中的符号>

问题描述 投票:0回答:1

因此,我有两个文件:kernel.o(操作系统的内核)和libbios.o(将bios中断移植到c),而ld告诉我:"undefined reference to 'printchar'"

我用objdump -t检查了libbios.o,这是结果:

source/libbios.o:     file format elf32-i386

SYMBOL TABLE:
00000000 l    df *ABS*  00000000 include/libbios.asm
00000000 l    d  .TEXT  00000000 .TEXT
00000000 l       .TEXT  00000000 printchar

printchar存在于.o文件中。

这是libbios.asm:

printchar:
MOV AH,0x0e
MOV AL,[ESP+4]
INT 0X10
RET

和kernel.c:

#define TRUE 1
extern void printchar(char l);
void main(){
  printchar('a');
fin:
   asm volatile ("hlt");
   goto fin;
 }

和用于编译kernel.o,libbios.o并将其链接的命令行:

i686-elf-gcc kernel.c -c -B ../i686 -o cpartofkernel.o -m16 -masm=intel  -O0
nasm -O0 -felf include/libbios.asm -o libbios.o

i686-elf-ld --oformat binary libbios.o cpartofkernel.o  -o kernel.bin -Ttext 0x20000000 -emain

这也是实模式代码,因为我在Linux中找不到任何原始二进制链接程序,所以必须使用elf。

因此,我有两个文件:kernel.o(操作系统的内核)和libbios.o(将bios中断移植到c),而ld告诉我:“对'printchar'的未定义引用”。我用...

c assembly nasm linker-errors
1个回答
0
投票

通过在libbios.asm顶部添加global printchar解决。

© www.soinside.com 2019 - 2024. All rights reserved.