【问题标题】:How to Define Paths to Frameworks on a Mac in Java?如何在 Java 中定义 Mac 上的框架路径?
【发布时间】:2013-03-19 17:08:36
【问题描述】:

我正在帮助编写一个跨平台的定格动画程序,它在 Windows 上运行良好。对于那些不知道的人来说,定格动画只是动画的一个花哨的术语。该程序允许用户将尼康、佳能和网络摄像头插入计算机,并让程序显示现场的实时视图,然后能够从那里手动控制相机。包括一个来自佳能的相机框架文件,路径定义如图所示

import com.sun.jna.Native;
initialization and such

public static EdSdkLibrary EDSDK = (EdSdkLibrary) Native.loadLibrary("Macintosh/EDSDK.framework/EDSDK",EdSdkLibrary.class, options);

在“public static int...”处抛出错误,表示找不到图像。我已经尝试过无数次重新定义路径、移动框架以及使用与我正在使用的框架相同的各种其他框架。请记住,这在 Windows 上完美运行,但在 Mac 上存在问题。

Mac 上的框架是否不同,或者它们的定义不同?我已经查看并没有找到其他解决方案。

编辑:好的,我定义了路径,它现在有这个符号 > 旁边没有文字。我现在该怎么办?

编辑:这是说这个 % 不是命令。没有它,它仍然无法工作。

【问题讨论】:

  • 您可能正在尝试使用 64 位 JVM 加载 32 位库。使用 -d32 运行 JVM 或加载 EDSDK 的 64 位版本(下载中的 EDSDK_64)。

标签: java macos frameworks jna edsdk


【解决方案1】:

JNA 将根据核心框架名称(本例中为 EDSDK)依次尝试从 ~/Library/Frameworks、/Library/Frameworks 和 /System/Library/Frameworks 加载框架。

如果loadLibrary 调用成功,则找到该库。如果未找到该库,您将收到 UnsatisfiedLinkError

框架基本上是与其他资源共享库的捆绑; ESDK.framework/ESDK 是实际的共享库(对于框架,OSX 省略了通常在 OSX 上的共享库中找到的“dyld”后缀)。

编辑

以下是创建符号链接的方法,以使路径看起来更像 JNA 所期望的。从终端(运行 Terminal.app):

% ln -s /your/complete/path/to/Macintosh/EDSDK.framework ~/Library/Frameworks/EDSDK.framework

成功完成后,您应该在列出 (ls) 符号链接时看到以下内容:

% ls -l ~/Library/Frameworks/EDSDK.framework
lrwxrwxr-x  1 YOU  YOU  50 Mar 31 01:13 /Users/YOU/Library/Frameworks/EDSDK.framework -> /your/complete/path/to/Macintosh/EDSDK/Framework/EDSDK.framework

您应该会在左侧看到符号链接路径(JNA 将在其中查看),右侧是真实文件的路径。如果没有,请删除符号链接文件并重试。请注意,您可能需要先创建目录~/Library/Frameworks;它可能还不存在。

最后,确保您尝试加载的库与您尝试加载的 VM 匹配; 64 位加 64 位,32 位加 32 位。佳能不提供其库的通用二进制文件,因此您需要指向其中一个或使用 lipo 合并两者。

【讨论】:

  • 好的。所以错误不是来自错误定义的路径,我认为我已经找到了问题,但我不知道如何解决它:错误是指出框架路径中缺少 .dylib 文件,那么如何我是否会着手将它所查找的内容从 .dylib 更改为 .framework?
  • 如果路径看起来不完全像 ESDK.framework/ESDK,那么您可以提供包含“.framework”的相对路径,它将被逐字使用(查看上述路径) .你给loadLibrary的路径是什么?
  • 文件夹的本地库,以 Macintsoh 开头,然后是 EDSDK.framework。我没有在路径中包含下载文件夹。这是错误“无法加载库 'Macintosh/EDSDK.framework': dlopen(libMacintosh/EDSDK.framework.dylib, 9): image not found”
  • 将 EDSDK.framework 放入 ~/Library/Frameworks 或系统框架路径之一,否则 JNA 会尝试将其加载为常规共享库而不是框架。
  • 建立从 ~/Library/Frameworks/EDSDK.framework 到 /path/to/Macintosh/EDSDK.framework 的符号链接,然后调用名为“ESDK”的loadLibrary
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2018-11-07
  • 2012-12-21
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多