java System.loadLibrary()在mac中加载失败,但System.load()工作正常

时间:2017-03-23 08:51:29

标签: java java-native-interface

我在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,但仍然加载失败

2 个答案:

答案 0 :(得分:1)

在这里查看使用JNI和IDEA的示例代码:

http://jnicookbook.owsiak.org/recipe-No-D002/

您也可以在这里找到超级简单的源代码:

http://jnicookbook.owsiak.org/recipe-No-001/

你可以看看这部电影,它展示了如何在IntelliJ和CLion中处理JNI调试:

https://www.youtube.com/channel/UCE2aYTLqPQ8Qx8oTkOjjwSQ

答案 1 :(得分:0)

如果你在mac os X中执行System.loadLibrary(&#34; push&#34;),它将加载libpush.dylib而不是libpush.so。如果您执行System.load,则可以加载所需的任何文件名。