A certain engineer "COMPLEX"

開発メモ その190 .NET CoreでP/Invokeでの動的リンクに失敗したためLD_DEBUGで原因を調べてみる

Introduction


Windows上でOpenCVのstaticライブラリを作成し、自作のdllにリンクさせる方法。

.NETでP/Invokeするとよくあるエラーの一つが、Nativeのdllが見つからないというのがあります。
例えば下記のような。

たいていは、そのdllがないのではなく、そのdllが依存しているライブラリが存在しないというパターンが多い。
Windowsの場合はDepenecyWalkerとかで割と簡単に原因がわかる。
OSXなら、otool -L、Linuxの場合は、lddを使えばわかる。

しかし、今回、Ubuntuで発生した上記エラーに対し、lddを適用したところ

エラーが見当たらなかった。

という問題の解決方法。

How to?


タイトル通りLD_DEBUGを使います。
ググっても、使い方がわかりづらかったのですが、要するに

のように、問題が発生するコマンドと合わせて実行するということです。

標準エラー出力に出力されるのでリダイレクトでファイルに書き出します。
かなり巨大なので注意。

問題のdll名をgrepしていくと怪しそうなところが。
要するに、シンボル omp_get_max_threadslookup in していったけどついに見つかりませんでした、ということでした。

今回はdllがなかったのではなくシンボルが見つからなかったというパターン。
自分で呼び出しているものならともかく依存しているライブラリだと実行時のエラーメッセージには出ませんね。

コメントを残す

メールアドレスが公開されることはありません。

%d人のブロガーが「いいね」をつけました。