2017-04-16 82 views
0

我嘗試使用this tutorial. 創建JNI helloworld項目我完成了頁面上的每一步。不幸的是後試圖調用PROGRAMM與java -Djava.library.path="C:/Users/Philipp/Desktop/jni" HelloWorld我得到以下錯誤信息: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代碼。我嘗試使用-m64關鍵字: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這導致了以下錯誤:

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

什麼我必須做的就是它運行?

回答

1

您需要一個x86_64GCC工具鏈來爲x64編譯它(如果您在windows中,可能是mingw)。你說得對,因爲你的JDK是AMD64,所以SO/DLL也需要是AMD64。

在Windows中,您可以通過cygwin env或msys2安裝x86_64-w64-mingw32- toolchain,或者轉至Microsoft C編譯器。

+0

我到目前爲止只用Java進行編程,所以我對整個C世界都很陌生。我已經下載了cygwin的工具鏈,並且在C:\ cygwin64上有一個文件夾,並且在C:\ cygwin64 \ bin中有很多exe文件。我需要做什麼來使用cygwin64編譯我的.c文件? – Vilib

+0

再次運行cygwin設置。一旦顯示可用軟件包,請選擇x86_64-w64-mingw32工具鏈和軟件包。另一個解決方案是帶有更簡單的東西的msys2和pacman,這是小菜一碟。 NOte cygwin本身不是編譯器!但它帶有'GCC'工具鏈。 C世界真是太棒了,只需要一些時間與東西相處,你就是完美的。 – 2017-04-16 14:23:48

相關問題