ld找不到c文件

时间:2009-04-21 09:35:35

标签: c assembly linker ld

我有一个汇编文件和一个编译成.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 $

任何人都可以看到什么是错的?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

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