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

HaggarTheHorrible picture HaggarTheHorrible · May 3, 2010 · Viewed 44.3k times · Source

I'm working on a C project with around 30 source files (.c). I'm building this project on a 32 bit micro-controller(i.MX515) running on Ubuntu using GNU tools.

The compilation phase completes successfully, however when the linking process starts I get this error (For full error at the end of the quesiton):

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

I have a main() function which does a simple printf().

My Makefile line for linking, looks like this.

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)

Help!!!

Regards

Vikram


Complete linking error

/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

Answer

KevinDTimm picture KevinDTimm · May 3, 2010

final depends on main.o (and a bunch of others), but, your makefile is taking all the 'others' and outputting them in main.o (that's what -o does in most compilers)

edit your link line to : -o final $(OBJDIR)/main.o