Vinay wrote:
Hello
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.
...
Because the first one is inline function. Inline functions can (and
normally will) have multiple definitions in multiple translation units.
If the compiler decides to generate a normal (non-inline) body for this
function, it is more than likely that this body will be present in
multiple object files. Without normal binding that would result in an
error at linking stage. Weak binding directs the linker to choose one
body and discard the others, no error reported.
We had a relevant discussion a couple of days ago. See topic "Inlines
with external linkage".
BTW, this is a compiler-related question. It should be asked in a
compiler-related newsgroup, not here.
--
Best regards,
Andrey Tarasevich