Related articles |
---|
Weak binding of member functions vinaynkaranth@yahoo.com (2004-07-11) |
Re: Weak binding of member functions sandra@frogsonice.com (Sandra Loosemore) (2004-07-13) |
From: | Sandra Loosemore <sandra@frogsonice.com> |
Newsgroups: | comp.compilers |
Date: | 13 Jul 2004 22:05:04 -0400 |
Organization: | Frogs On Ice, http://www.frogsonice.com/ |
References: | 04-07-007 |
Keywords: | linker |
Posted-Date: | 13 Jul 2004 22:05:04 EDT |
vinaynkaranth@yahoo.com (Vinay) writes:
> My question is regarding "weak external symbols". Consider the
> following eg.
>
> class test
> {
> public :
> int func1(void); {cout <<"func1";}
> int func2(void);
> }
>
> int test :: func2(void)
> {
> cout <<"func2";
> }
>
> I compiled this piece of code using the CC for PPC processor, version
> "cygnus-2.7.2-960126 egcs-971225". The readelf output shows that the
> func1 has weak binding and func2 has normal global binding. Please let
> me know why is the function whos implementation is with in the class
> definition has weak binding and the one with its implementatin outside
> the class definition has normal global binding.
C++ class declarations can appear in multiple compilation units.
(They typically go in .h files that are #included wherever the class
is referenced.) In your example, this means that the definition of
func1 can appear in multiple compilation units as well, so the
compiler has to emit it as a weak symbol to prevent the linker from
complaining about it as a multiply-defined symbol. OTOH, it's a real
error if there are multiple definitions of a non-inline function like
func2 present.
-Sandra
Return to the
comp.compilers page.
Search the
comp.compilers archives again.