【问题标题】:ld can't find c fileld找不到c文件
【发布时间】:2009-04-21 09:35:35
【问题描述】:

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

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

【问题讨论】:

标签: c assembly linker ld


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 2017-10-23
      • 2021-05-07
      • 1970-01-01
      • 2011-05-24
      • 2018-10-20
      • 2021-12-21
      相关资源
      最近更新 更多