可能重复:
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库的最佳方法是什么?
答案 0 :(得分:5)
为什么不可预测?您只想检测它是否是32位系统,在这种情况下它将始终是x86(当然对于x86处理器),其他一切意味着64位。
如果您知道您的代码也可能在PPC或其他非x86处理器上执行,则会出现问题。但是在这种情况下,你可以使用丑陋的黑客攻击,并使用try {} catch()来“检测”这种情况。
IMHO os.arch将是最佳解决方案。
答案 1 :(得分:0)
Unsafe.addressSize();
报告通过{@link #putAddress}存储的本机指针的大小(以字节为单位)。该值为4或8。
你可以从这里拿走它。