[英]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"));
检测架构:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.