【问题标题】:Cannot load the JNotify native library (no jnotify in java.library.path)无法加载 JNotify 本机库(java.library.path 中没有 jnotify)
【发布时间】:2020-06-13 01:57:48
【问题描述】:

当我尝试运行任何游戏项目时,我收到以下警告,这似乎使我的项目运行速度比正常慢很多:

Cannot load the JNotify native library (no jnotify in java.library.path)
Play will check file changes for each request, so expect degraded reloading performance.

我找到this的问题,这似乎已经解决了Windows用户的问题,但我还没有找到适用于Linux机器的解决方案

我尝试将从here 下载的.jar 和.so 复制到/usr/lib/jvm/jdk1.8.0_212/bin/ 中,但没有成功

另外,我注意到在我的播放目录 (~/play/repository/local/net.contentobjects.jnotify/jnotify/0.94/jars) 中有一个 jnotify.jar,所以我不确定它为什么不使用那个

我在 Ubuntu 20.04 64 位上使用 Play v2.2.4

从 jnotify.jar 中提取 .so 后,ldd libjnotify.so 命令的输出为:

linux-vdso.so.1 (0x00007ffd4c3cd000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f94bbed5000)
/lib64/ld-linux-x86-64.so.2 (0x00007f94bc2df000)

它似乎没有列出任何未解析的库(尽管我不确定如何解释该输出)。 libc.so.6ld-linux-x86-64.so.2 存在于列出的目录中,我不确定它在哪里寻找 linux-vdso.so.1

感谢任何帮助!

【问题讨论】:

  • 错误信息意味着它试图加载原生的.so库,但由于某种原因失败(可能是由于某些链接错误)。尝试从 jar 中提取 .so 并运行 ldd <file.so> - 是否报告了任何未解析的库?您可能想为您的问题添加更多详细信息,您使用的是哪个 Play 版本、哪个发行版、架构?
  • 嗨@cbley 感谢您的回答!我用请求的信息更新了问题。简而言之,我在 Ubuntu 20.04 64 位上运行 Play v2.2.4,它似乎没有报告任何未解析的库
  • 哇,2.2.4 真的太老了。至少,尝试升级到 2.2.6。这条评论 here 建议 2.3.2 修复了这样的问题...您也可以尝试其他解决方案,例如显式传递 java.library.path 进行播放。
  • 是的,我正在做一个有 10 年历史的项目,PO 认为升级播放版本不值得。我找不到如何通过java.library.path 来玩,你会怎么做?
  • 哦,等等,它正在工作。我将下载的 .so 文件移动到 java.library.path 中的路径之一,它成功了。感谢您的帮助!

标签: java linux playframework jnotify


【解决方案1】:

我将描述它是如何为后代解决的:

首先,下载JNotifyhere并解压

然后在终端中输入java -XshowSettings:properties,并检查java.library.path 属性。 在我的例子中,这里列出的第一个路径是/usr/java/packages/lib/amd64

最后,将解压后的文件64-bit Linux/libjnotify.so移动到java.library.path的目录下(在我的例子中是/usr/java/packages/lib/amd64

重新开始播放后,它工作了

再次感谢@cbley!

【讨论】:

    猜你喜欢
    • 2017-05-20
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    相关资源
    最近更新 更多