两个共享库liba.so和libb.so. liba.so使用libb.so.所有的c文件都使用-fPIC编译。链接使用共享。当我们在liba.so上调用dlopen时,它无法在libb.so中找到符号...我们得到“未定义符号”错误。我们可以在没有错误的情况下将libb.so加密。我们知道liba正在查找libb,因为我们没有找到文件未找到的错误。当我们删除libb.so时,我们收到文件未找到错误。我们尝试过 - 没有运气。使用共享库的Linux共享库未定义符号
任何想法????
噢。 gcc 4.1.2
更新:我们在链接liba时使用rpath,因此它可以找到libb。
LDD liba.so返回:
linux-gate.so.1 => (0xffffe000)
libb.so => ./libb.so (0xf6ef9000) <-------- LIBB
libutil.so.1 => /lib/libutil.so.1 (0xf6ef5000)
libdl.so.2 => /lib/libdl.so.2 (0xf6ef1000)
libm.so.6 => /lib/libm.so.6 (0xf6ec9000)
libpthread.so.0 => /lib/libpthread.so.0 (0xf6eb1000)
librt.so.1 => /lib/librt.so.1 (0xf6ea8000)
libc.so.6 => /lib/libc.so.6 (0xf6d62000)
/lib/ld-linux.so.2 (0x007d0000)
是它significat没有#在libb的端???
您的意思是:您创建了两个库(-fPIC -shared),liba.so和libb.so. liba.so与libb.so是有联系的(或应该是......)并使用它。在程序X中,你可以在libb.so上尝试dlopen,并且一切正常;另一个测试程序Y试图dlopen liba.so,但它失败了,但是你知道liba.so正确地发现libb.so,因为你试图删除libb.so并且引发了另一个问题...你正在使用dlopen的选项? – ShinTakezou 2010-06-07 17:20:51
你说得没错。现在我们不使用任何选项,因为dlopen是从我们无法控制的某个程序调用的。 – johnnycrash 2010-06-07 17:27:11
命令'ldd liba.so'说什么? – 2010-06-07 18:01:17