Hi, all:

I got a strange result when using dlsym to find a symbol in a shared library.

uClibc commit: f22cca4722fa66e424562e69f4afa2bca0af871d after v0.9.33

Assume that:

  1) The symbol "print_sym" is defined in both liba.so and libb.so;

  2) Libd.so depends on liba and libb in order: $(CC) -L./ -la -lb 
-Wl,-rpath=./ -shared -fPIC -o libd.so libd.c

and then, I passed the handle of libd.so to dlsym() to find the "print_sym" 
symbol:

  pHandle = dlopen("./libd.so", RTLD_LAZY);

  func = dlsym(pHandle, "print_sym");

thus, I got the "print_sym" symbol in libb.so.          // Does it search 
symbol in this order: libd.so -> libb.so -> liba.so ?

However, when using glibc or eglibc, I would get this symbol in liba.so!        
// This looks like the normal behavior

More over, it looks like that uClibc-0.9.32 has the same behavior for dlsym 
with glibc and eglibc.

So, I doubt whether this is a bug or just a difference between different 
version,

and what the correct searching order is.

Does anybody have some ideas ?

Thanks!

_______________________________________________
uClibc mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/uclibc

Reply via email to