2013-03-29 68 views
2

我正在帮助编写一个跨平台的停止运动程序,并且在Windows上它工作得很好。对于那些不知道的人,停止动画只是动画的一个奇特术语。该程序允许用户将尼康,卡农和网络摄像头插入电脑,并让节目显示现场的实时视图,然后有能力从那里手动控制摄像机。包括的是佳能一个框架文件的相机,用路径定义如图如何在Java中的Mac上定义框架路径?

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

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

误差以抛出的“公共静态INT ......”的说法,图像不被发现。我尝试了很多次,重新定义了路径,移动了框架,并使用了与我正在使用的框架相同的其他各种框架。请记住,这在Windows上完美无瑕,但在Mac上却存在问题。

在mac上的框架是不同的,还是它们的定义不同?我看过,没有找到其他解决方案。

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

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

+0

您可能试图使用64位JVM加载32位库。用'-d32'运行JVM或者加载64位版本的EDSDK(下载中的EDSDK_64)。 – technomage

回答

1

JNA将根据核心框架名称(本例中为EDSDK),连续尝试从〜/ Library/Frameworks,/ Library/Frameworks和/ System/Library/Frameworks加载框架。

如果loadLibrary调用成功,则找到该库。如果图书馆没有找到,你会得到一个UnsatisfiedLinkError

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

编辑

下面是如何使一个符号链接,这样的路径看起来更像是JNA期待。当这样做成功

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

,你应该看到上市时以下(LS)的符号链接:从终端(运行Terminal.app)

% 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合并两者。

+0

好的。所以错误不是来自错误的路径,我认为我发现了这个问题,但我不知道如何解决它:错误是指出框架路径中缺少.dylib文件,所以我是否会改变从.dylib到.framework的外观? – user2221529

+0

如果路径看起来不像ESDK。框架/ ESDK,那么你可以提供包含“.framework”的相对路径,它将逐字使用(查看上面提到的路径)。你给“loadLibrary”什么路径? – technomage

+0

该文件夹的本地库以Macintsoh开头,然后是EDSDK.framework。我不包括路径中的下载文件夹。这是错误“无法加载库'Macintosh/EDSDK.framework':dlopen(libMacintosh/EDSDK.framework.dylib,9):找不到图像” – user2221529