javaからDLLをコールすると java.lang.UnsatisfiedLinkErrorが発生する
背景
javaからdllを使う場合に java.lang.UnsatisfiedLinkErrorが発生するので原因と回避方法を調べました。 OSが32ビットの時は問題なく動作していたが64ビットOSに変更した際動かくなったという情報だけはありました。
開発環境
dllのbit数の調べ方
OSのビットが64ビットに変更したことで動かくなったということはdllのビット数は32ビッ トだろうと予想はしていますが念のため確認しました。
Visual Studioがインストールされていたので楽勝と思ったのですが、dumpbin コマンドの見つからない....
これだけのために再度インストールするのも面倒かつバイナリエディタを使いたいなと思い調べた結果Linuxだと簡単にできることが判明.
WSLで以下のコマンドを実行することでビット数を確認することができました。
file ファイル名
エラーの原因
エラーの原因は単純で64ビットJavaから32ビットのdllを呼ぼうとしているのが原因でした。
解決策
dllを64ビットに変更する 今回はdllはすでに提供されていて自前でビルドすることが難しいので見送り
JREを32ビットに変更する 実行環境が32ビットでも問題ないという場合のみ。
今回は32ビット環境でも影響がないためこちらの方法を利用。
(dllを64ビットに変更できる場合はdllのビット数を変更した方がいいと思います。)