multiple definition of `MAIN__'

Fabian Braennstroem f.braennstroem@gmx.de
Mon Dec 29 22:15:00 GMT 2003


On Mon, 2003-12-29 at 14:08, Toon Moene wrote:
> Fabian Braennstroem wrote:
> > Hello,
> > 
> > I am still trying to adjust an sgi-fortran-code to linux g77.  I get
> > this error-message:
> > 
> > main.o(.text+0x10c3): In function `MAIN__':
> > : undefined reference to `save_vel__'
> > main.o(.text+0x10d2): In function `MAIN__':
> > : undefined reference to `save_pres__'
> > collect2: ld returned 1 exit status
> > make: *** [calc_les_03_cube] Error 1
> > 
THAT is the correct error-message:

save_vel.o(.text+0xcd1): In function `MAIN__':
: multiple definition of `MAIN__'
main.o(.text+0x0): first defined here
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3/../../../../i686-pc-linux-gnu/bin/ld: Warning: size of symbol `MAIN__' changed from 5155 in main.o to 5 in save_vel.o
save_pres.o(.text+0x763): In function `MAIN__':
: multiple definition of `MAIN__'
main.o(.text+0x0): first defined here
collect2: ld returned 1 exit status
make: *** [calc_les_03_cube] Error 1

> Did you compile save_vel.f and save_pres.f with g77 as well ?
> 
> Note that g77 appends two underscores to the name of a subroutine that 
> contains an underscore.
> 
> If you just assume the loader will get save_vel and save_pres from a 
> library compiled with another compiler that doesn't append the extra 
> underscore, you're out of luck.
> 
> Anyways, don't assume g77-compiled code and code compiled with another 
> compiler on your SGI machine will work together flawlessly, even if the 
> loader phase succeeds ...
> 
Thanks for the tips, but all subroutines were compiled with g77 under
linux. 
When I copy the subroutine save_vel into 'main.f', the compilation works
fine. Why? Is it a 'makefile'-mistake?

Greetings!
Fabian



More information about the Gcc-help mailing list