Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JNI-为Windows打包64位和32位DLL_Java_Java Native Interface - Fatal编程技术网

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)

我在一个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("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。