0

我有一个汇编文件和 ac 文件编译为 .o 文件(start.o 和 main.o),并试图将它们与 ld 链接。我正在使用这个命令:

ld -T link.ld -o kernel.bin start.o main.o

其中 link.ld 是一个链接器脚本,但是当我运行它时,我得到了这个错误:

start.o:start.o:(.text+0x2d): undefined reference to `_main'

在汇编文件中,我用这个函数调用 c 文件:

stublet:
extern _main
call _main

jmp $

任何人都可以看到有什么问题吗?

4

2 回答 2

3

一些编译器(比如 Linux 的 GCC)默认不添加_到 C 库导出中。尝试nm main.o查看实际的参考名称。它可能是main而不是_main

于 2009-04-21T09:47:56.253 回答
0

一些链接器对目标文件或库出现在命令行上的顺序很敏感——尝试交换两个目标文件的顺序。

我还应该指出,C 标准不保证 main() 是一个函数——事实上,C 程序明确禁止调用 main。

于 2009-04-21T09:50:37.323 回答