可能重复:
Java : switching between dll depends on system architecture (32/64)加载32位或64位JNI库中的Java
在我的Java应用程序,我需要一个JNI库,可用于32位和64位。我不想发布两个不同版本的应用程序,所以我想用两个库发布应用程序,应用程序必须确定自己要加载哪个库(foobar32.so或foobar64.so)。我怎么做?
我想加载第一个,如果这会抛出一个异常,然后我加载第二个,但这听起来很难看。
是否有一些系统属性,我可以检查,而不是确定是否使用32位Java或64位Java来运行我的应用程序?我知道有一些os.arch
属性,但根据this answer,返回值似乎非常不可预测。
那么让应用程序决定是否加载32位或64位JNI库的最佳方式是什么?
您是如何捆绑应用程序的?在OSGi中,您只能根据操作系统体系结构加载某些软件包或打包碎片。这是如何交付平台特定功能的。你可以考虑使用OSGi吗? – katsharp 2011-03-27 12:04:18
您的主要关注点不是操作系统是什么,而是可执行文件是什么:您可以在64位操作系统上运行32位可执行文件,但它仍然是32位,而您需要的库是32位而不是64.如果假设您可以在某个32位上运行64位可执行文件操作系统,你需要64位库。这是przemelek试图解释的。 “os.arch”对于任何事物来说都是足够好的,只要它存在,我的回答就是针对不安全的情况,但某些系统属性可能不存在。 – bestsss 2011-03-27 14:12:47