Java JNI-为Windows打包64位和32位DLL
我在一个Java应用程序中使用JNI,我想在产品中为我的Windows用户打包64位和32位DLL。有没有一种方法(可能是命名约定)可以让Java JNI-为Windows打包64位和32位DLL,java,java-native-interface,Java,Java Native Interface,我在一个Java应用程序中使用JNI,我想在产品中为我的Windows用户打包64位和32位DLL。有没有一种方法(可能是命名约定)可以让System.loadLibrary(“foo”)自动知道应该加载哪个文件?我目前正在使用我不喜欢的解决方法: // try to load foo64.dll and if faild, load foo32.dll try { System.loadLibrary("foo64"); } catch (UnsatisfiedLinkError e)
System.loadLibrary(“foo”)
自动知道应该加载哪个文件?我目前正在使用我不喜欢的解决方法:
// try to load foo64.dll and if faild, load foo32.dll
try
{
System.loadLibrary("foo64");
}
catch (UnsatisfiedLinkError e)
{
System.loadLibrary("foo32");
}
如果您想知道Vm是否为64位
public static boolean is64BitVM() {
String bits = System.getProperty("sun.arch.data.model", "?");
if (bits.equals("64")) {
return true;
}
if (bits.equals("?")) {
return System.getProperty("java.vm.name")
.toLowerCase().indexOf("64") >= 0;
}
return false;
}
然后
static {
fail = false;
try {
if (!is64BitVM())
System.loadLibrary("foo32"); //
else
System.loadLibrary("foo64"); //
} catch (UnsatisfiedLinkError ex) {
}
}
还可以将System.load()与共享库的绝对路径一起使用。我通常先按操作系统然后按体系结构来组织我的本机库。例如:lib/windows/x86_64/MyLib.dll或lib/darwin/ppc/libMyLib.dylib。还请注意,达尔文平台上用于本机库的扩展在>=Java1.7中从.jnilib更改为.dylib。