簡體   English   中英

如何生成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

嗨,我沒有找到解決方案如何創建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編譯器兩個metods給了我同樣的錯誤。 我該怎么處理? 如果是,請使用另一個c ++編譯器如何強制此編譯器創建可用於我的java dll文件。 我在Windows 7 64位上工作。

我如何從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標頭的Javah自動生成和您從中調用它的Java運行時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM