如何使用gcc编译器或其他工具生成64位的.dll文件。在AMD 64位平台上无法加载32位的IA .dll文件。

6

你好,我没有找到如何创建64位dll的解决方案,并使用其本地c ++方法。我使用了Java代码metodynatywne.java:

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;
   }

我使用gcc命令创建了我的dll:

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

并且

   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的x64编译器,两种方法都给我带来了同样的错误。我该如何处理?如果需要,使用另一个C++编译器,但如何强制该编译器创建我的Java DLL文件可用。我正在使用Windows 7 64位操作系统。
我该如何使用GCC从cpp文件创建64位DLL文件?或者其他命令行编译器?
非常感谢提供任何评论和帮助。

我有同样的问题,你找到解决方案了吗? - Dude Dawg
3个回答

0

这个问题还没有被回答,所以我来试试...... 正如Denis所提到的那样,您需要下载一个64位编译器来生成您的.dll文件。这些天,大多数人在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来生成您的库。

正如您上面指出的那样,您确实需要小心使用与您已编译C++库的架构匹配的Java版本。这意味着Javah自动生成您的JNI头文件,以及调用它的Java运行时。


0

您应该重新编译64位的DLL(必须下载64位构建工具)。此外,您可以切换到32位JVM(只需下载32位JVM)。


0
这个编译器标志应该有所帮助: c++ --64 -DARCH_X86_64=1 file.cpp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接