我正在尝试使用 JNLP 启动 Java 应用程序;该应用程序包含一个第三方库 ( Lab Streaming Layer ),该库依赖于加载 JNA 的 native 库。
据我所知,我已遵循所有适当的步骤来完成这项工作:
- 所有原生库都位于 JAR 文件中,按操作系统和体系结构分隔。
- 所有 native 库 JAR 文件都位于服务器上,可通过代码库 URL 进行访问。
- JNLP 文件包含
<resources>
元素为os
和arch
用<nativelib>
指定其中包含正确的href
的元素属性。 - JNLP 文件格式正确并正常启动。
当我去运行我的应用程序时,我得到一个 java.lang.UnsatisifiedLinkError
报告“无法加载库'liblsl32.dylib':无法获取darwin/liblsl32.dylib的InputStream”。这种情况发生在程序启动后,即它第一次尝试使用具有 native lib 依赖项的库时。我已经通过将 dylib 放在正确的位置,使用单独的非 Web 启动应用程序纠正了该库的这个确切错误。我还尝试根据以下信息将所有 dylib 重命名为 jnilib:http://permalink.gmane.org/gmane.comp.java.jna.user/3328 ,但一切都发生相同。
看起来我应该能够指定 jna.library.path
在 JNLP 文件中,但我不知道这会是什么,如果它会在启动之间发生变化,或者我将如何找出它应该是什么。
最佳答案
Native.getWebStartLibraryPath(name)
应该为您提供帮助 JNA 找到 native 库所需的信息。
您可以构造绝对路径名或仅将路径传递给 NativeLibrary.addSearchPath(libName, path)
.
已编辑
您还需要使用 .jnilib
后缀命名捆绑的 OS X 共享库,以便 Web Start 将其识别为 native 库。这是 OS X 特有的命名问题。
关于java - 如何将 JNA + native 库与 JNLP Web 启动一起使用 [在 Mac 上]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24210989/