繁体   English   中英

我可以将本机库的32位和64位版本都放置在java.library.path上吗?

[英]Can I place both the 32bit and 64bit versions of a native library on java.library.path?

是否可以在java.library.path上放置本机DLL的两个版本(64位和32位)?

我担心是否将64位和32位版本放在本机库路径上,在为其他体系结构运行时是否存在无法满足的链接异常。 如果是这样,首选的解决方案是什么? 在我的gradle / maven构建脚本中有一个标记链接正确的库?

我目前正在执行以下操作:-

-Djava.library.path=/out/lib/win64jdk;/out/lib/winx86jdk

两者都包含与体系结构相关的DLL。 我目前不确定JVM是否可以确定符号。

如果您是我,我将确保只有适当的本机dll位于可分发软件包中,而将另一个保留。

但是,如果您想同时分发这两种代码,则需要编写一些Java代码来加载正确的库。 System.loadLibrary用于加载本机库,通常要做的是在Java代码中的静态初始化程序中调用它。

除非您愿意完全依赖异常,否则可以使用以下代码:

System.getProperty("sun.arch.data.model") 

加载适当的本机库。 该函数将相应地返回32或64。

您可以选择不添加任何一个,然后在您需要它们之前(例如,在应用程序启动时),根据当前系统体系结构加载适当的文件。

您可以使用System.loadLibrary()加载它:

boolean is64bit = ...; // See below how to detect
System.loadLibrary("/out/lib/win" + (is64bit ? "64jdk" : "x86jdk"));

检测架构:

如何判断我是在64位JVM还是32位JVM中运行(从程序中)?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM