Strange Compiler Error: "undefined reference to 'main'"

zeboidlund picture zeboidlund · Aug 29, 2011 · Viewed 10.1k times · Source

Could someone tell me what this means?

/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5.2/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [program] Error 1

My make file looks like as follows:

program : main.o render.o screenwriter.o
    g++ -o main.o render.o screenwriter.o -lSDL

main.o : main.cpp render.h screenwriter.h
    g++ -c main.cpp render.h screenwriter.h -lSDL

render.o : render.h render.cpp
    g++ -c render.h render.cpp -lSDL

screenwriter.o : screenwriter.h screenwriter.cpp
    g++ -c screenwriter.h screenwriter.cpp -lSDL

clean:
    rm program main.o render.o screenwriter.o -lSDL

Thanks.

Answer

fvu picture fvu · Aug 29, 2011

That first rule should be

program : main.o render.o screenwriter.o
    g++ -o program main.o render.o screenwriter.o -lSDL

Assuming that you want to link main.o render.o screenwriter.o into an executable called program

Also, in the compile steps ( -c ) the -lDSL bit is not useful, it's a linker instruction.