2012-01-22 20 views
0

ltdlがライブラリをロードできない理由をデバッグするための洞察や方法はありますか? partial 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のことでしょう。おそらく2人のうちの1人に依存性がないのでしょうか?

また(詳細はman ld.soを参照)export LD_DEBUG=allを試してみたいことがあります。 server/modules/内のファイルは、実際のlibtoolモジュールであれば

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

+0

私が必要としていたことをクールに感謝します。 18996:\tサーバ/モジュール/ smtp.so:エラー:シンボル検索エラー:未定義シンボル:_ZTI11CSMTPServer(致命的) すべてのモデルを同じディレクトリにシンボリックリンクしているため、何らかの理由でシンボリックリンクが.laファイルは機能しませんが、実際のファイルを指すか、またはそのディレクトリにコピーすると、smtpファイルをロードできません。不足しているシンボルは、ユーティリティの.aファイルを使用してプログラムを分割し、親プログラムがコンパイルされた時点でそのシンボルを明白に残していることと関連があります。 –

関連する問題