6

我正在尝试编写一个 QuickLook 生成器。为此,我需要链接到我创建的框架。但是,一旦我链接到所述框架,qlmanage通过告诉我拒绝加载我的插件:

[ERROR] Can't load plug-in at /path/to/my-ql.qlgenerator: The bundle “my-ql” couldn’t be loaded because it is damaged or missing necessary resources.

我已阅读有关链接、框架和 QuickLook 的所有相关教程,但没有找到答案。

到目前为止我发现/排除的事情

  • 架构:当包含框架为 32 位二进制时,整个链接过程出错,所以这似乎不是问题。
  • 我已经验证框架被复制到插件包中Contents/Frameworks
  • 框架的安装路径设置为@executable_path/../Frameworks

此外,当在另一个应用程序中使用该框架时,一切顺利。我能理解的唯一可能的解释如下:执行时qlmanage@executable_path实际指向该二进制文件,因此永远找不到我的框架。如果是这种情况,我必须如何设置安装路径以仍然允许相对于插件的位置?我不想在全球范围内安装我的框架。

编辑

otool -L在构建的 QuickLook 插件上产生以下结果:

/System/Library/Frameworks/QuickLook.framework/Versions/A/QuickLook (compatibility version 1.0.0, current version 327.4.0)
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 38.0.0)
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 44.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 550.29.0)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 15.0.0)
@executable_path/../Frameworks/PESHandler.framework/Versions/A/PESHandler (compatibility version 1.0.0, current version 1.0.0) <== *this is my framework*
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)

otool -D在我的框架上产生这个:

@executable_path/../Frameworks/PESHandler.framework/Versions/A/PESHandler

该框架不需要垃圾收集。

4

2 回答 2

7

@executable_path 针对进程的主要可执行映像进行解析。那将是 quicklook 守护进程,而不是您的插件。您应该改用@loader_path。

这是一篇涵盖此内容的博客文章。

于 2011-04-29T05:52:45.223 回答
1

你没有说你使用你的框架的应用程序是否需要垃圾收集。你也没有说你的框架是否需要它。您可能正在尝试使用垃圾收集来编译您的 Quick Look 生成器。但是,根据Nicholas Riley 对这篇文章的回复,“Quick Look 生成器不会在垃圾收集开启的情况下进行编译” 。仅此一项就可以解释为什么,正如您所说,“整个链接过程出现故障”,如果这确实是您正在尝试的。

由于不熟悉您的框架,我不知道消除对垃圾收集的依赖的过程将如何涉及(如果再次出现这种情况),但您的框架可能需要重新设计才能在 Quick Look 生成器中使用。

于 2011-04-28T13:49:44.833 回答