1. 程式人生 > >Java JNI Windows64位系統下 使用32位的dll

Java JNI Windows64位系統下 使用32位的dll

今天遇到在處理一個多classloader呼叫本地native方法報錯的問題的時候,想要通過呼叫本地的一個dll進行測試。該dll是在32位環境下編譯的。而OneCoder的除錯機器是64位的win7。自然呼叫會報如下錯誤:

Can’t load IA 32-bit .dll on a AMD 64-bit

錯誤資訊很明顯,於是替換了一個32位的JDK,重新測試,結果又報找不到dll的異常。載入dll的程式碼很簡單:

System.loadLibrary("hello”);//dll的檔名為hello.dll

此時,我已經按照經驗將dll扔到C:\windows\System32目錄下了,感覺應該萬無一失的,結果卻不行。以前在做windows下libvirt介面開發的時候,就是這麼做的,當時執行正常。這是為什麼?

仔細回憶,想起當時的環境是win7 32位,而現在是64位的,難道windows的目錄有變化?馬上檢視,果然在windows目錄下又發現了一個SysWow64的資料夾,裡面的檔案幾乎和System32內的檔案一致。立馬把hello.dll扔到裡面再次執行。成功!

果然64位的win7的目錄有變化,後來筆者也在網上搜索了一番,有幾篇介紹windows32位和64位系統dll資料夾命名規則的文章,如果大家有興趣可以去搜索一下。

由該問題,筆者也想起之前對於windows下libvirt開發的文章中介紹的操作方式可能不夠嚴謹,當時也有很多朋友向OneCoder詢問為什麼他們按照我介紹的扔到System32目錄下,仍然不好用,但是我沒能給出解答,如此看來,很可能是那些朋友的開發環境是64位的系統,如果是這樣,那他們放到C:\Windows\SysWoW64下,應該會好用了。