Introduction
Windows上でOpenCVのstaticライブラリを作成し、自作のdllにリンクさせる方法。
.NETでP/Invokeするとよくあるエラーの一つが、Nativeのdllが見つからないというのがあります。
例えば下記のような。
1 |
Unhandled exception. System.DllNotFoundException: Unable to load shared library 'XXXXXXXX' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libXXXXXXXX: cannot open shared object file: No such file or directory |
たいていは、そのdllがないのではなく、そのdllが依存しているライブラリが存在しないというパターンが多い。
Windowsの場合は
DepenecyWalker
とかで割と簡単に原因がわかる。
OSXなら、
otool -L
、Linuxの場合は、
ldd
を使えばわかる。
しかし、今回、Ubuntuで発生した上記エラーに対し、lddを適用したところ
1 |
ldd bin/Release/netcoreapp3.1/libXXXXXXXX.so |
エラーが見当たらなかった。
という問題の解決方法。
How to?
タイトル通り
LD_DEBUG
を使います。
ググっても、使い方がわかりづらかったのですが、要するに
1 |
LD_DEBUG=symbols,bindings dotnet run -c Release 2> error.log |
のように、問題が発生するコマンドと合わせて実行するということです。