我在mac中编写了一个JNI演示,我发现java中的System.loadLibrary()加载失败,但是System.load()工作正常。我已经尝试了一些方法来解决这个问题,但是没有用,可以有人给我建议。我尝试过各种方法:
1,在IDEA“debug-Configurations-VM Options”中设置“-Djava.library.path = / Users / wang / javaPrj / AndroidPushServer / out / production”,运行日志如下: /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/bin/java -Djava.library.path = / Users / wang / javaPrj / AndroidPushServer / out / production -Didea.launcher.port = 7532“ -Didea.launcher.bin.path = / Applications / IntelliJ IDEA CE.app/Contents/bin“-Dfile.encoding = UTF-8 -classpath”/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home /jre/lib/charsets.jar ... / Applications / IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar“com.intellij.rt.execution.application.AppMain com.yuwan.androidpushserver.server
/用户/旺/ javaPrj / AndroidPushServer /输出/生产
线程“main”中的异常java.lang.UnsatisfiedLinkError:java.library.path中没有push
在java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
...
在com.intellij.rt.execution.application.AppMain.main(AppMain.java:123)
处理完成后退出代码1
libpush.so存在于该目录中:
lxr:production wang $ pwd
/用户/旺/ javaPrj / AndroidPushServer /输出/生产
lxr:生产王$
lxr:生产王$ ls
AndroidPushServer libpush.so
lxr:生产王$
2,我在命令“java -Djava.library.path = / Users / wang / javaPrj / AndroidPushServer / out / production com / yuwan / androidpushserver / server”中运行java,错误如下: <登记/>
lxr:AndroidPushServer wang $ java -Djava.library.path = / Users / wang / javaPrj / AndroidPushServer / out / production com / yuwan / androidpushserver / server
/用户/旺/ javaPrj / AndroidPushServer /输出/生产
线程“main”中的异常java.lang.UnsatisfiedLinkError:java.library.path中无推送
...
在com.yuwan.androidpushserver.server。(server.java:13)
lxr:AndroidPushServer wang $
3,我通过调用System.setProperty(“java.library.path”,“/ Users / wang / javaPrj / AndroidPushServer / out / production”)在java代码中设置java.library.path,但仍然加载失败。
答案 0 :(得分:1)
在这里查看使用JNI和IDEA的示例代码:
http://jnicookbook.owsiak.org/recipe-No-D002/
您也可以在这里找到超级简单的源代码:
http://jnicookbook.owsiak.org/recipe-No-001/
你可以看看这部电影,它展示了如何在IntelliJ和CLion中处理JNI调试:
答案 1 :(得分:0)
如果你在mac os X中执行System.loadLibrary(&#34; push&#34;),它将加载libpush.dylib而不是libpush.so。如果您执行System.load,则可以加载所需的任何文件名。