ImageIO链接器错误?

时间:2012-12-16 21:10:35

标签: objective-c macos cocoa linker javax.imageio

尝试使用ImageIO框架从图像中准备好元数据(例如kCGImagePropertyExifBodySerialNumberkCGImagePropertyExifLensModel)。

不幸的是,在编译链接器时遇到了麻烦:

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

ImageIO/CGImageProperties.h已导入corurse,目标配置中的“链接的框架和库”列表中包含ImageIO.framework

只有在我尝试使用kCGImagePropertyExifBodySerialNumberkCGImagePropertyExifLensModel时才会发生这种情况。使用相同的项目kCGImagePropertyExifFocalLengthkCGImagePropertyExifExposureTime没有任何问题

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这些常量似乎没有在ImageIO框架的SDK版本中定义。您可以使用以下命令自行检查:

nm /Volumes/Applications/Developer\ Tools/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/imageio | grep -F kCGImagePropertyExifBodySerialNumber 

(根据需要编辑Xcode的路径。)

我目前正在使用Lion计算机,同一框架的系统版本确实拥有它:

% nm /System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/imageio  | grep -F kCGImagePropertyExifBodySerialNumber
00000000000e4898 s _kCGImagePropertyExifBodySerialNumber

所以,我建议filing a bug然后,作为解决方法,在项目的构建设置中取消设置SDKROOT(“Base SDK”)。如果没有设置SDK,它应该使用您正在构建的系统的框架和标题。

该解决方法的缺点是,如果您使用Mountain Lion上引入的任何内容,您将无法在Lion上构建。