Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 May 1999 23:57:30 +0100
From:      Mark Ovens <marko@uk.radan.com>
To:        Doug White <dwhite@resnet.uoregon.edu>
Cc:        FreeBSD-questions <questions@FreeBSD.ORG>
Subject:   Re: gcc differences between aout & ELF
Message-ID:  <19990512235730.B258@marder-1>
In-Reply-To: <Pine.BSF.4.03.9905121137220.23756-100000@resnet.uoregon.edu>; from Doug White on Wed, May 12, 1999 at 11:38:32AM -0700
References:  <19990506213653.B255@marder-1> <Pine.BSF.4.03.9905121137220.23756-100000@resnet.uoregon.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, May 12, 1999 at 11:38:32AM -0700, Doug White wrote:
> What FreeBSD version are you on?
> 

3.1-R, from the CDs

> On Thu, 6 May 1999, Mark Ovens wrote:
> 
> > The problem is that symbols defined in libstdc++ are being redefined
> > in libgcc. This is the sort of output I'm getting (the linker is
> > run from a script, not a Makefile):
> > 
> > linking PCOMPILE for OPL/autopcc
> > /usr/local/lib/gcc-lib/i386-unknown-freebsd3.0/2.8.1/libgcc.a(exception.o): In function `bad_cast type_info function':
> > 
> > /tmp/usr/ports/lang/gcc28/work/gcc-2.8.1/./cp/exception.cc(.text+0x0): multiple definition of `terminate(void)'
> > 
> > /usr/lib/libstdc++.a(exceptioni.o)(.text+0x128): first defined here
> > 
> > /usr/libexec/elf/ld: Warning: size of symbol `terminate__Fv' changed from 65 to 12 in exception.o
> > 
> > and:
> > 
> > /usr/marko/libopt/libutc.a(utc_string.o): In function `UTC_String::operator<<(short const &)':
> > utc_string.o(.text+0x13d5): undefined reference to `ios virtual table'
> > utc_string.o(.text+0x1427): undefined reference to `ostream::ios virtual table'
> > utc_string.o(.text+0x1431): undefined reference to `ostrstream::ios virtual table'
> 
> This was a bug introduced into -current for a short while, then reverted
> when it broke all C++ libraries.  
> 

I've fixed the first set of errors (functions in libstdc++ being
redefined in libgcc). In another thread (about egcs) there was a
fix for this by renaming libstdc++ and making a symlink to libgcc.
Another fix I found was to remove exceptioni.o from libstdc++ using
``ar -d libstdc++.a exceptioni.o''.

The second set of errors (undefined references to ios virtual table)
were fixed by compiling with ``-fno-inline''. However, this flag
introduced a new error:

undefined reference to `ostream & operator<<<int>(ostream &, smanip<int> const &)

which occurs now in 3 files (once each). It seems to be caused by
the use of ``setprecision(n)''. This is the function:

FOO_BAR& FOO_BAR::operator<<( 
    const double &d
    )
    {
    char    buf[200];
 
    ostrstream  stream(buf, 200);
 
    stream << setprecision(15) << d << '\0';
 
    *this += buf;
 
    return *this;
    }

Any ideas?

> > Does any of the above tell you anything? and, more importantly,
> > can you suggest a fix?
> 
> 'make clean'?
> 

What exactly does that do?

Well, thanks again for all your help. I'm nearly there now :-)

> Doug White                               
> Internet:  dwhite@resnet.uoregon.edu    | FreeBSD: The Power to Serve
> http://gladstone.uoregon.edu/~dwhite    | www.freebsd.org
> 
> 

-- 
      FreeBSD - The Power To Serve http://www.freebsd.org
      My Webpage http://www.users.globalnet.co.uk/~markov
_______________________________________________________________
Mark Ovens, CNC Apps Engineer, Radan Computational Ltd. Bath UK
CAD/CAM solutions for Sheetmetal Working Industry
mailto:marko@uk.radan.com                  http://www.radan.com



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19990512235730.B258>