微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用JNI时出现UnsatisfiedLinkError?

我想在linux ubuntu中使用JNI从Java程序中调用一个C程序。

我是新来的,我已经尝试了http://www.ibm.com/developerworks/java/tutorials/j-jni/section2.html中给出的示例程序。 我已经创build了.java,.h,.c和.so文件。 但是,当我试图运行该程序,我收到以下错误

线程“main”中的exceptionjava.lang.UnsatisfiedLinkError:no java.library.path中的Sample1

java.lang.classLoader.loadLibrary(ClassLoader.java:1738)

java.lang.Runtime.loadLibrary0(Runtime.java:823)

java.lang.System.loadLibrary(System.java:1028)

在Sample1.main(Sample1.java:13)

有人可以解释这个Windows操作系统版本编号的例子吗?

GetProcessMemoryInfo PROCESS_MEMORY_COUNTERS_EX.PrivateUsage始终为0

有人可以给我一个例子,说明如何select()提醒fd变成“ready”

“vmovaps”的分段错误

gdb附加在窗口进程不工作

为什么共享库的符号在链接时没有解决

如何使用C#检查与文件扩展名关联的程序是否有效?

为什么我可以从STDOUT中读取并获取用户的terminalinput?

跟踪所有进程的Windows API调用

Windows 7上的Qt 5.2编译问题(32位)

这个异常表明.so不可用于JVM。

.so所在的目录添加到LD_LIBRARY_PATH将解决此问题。 如果.so依赖于其他.so库,这些.so所在的目录也将需要添加到LD_LIBRARY_PATH 。

我只是试图让我的CentOS上的同样的样本工作,并得到同样的错误。 正如已经回答的那样,JVM无法找到所需的文件。 我成功地使用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中共享库的命名约定。

我希望这个职位可以帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐