如何修复编译Mach-O链接器错误

我试图添加这个iOS lib PTImageAlbumViewController到我正在工作的一个现有的项目,我得到编译错误。 有一个示例项目,并依赖于其他几个库。 该示例项目工作得很好,但我不能没有错误地将其迁移到我自己的项目。 我试图从项目中拖拽文件,直接从项目拉,但它仍然无法正常工作

有什么我失踪?

对于build筑的ARMv7未定义的符号: “_OBJC_METACLASS _ $ _ NetworkPhotoAlbumViewController”,从引用:_OBJC_METACLASS _ $ _ PTImageAlbumViewController在PTImageAlbumViewController.o “_OBJC_CLASS _ $ _ NIPhotoAlbumScrollView”,从引用:_OBJC_CLASS _ $ _ PTImageAlbumView在PTImageAlbumView.o “_OBJC_CLASS _ $ _ NetworkPhotoAlbumViewController”,从引用:_OBJC_CLASS _ $ _ PTImageAlbumViewController在PTImageAlbumViewController.o“_NIPathForBundleResource”中引用:PTImageAlbumViewController.o中的“[PTImageAlbumViewController viewDidLoad]”_OBJC_METACLASS _ $ _ NIPhotoAlbumScrollView“,引用来自:_OBJC_METACLASS _ $ _ PTImageAlbumView.o中的PTImageAlbumView ld:符号(s)未find架构armv7 clang:error :链接器命令失败,退出代码1(使用-v查看调用)

它找不到的是nimbus文件。

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

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

如果是这样,另一种可能性是,由于某种原因,这根本就不是为了这个架构而build造的。 您可以通过将树从DerivedData目录导航到目标文件的存储位置,并使用nm来search目标文件中的缺失符号来查找。

我的机器上的示例:

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”的事实意味着它们是在这个目标文件中定义的。 您可以从nm man页面find所有nm输出的含义。

有时当你创build一个新的Class文件时,Xcode不会将它添加到“Compiled Sources”

selectProject Icon> Targets> Build Phases> Compile Sources

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