java - 在 Java 中加载 32 位或 64 位 JNI 库

标签 java java-native-interface

<分区>

Possible Duplicate:
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 库的最佳方式是什么?

最佳答案

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

如果您知道您的代码也可以在 PPC 或其他非 x86 处理器上执行,问题就会出现。但在这种情况下,您可能会使用带有异常驱动流控制的丑陋 hack,并使用 try {} catch () 来“检测”这种情况。

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

关于java - 在 Java 中加载 32 位或 64 位 JNI 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5449029/

相关文章:

java - 使用 C# 中的 jni4net 连接 JVM 时 Web 应用程序出错

java - Spring/Hibernate 获取包含列表的对象列表

java - 使用 maven 与 ant : Differences 编译相同的枚举

java - 为什么 @ApiModelProperty 注释的 "example"属性中有多余的反斜杠?

android - Android neon 内在函数中 'addition' 和 'pairwise addition' 之间的区别?

java - Eclipse 报告 "Failed to load JNI shared library"

java - 安卓 : JNI crash

java - 为什么客户端B没有得到完整的文件

java - 过滤自动完成适配器的 json 结果

java - java.awt.Robot 的 native 源代码