0

谁能提供任何见解或方法来调试为什么 ltdl 无法加载我的库?从部分 strace 输出中可以看出,它成功打开了库,然后报告file not found,然后继续成功加载另一个以相同方式构建的库。我该如何调试呢?我已经在谷歌上搜索了很长时间,但没有发现任何有用的调试方法。

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
4

1 回答 1

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文件不存在?这些文件可能会指定需要首先加载的依赖库。

于 2012-01-23T16:03:34.907 回答