Tarang Jain
Tarang Jain

Reputation: 35

Undefined reference to main, makefile

I have a simple structure as:

sample2Make$ ls

ADD DIV inc_print.h main.c makefile multiplication.o printer.o response.o subtraction.o addition.o division.o inc_resp.h main.o MUL printer.c response.c SUB

where ADD, DIV, SUB, MUL are subdirectories containing a source file for the operation and a header file. The makefile is:

app: addition.o subtraction.o multiplication.o division.o response.o
        gcc -o app response.o addition.o subtraction.o multiplication.o division.o

response.o: inc_resp.h inc_print.h response.c printer.c main.c
    gcc -c response.c printer.c main.c

addition.o: ADD/inc_add.h ADD/addition.c
    gcc -c ADD/addition.c

subtraction.o: SUB/inc_sub.h SUB/subtraction.c
    gcc -c SUB/subtraction.c

multiplication.o: MUL/inc_mul.h MUL/multiplication.c
    gcc -c MUL/multiplication.c

division.o: DIV/inc_div.h DIV/division.c
    gcc -c DIV/division.c

The header files just have declarations of their respective functions. Now after writing a command:

sample2Make$ make -f makefile

The output I am getting is:

gcc -c ADD/addition.c
gcc -c SUB/subtraction.c
gcc -c MUL/multiplication.c
gcc -c DIV/division.c
gcc -c response.c printer.c main.c
gcc -o app addition.o subtraction.o multiplication.o division.o response.o
/usr/lib/gcc/i686-linux-gnu/4.9/../../../i386-linux-gnu/crt1.o: In function `_start':
/build/buildd/glibc-2.21/csu/../sysdeps/i386/start.S:111: undefined reference to `main'
collect2: error: ld returned 1 exit status
makefile:3: recipe for target 'app' failed
make: *** [app] Error 1

Upvotes: 1

Views: 2713

Answers (1)

Sourav Ghosh
Sourav Ghosh

Reputation: 134396

You missed to include printer.o and main.o in the final compilation statement, and due to the missing reference to the main(), your compiler screams.

Your final statement should look like

gcc -o app addition.o subtraction.o multiplication.o division.o response.o printer.o main.o

Upvotes: 2

Related Questions