使用JNI时出现UnsatisfiedLinkError?

 2023-01-20    303  

问题描述

我想使用linux ubuntu中的JNI从JAVA程序调用C程序.

我是这个新手,我尝试了 http://www.ibm.com/developerworks/java/tutorials/j-jni/section2.html
.我已经创建了.java,.h,.c和.so文件.但是当我尝试运行程序时,我会遇到以下错误.

使用JNI时出现UnsatisfiedLinkError?

Exception in thread "main" java.lang.UnsatisfiedLinkError: no Sample1 in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1028)
    at Sample1.main(Sample1.java:13)

推荐答案

此例外表明.so jvm不可用.

将.so存在的目录添加到LD_LIBRARY_PATH中可以解决此问题.如果.so取决于其他.so库,则这些目录的存在也需要添加到LD_LIBRARY_PATH.

.

其他推荐答案

我刚刚试图将相同的样本用于我的CentOS上,并且与您遇到了相同的错误.正如已经回答的那样,JVM未能找到所需的SO文件.我成功地通过使用GCC遵循以下步骤来使它工作:

$ javac Sample1.java
$ javah Sample1
$ # Include paths must also be specified using -I option in the following gcc command line!
$ gcc -shared -I...snip... Sample1.c -o libSample1.so
$ # Library path for libSample1.so must also be specified!
$ java -Djava.library.path=...path/to/libSample1.so... Sample1

如果您省略了共享库的” lib”前缀,则JVM由于某种原因未能找到它.
我不知道为什么.我不熟悉Linux中共享库的命名约定.

我希望这篇文章能有所帮助.

以上所述是小编给大家介绍的使用JNI时出现UnsatisfiedLinkError?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26132.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。