用Java加载32位或64位JNI库

kay*_*ahr 3 java java-native-interface

可能重复:
Java:在dll之间切换取决于系统架构(32/64)

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

我想要尝试加载第一个,如果这引发异常,那么我加载第二个但这听起来很难看.

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

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

小智 5

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

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

恕我直言os.arch将是最好的解决方案.

  • @MByD:好的,你是对的.但是,运行JVM的"位数"或体系结构正是OP需要决定加载哪个库的原因. (5认同)