javaからDLLをコールすると java.lang.UnsatisfiedLinkErrorが発生する

背景

javaからdllを使う場合に java.lang.UnsatisfiedLinkErrorが発生するので原因と回避方法を調べました。 OSが32ビットの時は問題なく動作していたが64ビットOSに変更した際動かくなったという情報だけはありました。

開発環境

dllのbit数の調べ方  

OSのビットが64ビットに変更したことで動かくなったということはdllのビット数は32ビッ トだろうと予想はしていますが念のため確認しました。

qiita.com

Visual Studioがインストールされていたので楽勝と思ったのですが、dumpbin コマンドの見つからない....
これだけのために再度インストールするのも面倒かつバイナリエディタを使いたいなと思い調べた結果Linuxだと簡単にできることが判明. WSLで以下のコマンドを実行することでビット数を確認することができました。

file ファイル名

エラーの原因

エラーの原因は単純で64ビットJavaから32ビットのdllを呼ぼうとしているのが原因でした。

解決策

  1. dllを64ビットに変更する 今回はdllはすでに提供されていて自前でビルドすることが難しいので見送り

  2. JREを32ビットに変更する 実行環境が32ビットでも問題ないという場合のみ。
    今回は32ビット環境でも影響がないためこちらの方法を利用。

(dllを64ビットに変更できる場合はdllのビット数を変更した方がいいと思います。)

参考

nowokay.hatenablog.com