When making object files from multiple source files the main function seems to
be thrown away or something. When compiling the .c into .o files seperately,
and then linking that it works. It used to work with at least gcc 3.4.3.

Minimal testcase:

$ cat main.c 
int main(void)
{
        return 7;
}

$ make
cc -o test.o -c  main.c empty.c
cc -s  test.o   -o test
/usr/lib/gcc/i686-pc-linux-gnu/4.0.2/../../../crt1.o: In function `_start':
: undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [test] Error 1

$ objdump -t test.o 

test.o:     file format elf32-i386

SYMBOL TABLE:
00000000 l    df *ABS*  00000000 empty.c
00000000 l    d  .text  00000000 .text
00000000 l    d  .data  00000000 .data
00000000 l    d  .bss   00000000 .bss
00000000 l    d  .note.GNU-stack        00000000 .note.GNU-stack
00000000 l    d  .comment       00000000 .comment

$ cat empty.c

$ cat Makefile 

default: test

test.o: main.c empty.c
        cc -o test.o -c main.c empty.c

clean:
        rm -f *.o test


-- 
           Summary: undefined reference to main when linking an object file
                    generated from multiple .c files
           Product: gcc
           Version: 4.0.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: indan at nul dot nu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24241

Reply via email to