用Java加载32位或64位JNI库

时间:2011-03-27 11:51:58

标签: java java-native-interface

  

可能重复:
  Java : switching between dll depends on system architecture (32/64)

在我的Java应用程序中,我需要一个可用于32位和64位的JNI库。我不想发送我的应用程序的两个不同版本,所以我想用两个库发送应用程序,应用程序必须确定自己要加载哪个库(foobar32.so或foobar64.so)。我该怎么做?

我考虑过尝试加载第一个,如果这会引发异常,那么我加载第二个,但这听起来很难看。

是否有一些系统属性我可以检查以确定是否使用32位Java或64位Java来运行我的应用程序?我知道有一些os.arch属性,但根据this answer,返回值似乎非常不可预测。

那么让应用程序决定是否加载32位或64位JNI库的最佳方法是什么?

2 个答案:

答案 0 :(得分:5)

为什么不可预测?您只想检测它是否是32位系统,在这种情况下它将始终是x86(当然对于x86处理器),其他一切意味着64位。

如果您知道您的代码也可能在PPC或其他非x86处理器上执行,则会出现问题。但是在这种情况下,你可以使用丑陋的黑客攻击,并使用try {} catch()来“检测”这种情况。

IMHO os.arch将是最佳解决方案。

答案 1 :(得分:0)

Unsafe.addressSize();

报告通过{@link #putAddress}存储的本机指针的大小(以字节为单位)。该值为4或8。

你可以从这里拿走它。

相关问题