我正在尝试编写一个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的所有相关教程,但没有找到答案。
到目前为止我已经发现/排除了的事情,
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该框架不需要垃圾收集。
发布于 2011-04-29 05:52:45
@executable_path针对进程的主要可执行映像进行解析。那将是快速外观守护进程,而不是你的插件。您应该使用@loader_path代替。
下面是一个博客帖子,介绍这一点。
发布于 2011-04-28 13:49:44
您没有说明使用框架的应用程序是否需要垃圾收集。你也不知道你的框架是否需要它。您可能正在尝试使用垃圾收集编译快速外观生成器。但是,根据尼古拉斯·赖利对这篇文章的答复的说法,“快速外观生成器不会在垃圾收集的情况下被编译”。这本身就可以解释为什么,正如您所说的,“整个连接过程的错误”,如果这确实是您正在尝试的。
由于不熟悉您的框架,我不知道如何处理这个过程将消除对垃圾收集的依赖(如果同样是这样的话),但是您的框架可能需要重新工作才能在Quick生成器中使用。
https://stackoverflow.com/questions/5750032
复制相似问题