私は単純なJNIプロジェクトをコンパイルしています。しかし、私はそれを実行すると、私は次のエラーが表示されます:実行されないJNIプロジェクトの修正方法
$ java HelloJNI
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.ClassFormatError: Extra bytes at the end of class file HelloJNI
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
私は多くのものを変更する必要がありました。 Ubuntuではgccを使用しています。それは動作します:
[email protected]:~/programing/java/jni/HelloJNI$ java -Djava.library.path=. HelloWorld
Hello from C!
[email protected]:~/programing/java/jni/HelloJNI$ ls
ctest.c HelloWorld.class HelloWorld.h HelloWorld.java libctest.so
私はこのlinkを使用して動作させました。
gccを使用してWindowsアーキテクチャ用にコンパイルすることができますか、それともMinGwをインストールする必要がありますか? 皆様のご協力ありがとうございます。
私はちょうどこれはMinGWの-64
C:\Users\sansari\Downloads\x86_64-w64-mingw32-gcc-4.8.0-win64_rubenvb\mingw64\java>gcc -o ctest.dll -shared -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" ctest.c -m64
C:\Users\sansari\Downloads\x86_64-w64-mingw32-gcc-4.8.0-win64_rubenvb\mingw64\java>ls
HelloWorld.class HelloWorld.h HelloWorld.java ctest.c ctest.dll
C:\Users\sansari\Downloads\x86_64-w64-mingw32-gcc-4.8.0-win64_rubenvb\mingw64\java>java HelloWorld
Hello from C!
? 'java'バージョンはコンパイル時にターゲットとするVMと一致しますか? – Michael
私は単純にjavac HelloJNI.javaを使用しました。はい、VMとjavaは一致する必要があります。私は、Javaを持っていないラップトップでこれをやっています。 JDKをインストールし、MinGwを使用してCの部分をコンパイルしました。 – user3326293
あなたの新しい質問に。 Windowsのバイナリを生成できるコンパイラを使用できます。 MinGWは[C、C++、ADA、Fortranコンパイラを含むGNUコンパイラ・コレクション(GCC)のポート](http://mingw.org/)です。 – SubOptimal