【发布时间】:2014-08-18 03:37:38
【问题描述】:
我无法合并我的 kernel_entry.asm 和 main.c。我的 main.c 调用了一个 asm 函数 Sum。 nasm 和 gcc 都编译各自的文件。但是,链接器给出了错误。
kernel_entry.asm:
[bits 32]
[extern _start]
[global _Sum]
....
_Sum:
push ebp
mov ebp, esp
mov eax, [ebp+8]
mov ecx, [ebp+12]
add eax, ecx
pop ebp
ret
main.c:
....
extern int Sum();
void start() {
....
int x = Sum(4, 5);
....
}
为了编译源文件,我使用以下命令:
nasm kernel_entry.asm -f win32 -o kernel_entry.o
gcc -ffreestanding -c main.c -o main.o
....
ld -T NUL -o kernel.tmp -Ttext 0x1000 kernel_entry.o main.o mem.o port_in_out.o screen.o idt.o
链接器给出以下错误:main.o:main.c:(.text+0xa82): undifened reference to 'Sum'。我尝试了一切,但找不到任何解决方案。当我从 main.c 中删除 asm 函数调用时,它可以工作。
【问题讨论】:
-
谢谢,但
gcc -m32对我不起作用。我正在使用 Windows 计算机。也许这就是原因? -
使用
nasm kernel_entry.asm -f elf -o kernel_entry.o为我做到了 -
@rfernandes 你应该写出你的 cmets 的答案。
-
@Mr.32 谢谢提醒,完成