2011-12-22 67 views
1

我試圖加載一個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

回答

1

這是正確的。您必須移植本機代碼才能在每個操作系統上運行,並將其分別鏈接。

但是,如果你確實有一個.dll,而不是.so,這聽起來像你可能有交叉編譯的Win64中,當你的意思是爲Win32這樣做。 (也許使用MinGW?)如果你有這樣的交叉編譯器設置,你應該能夠爲Win32和Win64指定構建。或者,如果您的Makefile碰巧行爲不當,您可以使用setarch i686來告訴您的64位Linux系統僞裝成32位。

如果你有一個Linux .so,它會需要相當多的工作端口到Windows ...