重命名Quicklook模板GeneratePreviewForURL.m会导致链接器错误

时间:2012-07-07 19:26:38

标签: objective-c xcode linker-errors quicklook

我使用的是稍微过时的Xcode版本(4.2.1,Apple clang版本3.0),这可能是一个问题,但是......无论如何都应该有效:

我创建了一个新的Quicklook插件项目(“File> New> New Project”,然后是“System Plugin> Quick Look Plug-in”)

然后我将GeneratePreviewForURL.c重命名为GeneratePreviewForURL.m(如上所述in the Apple docs

如果我尝试在文件中使用任何Objective-C代码,我会收到错误。例如,如果我将以下内容添加到GeneratePreviewForURL方法:

#include <Foundation/Foundation.h> // at start of file

NSMutableDictionary *blah;
[blah setValue:@"valuething" forKey:@"keything"];

我收到以下链接器错误:

Undefined symbols for architecture x86_64:
  "_objc_msgSend", referenced from:
      _GeneratePreviewForURL in GeneratePreviewForURL.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

导致问题的略微修剪/重新配置的链接器命令是:

cd ~/QuicklookExample

setenv MACOSX_DEPLOYMENT_TARGET 10.7

/Developer/usr/bin/clang
-arch x86_64 -bundle
-isysroot /Developer/SDKs/MacOSX10.7.sdk
-L/snip -F/snip -filelist /snip/QuicklookExample.LinkFileList
-mmacosx-version-min=10.7
-framework QuickLook
-framework ApplicationServices
-framework CoreServices
-framework CoreFoundation
-o /snip/QuicklookExample

1 个答案:

答案 0 :(得分:2)

您必须至少将基础框架添加到链接库。

请注意,这里缺少的是libobjc,它应该直接链接,因为clang应该理解你的代码实际上是Objective-C。