在Java中加载DLL对于Windows XP

问题描述:

我试图加载一个dll,使用我使用Makefile在Linux机器上构建的System.loadLibrary("myDllFile")。我得到一个在Java中加载DLL对于Windows XP

java.lang.UnsatisfiedLinkError中C:\测试\ myDllFile.dll:一个IA 32位平台上无法加载此.dll(机器代码= 0x101)

当我运行包含 loadLibrary语句的主要Java类时,发生异常

。我试图在Windows XP上运行java类。我需要一个单独的DLL Windows XP(32位)和Windows 7(64位)?

+0

是,Win32的.dll文件的与Windows/64位的.dll的不兼容。 Linux共享库同样具有不兼容的elf-32和elf-64格式。这四种相互排斥的二进制格式通常都与Java一起使用。除非你使用JNI。 – paulsm4 2011-12-22 23:40:27

+0

所以我将不得不在32位机器上创建dll或者是否有makefile选项来执行此操作? – c12 2011-12-22 23:41:55

+0

这取决于谁写了你的Makefile,以及你如何编译它。有时候Linux可以用'setarch i686 make'来骗过Makefile;但这是非常依赖项目的。 – BRFennPocock 2011-12-23 03:24:49

这是正确的。您必须移植本机代码才能在每个操作系统上运行,并将其分别链接。

但是,如果你确实有一个.dll,而不是.so,这听起来像你可能有交叉编译的Win64中,当你的意思是为Win32这样做。 (也许使用MinGW?)如果你有这样的交叉编译器设置,你应该能够为Win32和Win64指定构建。或者,如果您的Makefile碰巧行为不当,您可以使用setarch i686来告诉您的64位Linux系统伪装成32位。

如果你有一个Linux .so,它会需要相当多的工作端口到Windows ...