在64位JVM中加载32位.so库

时间:2015-11-12 13:27:27

标签: java cpu-architecture dynamic-loading .so

我们正在开发一个在Linux环境(现在是Ubuntu)上运行的Java应用程序,它与一块硬件进行通信。所述硬件使用制造商为x86架构提供的.so库。

问题是,我们非常希望在64位JVM上运行它。在x86 JVM中加载库工作正常但我们无法在64位版本上加载。那么,除了切换到x86 JVM之外,还有其他方法可以将这个lib提供给我的64位Java应用程序吗?例如,我是否可以在x64中编写另一个os包装器库,然后调用x86版本以便JVM可以加载我的64位包装器?

2 个答案:

答案 0 :(得分:6)

没有

您无法将32位库加载到64位进程的地址空间中。

答案 1 :(得分:1)

使用此代码,您可以检查您是否使用64位PC并加载lybrary:

boolean is64bit = System.getProperty("sun.arch.data.model").contains("64");
if(is64bit){
   try {
       System.load("64Bit ibrary");
   } catch (UnsatisfiedLinkError e) {
       System.err.println("Native code library failed to load.\n" + e);
   }
else{
   try {
        System.load("32Bit ibrary");
    } catch (UnsatisfiedLinkError e) {
      System.err.println("Native code library failed to load.\n" + e);
    }
}