java - 如何将 JNA + native 库与 JNLP Web 启动一起使用 [在 Mac 上]?

标签 java jnlp jna

我正在尝试使用 JNLP 启动 Java 应用程序;该应用程序包含一个第三方库 ( Lab Streaming Layer ),该库依赖于加载 JNA 的 native 库。

据我所知,我已遵循所有适当的步骤来完成这项工作:

  1. 所有原生库都位于 JAR 文件中,按操作系统和体系结构分隔。
  2. 所有 native 库 JAR 文件都位于服务器上,可通过代码库 URL 进行访问。
  3. JNLP 文件包含 <resources>元素为 osarch<nativelib> 指定其中包含正确的 href 的元素属性。
  4. 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/

相关文章:

java - 使用 JNA 获取/设置应用程序标识符

java - 是否可以注释导出的函数名称?

java - JNA:如何将指针传递给局部变量?

java - 使用 enctype ="multipart/form-data"的表单是否会导致访问隐藏字段时出现问题

java - 用 Java 改变你自己的答案

java - 如何将 Permissions 和 Codebase 属性放入第三方 jar 的 list 中?

java - "Do you want to run this application"JNLP 对话框 - 再次显示对话框的条件

java - 尝试输出实例类中链接列表的内容时,无法从静态上下文错误中引用方法

java - 具有 SSL 和代理设置的 Rest Client 获取连接超时

java - 捕获异常后恢复代码