2011-04-21 60 views
6

我想寫一個QuickLook生成器。爲此,我需要鏈接到我創建的框架。但是,只要我對連結上述框架,qlmanage拒絕告訴我加載我的插件:將框架鏈接到QuickLook插件

[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實際上指向該二進制文件,因此我的框架從未找到。如果是這種情況,我如何設置安裝路徑仍然允許相對於插件的位置?我不想在全球安裝我的框架。

編輯

上內置QuickLook的插件otool -L產生如下:

/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 

框架不需要垃圾採集。

回答

7

@executable_path針對進程的主要可執行映像進行解析。這將是quicklook守護進程,而不是您的插件。您應該使用@loader_path。

這是覆蓋此的blog post

+0

謝謝。我實際上已經閱讀了一些這些變量(包括'@ loader_path'和'@ rpath'),但沒有多少考慮。 – 2011-04-29 09:33:37

+1

..按照http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/建議切換到「@ rpath」 – Jay 2017-05-02 07:42:37

1

你不會說你使用你的框架的應用程序是否需要垃圾收集。你也不會說你的框架是否需要它。您可能試圖使用垃圾回收來編譯您的Quick Look生成器。但是,根據Nicholas Riley's reply to this post,「Quick Look生成器不會被編譯爲垃圾回收」。正如你所說,這可以解釋爲什麼「整個鏈接過程出錯」,如果這確實是你正在嘗試的。我不知道這個過程是如何消除對垃圾收集的依賴的(如果情況再次如此),但是你的框架可能需要重新工作以便在Quick中使用看看發生器。

+0

不,我的框架和應用程序都沒有使用過GC測試過。當然,我已經閱讀了關於SO的所有相關討論(特別是,您鏈接的那個)。它說,會有泄漏,但泄漏不是我的問題(至少現在不是)。另外,我的評論「整個鏈接過程錯誤」只適用於(如我所說)「將框架包含爲32位二進制文​​件」時,我不明白它應該如何與垃圾 - 集合:當構建插件和框架*匹配*時,鏈接過程當然會很好。 – 2011-04-28 16:40:27