我們正在開發一個Java應用程序,以便在Linux環境(現在的Ubuntu)上運行,並與一個硬件進行通信。所述硬件僅使用由製造商提供的用於x86體系結構的.so庫。在64位JVM中加載32位.so庫
事情是,我們非常想在64位JVM上運行它。在x86 JVM中加載庫工作正常,但我們無法加載64位版本。因此,除了切換到x86 JVM之外,還有其他方法可以讓我的64位Java應用程序可以使用這個庫嗎?舉例來說,是否有可能在x64中編寫另一個os包裝庫,然後調用x86版本,以便JVM可以加載我的64位包裝器?
我可以拿出來使用32位代碼的唯一方法是讓另一個進程(32位)與該進程和64位JVM之間建立的硬件和IPC機制進行通信。不平凡但肯定可能。 – JJF
@JJF - 即使這樣做可能會因爲任何潛在的副作用而變得不可能。本地32位代碼可以修改Java對象或狀態,也可以受其影響,並且這些代碼不一定會存在於單獨的32位JVM中,並且幾乎不可能傳播任何副作用返回到64位JVM。有些東西不能輕易傳遞給子進程,如果它們可以傳遞的話 - 比如打開套接字或文件。 –
我同意這不是微不足道的取決於許多因素,雖然我沒有得到OP的庫與Java端交互的印象。聽起來像設備的通信接口。我和我一起工作的人都做了很多次。將設備I/O切換到單獨的進程。如果它是數據輸出接口類型的數據,則在兩個進程之間移動數據不應該很困難。 – JJF