![](/img/trans.png)
[英]Can't load IA 32-bit .dll on a AMD 64-bit platform with 32 bit JVM
[英]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.