This is the mail archive of the
cygwin@sourceware.cygnus.com
mailing list for the Cygwin project.
Re: how to avoid mulitple definitions of STL free_list, start_free, end_free,heap_size
- To: sreuss at asc dot on dot ca
- Subject: Re: how to avoid mulitple definitions of STL free_list, start_free, end_free,heap_size
- From: Mumit Khan <khan at xraylith dot wisc dot edu>
- Date: Tue, 09 Dec 1997 02:15:19 -0600
- Cc: gnu-win32 at cygnus dot com
Stephen Reuss <sreuss@asc.on.ca> writes:
> First up, I dealt with the pair structure redeclaration issue by
> renaiming the pair structure in the third party code to mespair. If
> anyone has ideas of how I can force compiler to choose one declaration
> or another, please let me know.
You can't. No C++ code written in the last 3, especially the last 2, years
should've used 'struct pair', unless the author(s) was simply hoping that
STL will never make it into the standard ;-)
>
> The new problem regards the:
> multiple definition of `__default_alloc_template<false, 0>::start_free
> ::end_free
> ::heap_size
> ::free_list
>
> in linking a C++ program. The link command is as follows:
>
Are you using the b18 C++ compiler? If so, you have other bugs to worry
about as well (miscompiled code when using multiple virtual bases and such
is just one example). If you are, then I strongly suggest you move to a
newer C++ compiler, such as egcs-1.00 or even the newer FSF snapshots.
For a binary distribution of egcs-1.00, check the URL below.
Now that my obligatory plug is out the way, the problem is that the older
versions of C++ front-end simply couldn't handle static template data
members properly, and hence the problem. I can suggest a few workarounds:
1. Use -fno-implicit and instantiate everything yourself. I cover a bit
about explicit instantiation in my (now grossly outdated) STL Newbie
guide (URL below). This is the only portable (ie., something that'll
work on *all* platforms) way to do templates with gcc, even with the
newest and greatest egcs release.
2. Comment out the default_alloc_template definition in alloc.h (or
whatever file it's in in $prefix/include/g++) and supply the
definition yourself in one of your object files.
3. Did I mention that you should upgrade your compiler ;-)
EGCS : http://www.xraylith.wisc.edu/~khan/software/gnu-win32/
STL : http://www.xraylith.wisc.edu/~khan/software/stl/STL.newbie.html
Regards,
Mumit -- khan@xraylith.wisc.edu
http://www.xraylith.wisc.edu/~khan/
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request@cygnus.com" with one line of text: "help".