如何生成 64 位.dll哪个 gcc 编译器或其他。无法在 AMD 64 位平台上加载 IA 32 位.dll

How to generate 64 bit .dll which gcc compiler or other. Can't load IA 32-bit .dll on a AMD 64-bit platform

本文关键字:dll AMD 平台 IA 加载 其他 gcc 哪个 何生成 编译器      更新时间:2023-10-16

嗨,我没有找到如何创建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();
}  }

生成metodynatywne.hjava -jni metodynatywne

我写了metodynatywne.cpp code:

   #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:java7include -I c:java7includewin32 -c metodynatywne.cpp

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

我得到的是错误信息:

c:>java metodynatywne
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:ProgramowanieUJSemestr2ZPGPerfCountcwiczeniemetodynatywne.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文件。我用的是64位的Windows 7。

我如何从cpp文件64位dll(与gcc) ?还是其他命令行编译器?

非常感谢您的评论和帮助。

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

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

这个问题仍然没有公认的答案,所以我要咬……正如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来生成库。

如上所述,您确实需要小心使用的java版本,以确保它与您编译的c++库的体系结构相匹配。这意味着JNI头文件的Java自动生成和从中调用它的Java运行时。