2017-04-16 27 views
0

this tutorial. を使用してJNI helloworldプロジェクトを作成しようとしました。残念ながらjava -Djava.library.path="C:/Users/Philipp/Desktop/jni" HelloWorldでプログラムの開発を呼び出そうとした後、私は次のエラーメッセージを取得:このタイプのエラーとstackoverflowの上のいくつかの質問がありますJava JNI - AMD 64ビットプラットフォームでIA 32ビット.dllをロードできない

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Users\Philipp\Desktop\jni\helloworld.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform 
    at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
    at java.lang.ClassLoader.loadLibrary0(Unknown Source) 
    at java.lang.ClassLoader.loadLibrary(Unknown Source) 
    at java.lang.Runtime.loadLibrary0(Unknown Source) 
    at java.lang.System.loadLibrary(Unknown Source) 
    at HelloWorld.<clinit>(HelloWorld.java:3) 

を、残念ながら解決策のどれも私のために働いていません。

私はJDK 64ビットを使いたいので、64ビットマシンのCコードをコンパイルする必要があります。 gcc -shared HelloWorld.c -I"C:/Program Files/Java/jdk1.8.0_121/include" -I"C:/Program Files/Java/jdk1.8.0_121/include/win32" -o libhelloworld.dll -m64次のエラーにつながる:私は-m64キーワードを使用してみました

HelloWorld.c:1:0: sorry, unimplemented: 64-bit mode not compiled in 
#include <jni.h> 
^ 

私はそれが実行して取得するためにしなければならないのですか?

答えて

1

x64用にコンパイルするにはx86_64GCCツールチェーンが必要です(ウィンドウ内にある場合はおそらくmingw)。そしてあなたのJDKはAMD64なので、SO/DLLもAMD64にする必要があります。

ウィンドウでは、x86_64-w64-mingw32-ツールチェーンをcygwin envまたはmsys2でインストールするか、Microsoft Cコンパイラを使用します。

+0

これまでJavaでプログラミングしてきただけなので、私はC言語の世界全体には全く新しいものです。私はcygwinでツールチェーンをダウンロードし、C:\ cygwin64上のフォルダにC:\ cygwin64 \ binにある多くのexeファイルを持っています。 cygwin64を使って.cファイルをコンパイルするにはどうすればいいですか? – Vilib

+0

cygwinのセットアップをもう一度実行してください。使用可能なパッケージが表示されたら、x86_64-w64-mingw32ツールチェーンとパッケージを選択します。もう一つの解決策は、簡単なものとパックマンであるパックマンが付属しているmsys2です。 Cygwin自体はコンパイラではありません! 'GCC'ツールチェーンが付属しています。 C世界はすごく気に入っていて、ちょっとした時間が必要です。あなたは完璧です。 –

関連する問題