JNI教程,cant'load库

时间:2014-01-21 04:06:41

标签: java c++ java-native-interface

我正在尝试为JNI做这个教程

https://netbeans.org/kb/docs/cnd/beginning-jni-linux.html

我已经在那里做了一切,但我遇到了这个麻烦

Exception in thread "main" java.lang.UnsatisfiedLinkError: Can't load library: /home/usr/NetBeansProjects/JNIDemoCdl/dist/libJNIDemoCdl.so
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1846)
at java.lang.Runtime.load0(Runtime.java:795)
at java.lang.System.load(System.java:1061)
at jnidemojava.Main.<clinit>(Main.java:13)

Java结果:1

我现在有点坚持使用JNI,我可以使用一些帮助,谢谢

2 个答案:

答案 0 :(得分:0)

确保您对目录结构和lib文件本身具有读/写权限。

尝试

sudo chmod ug+rwX -R /home/usr/NetBeansProjects/

这将为文件和目录添加读/写权限,并对已经拥有用户执行标志的目录和文件执行权限。

希望这有帮助。

答案 1 :(得分:0)

我从不使用mac而是使用windows我在开始使用jni时遇到了同样的问题。  对于你的问题,它可能是很多东西或一个 创建的dll标志不正确,请确保已使用正确的命令创建dll。 我使用以下命令

gcc -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at -I"C:\Program Files\Java\jdk1.7.0\include" -I"C:\Program Files\Java\jdk1.7.0\include\win32" -shared -o Sample1.dll Sample1.cpp

为此我使用了mingw编译器。

  • 在mac上的windows dll文件中,这样就可以了。 我用了这个命令 System.loadlibrary("youLibraryNameWithoutExtensionAndPath") 在此之前转到项目构建路径并展开jre并选择本机库然后单击眉毛并选择放置dll / so文件的文件夹并确定。 现在尝试运行您的代码。这将解决问题。

但是如果dll / so文件有依赖lib,那么你必须将所有dll文件放在system32文件夹中(在windows中)