函数`_start':init.c :(。text + 0x30):对'main'的未定义引用

时间:2010-05-03 12:49:09

标签: c linker undefined-reference

我正在开发一个包含大约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

2 个答案:

答案 0 :(得分:8)

最终取决于main.o(以及其他一些),但是,你的makefile正在接受所有'其他'并在main.o中输出它们(这是-o在大多数情况下所做的)编译器)

修改您的链接行:-o final $(OBJDIR)/main.o

答案 1 :(得分:3)

链接器无法找到其中定义了main()的源的目标代码。可能它没有编译。检查其中包含main()的30个文件中的哪一个被编译为.OBJ。