我们正在开发一个在Linux环境(现在是Ubuntu)上运行的Java应用程序,它与一块硬件进行通信。所述硬件使用制造商为x86架构提供的.so库。
问题是,我们非常希望在64位JVM上运行它。在x86 JVM中加载库工作正常但我们无法在64位版本上加载。那么,除了切换到x86 JVM之外,还有其他方法可以将这个lib提供给我的64位Java应用程序吗?例如,我是否可以在x64中编写另一个os包装器库,然后调用x86版本以便JVM可以加载我的64位包装器?
答案 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);
}
}