Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.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.lang.UnsatisfiedLinkError(尽管位于java.lang.path中,但未找到库)_Java_C++_Java Native Interface_Openjdk - Fatal编程技术网

“线程中的异常”;“主要”;java.lang.UnsatisfiedLinkError(尽管位于java.lang.path中,但未找到库)

“线程中的异常”;“主要”;java.lang.UnsatisfiedLinkError(尽管位于java.lang.path中,但未找到库),java,c++,java-native-interface,openjdk,Java,C++,Java Native Interface,Openjdk,我在一台64位Linux机器上工作。我试图模拟一个简单的JNI教程。准备好所有文件后,即Sample1.java、Sample1.class、Sample1.h、Sample1.cpp和libSample1.so,然后在尝试运行命令时 java Sample1 我得到以下错误 Exception in thread "main" java.lang.UnsatisfiedLinkError: no libSample1 in java.library.path at java.

我在一台64位Linux机器上工作。我试图模拟一个简单的JNI教程。准备好所有文件后,即
Sample1.java、Sample1.class、Sample1.h、Sample1.cpp
libSample1.so
,然后在尝试运行命令时

java Sample1
我得到以下错误

Exception in thread "main" java.lang.UnsatisfiedLinkError: no libSample1 in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1889)
        at java.lang.Runtime.loadLibrary0(Runtime.java:849)
        at java.lang.System.loadLibrary(System.java:1088)
        at Sample1.main(Sample1.java:10)
Sample1.java
的问题行如下所示:

System.loadLibrary("libSample1");
我读过一个与我类似的问题,并试图从其中一个its中获得建议,即使用以下命令将当前目录添加到环境变量
$LD_LIBRARY_PATH
(当前目录包含
libSample1.so
文件)

但这对我还是没有帮助。甚至调用
java-XshowSettings:properties
都会显示
java.library.path
包含
作为搜索路径之一


当我通过将
System.loadLibrary(“libSample1”)
替换为
System.load(“/libSample1.so”)将相对文件路径替换为绝对文件路径时,这个问题就消失了。有人能告诉我如何确保
java.library.path
可以找到我的共享库文件吗?

为什么这个文件被标记为
C++
?现在我想起来了,我觉得没有必要了。但我之所以这么做是因为我试图从java程序中调用C++共享库。我认为这可能是一个相关信息。我认为
ld
程序(链接程序)的当前工作目录不是你的程序。如果使用绝对路径加载库有效,为什么不在运行时尝试查找程序的当前工作目录,并构造一个到库的绝对路径?@Titus comment1)我检查了java-XshowSettings:properties中的
user.dir
属性,它显示了当前目录。评论2)我可以试着这样做,但我仍然不明白这个看似简单的错误失败的原因。为什么要将它标记为
C++
?现在我想起来了,我认为它没有必要。但我之所以这么做是因为我试图从java程序中调用C++共享库。我认为这可能是一个相关信息。我认为
ld
程序(链接程序)的当前工作目录不是你的程序。如果使用绝对路径加载库有效,为什么不在运行时尝试查找程序的当前工作目录,并构造一个到库的绝对路径?@Titus comment1)我检查了java-XshowSettings:properties中的
user.dir
属性,它显示了当前目录。评论2)我可以试着这样做,但我仍然不明白这个看似简单的错误失败的原因。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.