Blake Corbin
Blake Corbin

Reputation: 41

C program no longer compiles in Ubuntu

I made a program in C and I get these errors when I compile using gcc. I did not use to get them until recently and my program has not changed.

In function `_fini':
(.fini+0x0): multiple definition of `_fini'
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o:(.fini+0x0): first   defined here
slots: In function `__data_start':
(.data+0x0): multiple definition of `__data_start'
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o:(.data+0x0): first   defined here
slots: In function `__data_start':
(.data+0x8): multiple definition of `__dso_handle'
/usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o:(.data+0x0): first defined here
slots:(.rodata+0x0): multiple definition of `_IO_stdin_used'
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o:(.rodata.cst4+0x0):   first defined here
slots: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o:(.text+0x0): first   defined here
slots: In function `_init':
(.init+0x0): multiple definition of `_init'
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o:(.init+0x0): first   defined here
/tmp/ccIlRWIn.o: In function `main':
slots.c:(.text+0x0): multiple definition of `main'
slots:(.text+0xe4): first defined here
/usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o:(.dtors+0x0): multiple definition of  `__DTOR_END__'
slots:(.dtors+0x8): first defined here
/usr/bin/ld: error in slots(.eh_frame); no .eh_frame_hdr table will be created.
collect2: ld returned 1 exit status

Upvotes: 4

Views: 4666

Answers (3)

ollo
ollo

Reputation: 25350

Seems you have more than one main and some other functions in your code. Make sure you didn't include multiple definitions of main more than once in your makefile.

Upvotes: 0

R.. GitHub STOP HELPING ICE
R.. GitHub STOP HELPING ICE

Reputation: 215221

You forgot -o before the output filename so the linker is trying to use your old executable as input.

Upvotes: 6

sr01853
sr01853

Reputation: 6121

You could have probably defined an extern variable in a header file and include it in another file.

For example,

extern int _fini = 1;  // declared in a.h

Say in a1.c or a2.c

#include "a.h"   // _fini again defined in a1.c or a2.c 

Upvotes: 0

Related Questions