【发布时间】:2011-07-23 20:54:16
【问题描述】:
可能重复:
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 库的最佳方法是什么?
【问题讨论】:
-
您如何捆绑您的应用程序?在 OSGi 中,您只能根据操作系统架构加载某些包或包片段。这就是交付特定于平台的功能的方式。你可以考虑使用 OSGi 吗?
-
您主要关心的不是操作系统是什么,而是可执行文件是什么:您可以在 64 位操作系统上运行 32 位可执行文件,但它仍然是 32 位,您需要的库是 32 位而不是 64 位。如果假设您可以在某些 32 位操作系统上运行 64 位可执行文件,您需要 64 位库。这就是 przemelek 试图解释的。
os.arch几乎可以满足任何需求,只要它存在,我的答案是针对 Unsafe 存在但某些系统属性可能不存在的情况。
标签: java java-native-interface