On 2014/9/24 15:34, Joakim Tjernlund wrote: > "uClibc" <[email protected]> wrote on 2014/09/24 05:51:08: >> >> Hi, >> >> After I using the dlopen some libs successfully, I tried to use dlsym to > find the symbol. >> >> E.g. >> >> The open order is (liba => libb => libc): >> liba = dlopen("./liba.so", RTLD_LAZY); //liba.so has the aSymbol >> libb = dlopen("./libb.so", RTLD_LAZY); //libb.so has the bSymbol >> libc = dlopen("./libc.so", RTLD_LAZY); //libc.so has the cSymbol >> >> Use dlsym to find the symbol: >> bSymbol = dlsym(liba, "bSymbol")); //we can find the bSymbol and > cSymbol via liba >> cSymbol = dlsym(liba, "cSymbol")); >> aSymbol = dlsym(libb, "aSymbol")); //but, we can not find the > aSymbol via libb or libc >> aSymbol = dlsym(libc, "aSymbol")); >> >> cSymbol = dlsym(libb, "cSymbol")); //we can find the cSymbol via > libb >> bSymbol = dlsym(libc, "bSymbol")); //but, we can not find the > bSymbol via libc >> >> It looks like that we can find all the following symbols via the first > opened handle >> and find all the following symbols except first opened symbols via the > second opened handle, and so on. >> >> Is it a bug or it supposed to act like that ? > > I guess this is related to your dependencies: How does lib{a,b,c} depend > on each other? > Do a "readelf -d <lib> | grep NEEDED" and post the result. > > Jocke > > Here is the results:
readelf -d libaa.so | grep NEEDED 0x00000001 (NEEDED) Shared library: [libc.so.0] readelf -d libbb.so | grep NEEDED 0x00000001 (NEEDED) Shared library: [libc.so.0] readelf -d libcc.so | grep NEEDED 0x00000001 (NEEDED) Shared library: [libc.so.0] Regards, Yang _______________________________________________ uClibc mailing list [email protected] http://lists.busybox.net/mailman/listinfo/uclibc
