why strong symbal not cover weak symbal?
Carmelo AMOROSO
carmelo.amoroso at st.com
Fri Nov 2 14:20:33 UTC 2012
On 02/11/2012 14.54, 风涯 wrote:
> first an example
>
> libmya.c
> [code]
> #include<stdio.h>
> void PrintA()
> {
> printf("A\n");
> }
>
> __attribute__ ((weak))
> void myfunc()
> {
> printf("myfunc in libmya\n");
> }
> [/code]
>
>
> libmyb.c
> [code]
> #include<stdio.h>
> void PrintB()
> {
> printf("B\n");
> }
> void myfunc()
> {
> printf("myfunc in libmyb\n");
> }
> [/code]
>
> main.c
>
> [code]
> void main()
> {
> PrintA();
> PrintB();
> myfunc();
> }
> [/code]
>
>
> Makefile
> [code]
>
> CC=gcc
> ALL:main
> main:main.c libmya.so libmyb.so
> ${CC} main.c -L. -Wl,-rpath,. libmya.so libmyb.so -o main -g
> libmya.so:libmya.c
> ${CC} libmya.c -shared -fPIC -o libmya.so
> libmyb.so:libmyb.c
> ${CC} libmyb.c -shared -fPIC -o libmyb.so
> clean:
> rm main *.so *.o *.s
> [/code]
>
> the result is:
> A
> B
> myfunc in libmya
>
> why the strong symbal int libmyb.so didn't cover the weak one in libmya.so?
>
> I know it is becuase the _function dl_find_hash in the dl-hash.c do nothing
> with the weak symbal . But I think if there is a strong one,we should
> choose it rather than weak one.
And this is the correct behaviour, and the only one supported in uClibc.
glibc behaves similarly, except if you set LD_DYNAMIC_WEAK.
weak are meaningful only for static libraries, not shared.
See, for example: http://sourceware.org/bugzilla/show_bug.cgi?id=3946.
Regards,
Carmelo
>
> sorry for my bad English...
> _______________________________________________
> uClibc mailing list
> uClibc at uclibc.org
> http://lists.busybox.net/mailman/listinfo/uclibc
>
>
More information about the uClibc
mailing list