我想在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] 举报,一经查实,本站将立刻删除。