2013-05-13 139 views
6

您好我沒有找到解決方案如何創建64位dll。並使用它的本地C++方法。我用Java代碼metodynatywne.java:如何生成64位.dll哪個gcc編譯器或其他。無法在AMD 64位平臺上加載IA 32位.dll

class metodynatywne { 

static { 
    System.loadLibrary("metodynatywne"); 
} 
native public void sayHello(); 

public static void main (String argv[]) 
{ 
    new metodynatywne().sayHello(); 
} } 

使用 JAVAH -jni metodynatywne

然後產生metodynatywne.h我寫metodynatywne.cpp代碼:

#include <jni.h> 
    #include <iostream> 
    #include "metodynatywne.h" 
    using namespace std; 

    JNIEXPORT void JNICALL 
    Java_metodynatywne_sayHello(JNIEnv * env, jobject self) 
     { 
cout << "Hello World!" << endl; 
    } 

我ussed GCC創建我dll with comands:

c:\>c++ -I c:\java7\include -I c:\java7\include\win32 -c metodynatywne.cpp 

and

c:\>c++ -shared metodynatywne.o -o metodynatywne.dll 

,什麼什麼,我得到的是錯誤信息:

c:\>java metodynatywne 
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Programowanie\UJ\Semestr2\ZPG\PerfCount\cwiczenie\metodynatywne.dll: Can't lo 
ad IA 32-bit .dll on a AMD 64-bit platform 
    at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
    at java.lang.ClassLoader.loadLibrary1(Unknown Source) 
    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 metodynatywne.<clinit>(metodynatywne.java:4) 

我用Java 1.4的32位javac編譯器和java7 64的編譯器都metods給了我同樣的錯誤。我該如何處理?如果是的話,使用另一個C++編譯器如何強制這個編譯器創建可用的我的Java dll文件。我在Windows 7 64位工作。

我可以從cpp文件製作一個64位的dll(帶gcc)嗎?或者其他的命令行編譯器?

非常感謝您提供的任何意見和幫助。

+0

我有同樣的問題,你碰巧找到一個解決方案? – 2013-11-06 00:03:37

回答

0

您應該重新編譯用於64位的DLL(您必須下載64位構建工具)。你也可以切換到32位JVM(只需下載32位JVM)。

0

這個編譯器標誌應該有所幫助: C++ --64 -DARCH_X86_64 = 1 file.cpp

0

不過在這一個沒有公認的答案,所以我會咬... 正如丹尼斯所說,你會需要下載一個用於生成.dll的64位編譯器。現在大多數人在Windows上使用MinGW-w64(http://www.mingw.org或直接下載http://sourceforge.net/projects/mingw-w64/files/latest/download?source=files),它具有相當不錯的安裝包。警告 - 如果您不使用安裝包,則需要自行安裝整個工具鏈。然後你可以使用這個64位編譯器可執行文件(類似於'x86_64-w64-mingw32-g ++')而不是32位gcc來生成你的庫。

如上所述,您需要小心所使用的Java版本,以確保它與您編譯的C++庫的體系結構相匹配。這意味着您的JNI頭的Javah自動生成以及您調用它的Java運行時。

相關問題