如何修复编译Mach-O Linker错误

时间:2012-05-17 20:10:58

标签: ios xcode compiler-errors

我正在尝试将此iOS lib PTImageAlbumViewController添加到我正在处理的现有项目中,并且我遇到了编译错误。有一个示例项目,它依赖于其他几个库。示例项目工作正常但我无法将其迁移到我自己的项目而没有错误。我尝试通过将项目从项目拖到项目直接从项目中提取文件,但它仍无法正常工作

我有什么遗失的吗?

  

架构armv7的未定义符号:     “_OBJC_METACLASS _ $ _ NetworkPhotoAlbumViewController”,引自:         PTImageAlbumViewController.o中的_OBJC_METACLASS _ $ _ PTImageAlbumViewController     “_OBJC_CLASS _ $ _ NIPhotoAlbumScrollView”,引自:         PTImageAlbumView.o中的_OBJC_CLASS _ $ _ PTImageAlbumView     “_OBJC_CLASS _ $ _ NetworkPhotoAlbumViewController”,引自:         PTImageAlbumViewController.o中的_OBJC_CLASS _ $ _ PTImageAlbumViewController     “_NIPathForBundleResource”,引自:          - PTImageAlbumViewController.o中的[PTImageAlbumViewController viewDidLoad]     “_OBJC_METACLASS _ $ _ NIPhotoAlbumScrollView”,引自:         PTImageAlbumView.o中的_OBJC_METACLASS _ $ _ PTImageAlbumView   ld:找不到架构armv7的符号   clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

2 个答案:

答案 0 :(得分:1)

它找不到的是nimbus文件。

如果您已将nimbus和SDURLCache文件添加到项目中,那么只需要确保它们包含在您的应用程序目标中。

确保所有文件都进入您的项目并且位于正确的目标中。例如,第一个错误与NetworkPhotoAlbumViewController.m有关。该文件是否在您的项目和正确的目标中?

如果是这样,另一种可能性是,由于某种原因,它根本就没有为这种架构构建。您可以通过将DerivedData目录中的树导航到目标文件的存储位置并使用nm在目标文件中搜索缺失的符号来查找。

我机器上的示例:

cd /Users/username/Library/Developer/Xcode/DerivedData/AlbumDemo-eyqszubjyqhczreurkblqktoxjja/Build/Intermediates/AlbumDemo.build/Debug-iphonesimulator/AlbumDemo.build/Objects-normal/i386

nm NetworkPhotoAlbumViewController.o | grep _NetworkPhotoAlbumViewController
00000000 t -[NetworkPhotoAlbumViewController shutdown_NetworkPhotoAlbumViewController]
0000e0fc s -[NetworkPhotoAlbumViewController shutdown_NetworkPhotoAlbumViewController].eh
0000cde8 S _OBJC_CLASS_$_NetworkPhotoAlbumViewController
0000c9b4 S _OBJC_IVAR_$_NetworkPhotoAlbumViewController._activeRequests
0000c9bc S _OBJC_IVAR_$_NetworkPhotoAlbumViewController._highQualityImageCache
0000c9b0 S _OBJC_IVAR_$_NetworkPhotoAlbumViewController._queue
0000c9b8 S _OBJC_IVAR_$_NetworkPhotoAlbumViewController._thumbnailImageCache
0000cdfc S _OBJC_METACLASS_$_NetworkPhotoAlbumViewController
0000cfe0 s l_OBJC_$_INSTANCE_METHODS_NetworkPhotoAlbumViewController
0000d084 s l_OBJC_$_INSTANCE_VARIABLES_NetworkPhotoAlbumViewController
0000d0e0 s l_OBJC_$_PROP_LIST_NetworkPhotoAlbumViewController
0000d100 s l_OBJC_CLASS_RO_$_NetworkPhotoAlbumViewController
0000cfb8 s l_OBJC_METACLASS_RO_$_NetworkPhotoAlbumViewController

这些符号在第二列中没有“U”这一事实意味着它们是在此目标文件中定义的。您可以从the nm man page找到所有nm输出的含义。

答案 1 :(得分:0)

有时,当您创建新的Class文件时,Xcode不会将其添加到“Compiled Sources”

选择项目图标>目标>构建阶段>编译来源

然后单击+按钮添加Class * .m文件。