You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stdcxx.apache.org by Eric Lemings <le...@roguewave.com> on 2006/06/05 21:04:29 UTC
FW: Mac OS X Link Errors
-----Original Message-----
From: Martin Sebor
Sent: Monday, June 05, 2006 10:44 AM
To: Eric Lemings
Subject: Re: Mac OS X Link Errors
Interesting. Could you forward this to the list for the record?
Thanks
Martin
Eric Lemings wrote:
>
>
http://gcc.gnu.org/onlinedocs/gcc-4.0.3/gcc/Vague-Linkage.html#Vague-Lin
kage
>
> "When used with GNU ld version 2.8 or later on an ELF system such as
> GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
> these constructs will be discarded at link time. This is known as
> COMDAT support.
>
> On targets that don't support COMDAT, but do support weak symbols, GCC
> will use them. This way one copy will override all the others, but the
> unused copies will still take up space in the executable.
>
> For targets which do not support either COMDAT or weak symbols, most
> entities with vague linkage will be emitted as local symbols to avoid
> duplicate definition errors from the linker. This will not happen for
> local statics in inlines, however, as having multiple copies will
> almost certainly break things."
>
> It appears that the linker on Mac OS X is the BSD version, not the GNU
> version which is why the first option happens on other GCC 4.0
> platforms with STDCXX. I'll have to take a closer look at the other
two options.
>
> Brad.
>
>
>
------------------------------------------------------------------------
> *From:* Eric Lemings
> *Sent:* Friday, June 02, 2006 11:43 AM
> *To:* Martin Sebor
> *Subject:* Mac OS X Link Errors
>
>
> What do you make of this?
>
> gcc -c -I/Users/elemings/Work/stdcxx/include/ansi -D_RWSTDDEBUG
> -D_RWSTD_USE_CONFIG -I/Users/elemings/Work/stdcxx/include
> -I/Users/elemings/Build/stdcxx/include -pedantic -nostdinc++ -g
-W
> -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long
> -Wcast-align -fPIC /Users/elemings/Work/stdcxx/src/wctype.cpp
> gcc assert.o atomic-cxx.o bitset.o catalog.o codecvt.o
> collate.o ctype.o ctype_bits.o exception.o export.o facet.o file.o
> instance.o ios.o ios_bits.o iostore.o iostream.o iso2022.o
limits.o
> limits_bits.o locale_bits.o locale_body.o locale_classic.o
> locale_combine.o locale_core.o locale_eq.o locale_global.o
> locale_name.o memattr.o memory.o messages.o num_get.o num_put.o
> punct.o random.o setlocale.o string.o strstream.o strtol.o
> ti_collate.o ti_filebuf.o ti_insert_dbl.o ti_insert_int.o
> ti_insert_ptr.o ti_ios.o ti_istream.o ti_messages.o ti_money_get.o
> ti_money_put.o ti_moneypunct.o ti_num_get.o ti_num_put.o
> ti_numpunct.o ti_ostream.o ti_streambuf.o ti_string.o
ti_stringbuf.o
> ti_time_get.o ti_time_put.o ti_wcollate.o ti_wfilebuf.o
> ti_winsert_dbl.o ti_winsert_int.o ti_winsert_ptr.o ti_wios.o
> ti_wistream.o ti_wmessages.o ti_wmoney_get.o ti_wmoney_put.o
> ti_wmoneypunct.o ti_wnum_get.o ti_wnum_put.o ti_wnumpunct.o
> ti_wostream.o ti_wstreambuf.o ti_wstring.o ti_wstringbuf.o
> ti_wtime_get.o ti_wtime_put.o time_get.o time_put.o tmpbuf.o
> typeinfo.o valarray.o vecbool.o version.o wcodecvt.o wctype.o
> -lsupc++ -lgcc_eh -o
/Users/elemings/Build/stdcxx/lib/libstd.so.4.2.0
> /usr/bin/ld: multiple definitions of symbol vtable for
> std::bad_exception
> exception.o definition of vtable for std::bad_exceptionin section
> (__DATA,__const)
>
/usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libsupc++.a(eh_exception.
o)
> private external definition of vtable for std::bad_exceptionin
> section (__DATA,__const)
> /usr/bin/ld: multiple definitions of symbol vtable for
std::bad_alloc
> memory.o definition of vtable for std::bad_allocin section
> (__DATA,__const)
>
/usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libsupc++.a(new_handler.o
)
> private external definition of vtable for std::bad_allocin section
> (__DATA,__const)
> collect2: ld returned 1 exit status
> make[2]: *** [/Users/elemings/Build/stdcxx/lib/libstd.so] Error 1
> make[1]: *** [lib] Error 2
> make: *** [libstd] Error 2
> I've tried without -lsupc++, without -lgcc_eh, without both of
> them... Nothing works.
>
> Brad.
>
>