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。たぶん、2つのうちの1つに依存関係がありませんか?

試してみることもできますexport LD_DEBUG=all(詳細man ld.soについてはを参照してください)。

また、のファイルserver/modules/が実際にLibtoolモジュールであるかどうかは、質問からは明らかではありません。もしそうなら、なぜ*.laファイルが存在しないのですか?これらのファイルは、最初にロードする必要がある依存ライブラリを指定する場合があります。

于 2012-01-23T16:03:34.907 に答える