【问题标题】:In function `_start': init.c:(.text+0x30): undefined reference to `main'在函数`_start'中:init.c:(.text+0x30): undefined reference to `main'
【发布时间】:2011-02-15 00:44:17
【问题描述】:

我正在开发一个包含大约 30 个源文件 (.c) 的 C 项目。我正在使用 GNU 工具在 Ubuntu 上运行的 32 位微控制器 (i.MX515) 上构建这个项目。

编译阶段成功完成,但是当链接过程开始时,我收到此错误(对于问题末尾的完整错误)

In function `_start': init.c:(.text+0x30): undefined reference to `main'

我有一个main() 函数,它执行一个简单的printf()

用于链接的 Makefile 行,如下所示。

final: $(OBJDIR)/main.o $(OBJDIR)/TchClaKnn_BuildKdtreeInt.o $(OBJDIR)/TchClaKnn_FreeKdtreeInt.o.... (Go upto 30 files like this)
    @echo ".Linking"
    $(CC) $(LFLAGS) -o $(OBJDIR)/main.o $(OBJDIR)/TchClaKnn_BuildKdtreeInt.o $(OBJDIR)/TchClaKnn_FreeKdtreeInt.o..... (Go upto 30 files like this)

求救!!!

问候

维克拉姆


完全链接错误

/usr/lib/gcc/arm-linux-gnueabi/4.3.3/../../../crt1.o: In function `_start':
init.c:(.text+0x30): undefined reference to `main'
collect2: ld returned 1 exit status
make[1]: *** [final] Error 1
make[1]: Leaving directory `/home/ubuntu/Documents/Project/IMX_Project_v1'
make: *** [all] Error 2

【问题讨论】:

  • main() 是否在 main.c 中(编译为 main.o)?

标签: c linker undefined-reference


【解决方案1】:

final 取决于 main.o (以及其他一些),但是,您的 makefile 正在获取所有“其他”并在 main.o 中输出它们(这就是 -o 在大多数情况下所做的编译器)

将您的链接行编辑为:-o final $(OBJDIR)/main.o

【讨论】:

  • 嗨凯文,是的!我的makefile是错误的,我介绍了你的建议并且它起作用了。我经常犯这个错误,当我浏览我的一个非常旧的makefile时,我发现我在链接命令行中有 - "$(CC) $(LFLAGS) -o $@"。好吧,在这两种情况下,最终都会生成。谢谢!!!
  • 不客气,这就是为什么另一双眼睛几乎总是能立即发现问题——他们不知道“跳过”什么;)
【解决方案2】:

链接器找不到定义了 main() 的源代码的目标代码。可能它没有被编译。检查包含 main() 的 30 个文件中的任何一个是否正在编译为 .OBJ。

【讨论】:

  • 嗨 RM,是的,你是对的。我的 main.c 的目标文件没有生成,因为我的 makefile 中有一个错误,我修复了它,现在我的 final 正在生成。谢谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
相关资源
最近更新 更多