2013-05-13 513 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运行时。

相关问题