2012-01-22 52 views
0

任何人都可以提供任何见解或方式来调试为什么ltdl无法加载我的库吗? 正如您从部分strace输出中可以看到的,它成功地打开了库,然后报告file not found,然后继续前进以成功加载以相同方式构建的另一个库。我怎样才能调试呢?我一直在谷歌搜索,并没有发现有用的调试方法。libtool无法加载库

open("server/modules/smtp.la", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("server/modules/smtp.so", O_RDONLY) = 3 
getcwd("/home/david/Documents/workspace/dvnmon", 128) = 39 
1327209900.751672 3602 Failed to open server/modules/smtp: file not found 
open("server/modules/snmp.la", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("server/modules/snmp.so", O_RDONLY) = 3 
getcwd("/home/david/Documents/workspace/dvnmon", 128) = 39 
open("/etc/ld.so.cache", O_RDONLY)  = 3 
open("/usr/lib64/libnetsnmp.so.15", O_RDONLY) = 3 
open("/usr/lib64/libcrypto.so.1.0.0", O_RDONLY) = 3 
open("/lib64/libz.so.1", O_RDONLY)  = 3 
1327209900.800507 3602 Plugin CSNMPMonitor interface version 0.1 loaded 

回答

3

lt_dlopen()报告FILE_NOT_FOUND时,它无法加载动态库。即使文件存在,也可能发生这种情况。

我首先比较ldd server/modules/smtp.so的输出和ldd server/modules/snmp.so的输出。也许其中一个缺少依赖关系?

您可能还想尝试export LD_DEBUG=all(详情请参阅man ld.so)。

此外,从您的问题中不清楚server/modules/中的文件是否实际上是Libtool模块。如果是,为什么不存在*.la文件?这些文件可能指定需要首先加载的相关库。

+0

酷感谢thats正是我所需要的。 18996:\t服务器/模块/ smtp.so:错误:符号查找错误:未定义符号:_ZTI11CSMTPServer(fatal) 找不到.la文件,因为Im将所有模型符号链接到同一目录,并且出于某种原因符号链接.la文件不起作用,但如果我将它指向真实文件或将其复制到该目录中,它仍然无法加载smtp文件。缺少的符号是我的一个工具,它与使用实用程序.a文件分离程序有关,它明显在编译父程序时将符号留出 –