ライブラリの 32 ビット バージョンと 64 ビット バージョンを作成しようとしています。
指示:
gcc -D_WIN32 -O2 -shared -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 \
-Ic:\OpenSSL-Win32\include -Lc:\OpenSSL-Win32 -leay32 -Lc:\Windows\System32 \
-lnetapi32 -std=c99 -lm -o osaccess-win32.dll osaccess.c
...さまざまなマシンで適切な場合に 32 を 64 に置き換えます。
どちらも正常にビルドされ、私のアプリケーションでは 64 ビットが動作します。ただし、私の 32 ビットのものは、java.lang.UnsatisfiedLinkError
ロードしようとするとエラーが発生します。
java.lang.UnsatisfiedLinkError: com.suture.self.Util.OSAccess.osExec(Ljava/lang/String;)Ljava/lang/String;
このタイプのエラーの通常の手段 (32 ビットjni.h
ファイルの使用の確認、チェックjava.library.path
など) をすべて調査しましたが、すべて問題ないようです。
これが何かを意味するかどうかはわかりませんが、dumpbin /exports <dll-name>
両方の dll に対して実行したとき、小さな不一致に気付きました。
32ビット
ordinal hint RVA name
1 0 00001D1F Java_com_suture_self_Util_OSAccess_osExec@12
64ビット
ordinal hint RVA name
1 0 0000200E Java_com_suture_self_Util_OSAccess_osExec
32 ビット DLLの@12の意味は何ですか?