Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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 linux上64位体系结构的JNI库名称_Java_C++_C_Linux_Java Native Interface - Fatal编程技术网

Java linux上64位体系结构的JNI库名称

Java linux上64位体系结构的JNI库名称,java,c++,c,linux,java-native-interface,Java,C++,C,Linux,Java Native Interface,我为java桌面开发了一个JNI动态库。目前,它可以在MacOS和Windows上运行,但在Linux上,我有一种奇怪的行为 我将库编译为32位和64位,但当我只放入64位库时,我调用System.loadLibrary myLibrary;它无法找到它,但在32位体系结构中,当我只添加32位时,它就可以找到它,我将其命名为libMyLibrary.so 所以我的问题是,对于32位,我需要将它命名为libMyLibrary。那么,它应该如何命名为64位体系结构呢?我是否应该编写一些代码,根据体系

我为java桌面开发了一个JNI动态库。目前,它可以在MacOS和Windows上运行,但在Linux上,我有一种奇怪的行为

我将库编译为32位和64位,但当我只放入64位库时,我调用System.loadLibrary myLibrary;它无法找到它,但在32位体系结构中,当我只添加32位时,它就可以找到它,我将其命名为libMyLibrary.so

所以我的问题是,对于32位,我需要将它命名为libMyLibrary。那么,它应该如何命名为64位体系结构呢?我是否应该编写一些代码,根据体系结构加载适当的库


谢谢

标准解决方案是将32位和64位版本以及其他架构放在单独的目录中,并确保java.library.path指向正确的版本。

JVM应加载的库版本取决于代码运行的JVM版本以及操作系统架构。32位JVM应加载32位库,64位应加载64位库

我有安装了两个JVM的Ubuntu 64位操作系统。一个是64位

$ java -version
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
另一个是32位

$ /opt/jdk1.7.0_72/bin/java -version
java version "1.7.0_72"
Java(TM) SE Runtime Environment (build 1.7.0_72-b14)
Java HotSpot(TM) Server VM (build 24.72-b04, mixed mode)
我使用以下代码为在不同JVM中运行的应用程序加载库

static {
    if (System.getProperty("os.name").equals("Linux")) {
        if (System.getProperty("os.arch").equals("i386")) {
            System.out.println("loading i386 library");
        } else if (System.getProperty("os.arch").equals("amd64")) {
            System.out.println("loading x86_64 library");
        }
    }
}

名字不重要。这可能是另外一件事——也许你可以用strace追踪问题?你是对的,我犯了一个非常愚蠢的错误:谢谢,那是什么错误?这可能会对下一个人有所帮助。错误在于我使用了错误的if,并最终调用system.load而不是system.loadLibrary libName;