Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.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
Linux,java.lang.UnsatisfiedLinkError:no";图书馆档案;在java.library.path中 我试图运行一个简单的JNI示例,在这里运行一个java应用程序,它通过动态库调用C++函数。_Java_C++_Linux_Java Native Interface_Unsatisfiedlinkerror - Fatal编程技术网

Linux,java.lang.UnsatisfiedLinkError:no";图书馆档案;在java.library.path中 我试图运行一个简单的JNI示例,在这里运行一个java应用程序,它通过动态库调用C++函数。

Linux,java.lang.UnsatisfiedLinkError:no";图书馆档案;在java.library.path中 我试图运行一个简单的JNI示例,在这里运行一个java应用程序,它通过动态库调用C++函数。,java,c++,linux,java-native-interface,unsatisfiedlinkerror,Java,C++,Linux,Java Native Interface,Unsatisfiedlinkerror,我将发布我使用的以下代码和终端命令 .爪哇 通过终端获取.class和头文件 javac Lab.java javah -jni Lab hello.cpp文件 #include "Lab.h" #include <stdio.h> #include <iostream> JNIEXPORT void JNICALL Java_Lab_hello(JNIEnv *env,jobject jobj) { cout<<"Hello World"<&

我将发布我使用的以下代码和终端命令

.爪哇

通过终端获取.class和头文件

javac Lab.java
javah -jni Lab
hello.cpp文件

#include "Lab.h"
#include <stdio.h>
#include <iostream>

JNIEXPORT void JNICALL Java_Lab_hello(JNIEnv *env,jobject jobj) {
   cout<<"Hello World"<<endl;
}
最后运行文件:

java -Djava.library.path=. Lab
然后我得到一个错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1865)
        at java.lang.Runtime.loadLibrary0(Runtime.java:870)
        at java.lang.System.loadLibrary(System.java:1122)
        at Lab.<clinit>(Lab.java:6)
线程“main”java.lang.UnsatisfiedLinkError中出现异常:java.library.path中没有hello 位于java.lang.ClassLoader.loadLibrary(ClassLoader.java:1865) 位于java.lang.Runtime.loadLibrary0(Runtime.java:870) 位于java.lang.System.loadLibrary(System.java:1122) 在实验室(Lab.java:6) 我知道还有其他帖子也有同样的问题,但不幸的是,这些解决方案都不适合我。 我已经尝试过以下方法:

  • 将hello.so文件复制到java lib路径中的“/usr/lib”中,并使用chmod授予其权限
  • 还可以使用export将hello.so文件路径添加到$LD_LIBRARY_路径
  • 运行java文件时添加hello.so路径(java-Djava.library.path=“/root/Desktop”Lab)
  • 使用甚至不起作用的ldconfig
我需要在一个主要的应用程序上使用它,但我只是尝试了一个简单的例子,即使我在其他帖子上读到了所有的解决方案,我也无法让它工作


谢谢。

又过了一天在堆栈中搜索,找到了我需要的东西。
在Linux上.so lib文件必须具有前缀“lib”。因此,在我的示例中,我的lib文件应命名为libhello.So,而不是hello.So,并且一切正常。

Hi,您是否尝试将.So文件复制到与.class相同的目录中?hello,是的,上述所有文件都在同一目录中
java -Djava.library.path=. Lab
Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1865)
        at java.lang.Runtime.loadLibrary0(Runtime.java:870)
        at java.lang.System.loadLibrary(System.java:1122)
        at Lab.<clinit>(Lab.java:6)