我有一个汇编文件和一个编译成.o文件(start.o和main.o)的c文件,并尝试将它们与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 $
任何人都可以看到什么是错的?
答案 0 :(得分:3)
某些编译器(如GCC for Linux)默认情况下不会将_
添加到C库导出中。请尝试nm main.o
查看实际的参考名称。它可能是main
而不是_main
。
答案 1 :(得分:0)
某些链接器对目标文件或库在命令行中出现的顺序很敏感 - 尝试交换两个目标文件的顺序。
我还应该指出,C标准并不保证main()是一个函数 - 事实上,C程序被明确禁止调用main。