2012-05-17 46 views
0

我想將此iOS lib PTImageAlbumViewController添加到我正在處理的現有項目中,並且出現編譯錯誤。有一個包含示例項目,它依賴於其他庫。示例項目工作得很好,但無法將其移植到我自己的項目中而沒有錯誤。我試圖從項目中直接拖拽文件到項目,但它仍然不能正常工作如何修復編譯Mach-O鏈接器錯誤

有什麼我失蹤了嗎?

Undefined symbols for architecture armv7: "_OBJC_METACLASS_$_NetworkPhotoAlbumViewController", referenced from: _OBJC_METACLASS_$_PTImageAlbumViewController in PTImageAlbumViewController.o "_OBJC_CLASS_$_NIPhotoAlbumScrollView", referenced from: _OBJC_CLASS_$_PTImageAlbumView in PTImageAlbumView.o "_OBJC_CLASS_$_NetworkPhotoAlbumViewController", referenced from: _OBJC_CLASS_$_PTImageAlbumViewController in PTImageAlbumViewController.o "_NIPathForBundleResource", referenced from: -[PTImageAlbumViewController viewDidLoad] in PTImageAlbumViewController.o "_OBJC_METACLASS_$_NIPhotoAlbumScrollView", referenced from: _OBJC_METACLASS_$_PTImageAlbumView in PTImageAlbumView.o ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation)

+1

這可能是由於你的項目缺少框架 –

+0

teofilo是正確的,你可能想要將它添加到你的目標..也許你必須改變標題搜索路徑 –

+0

我有那些.h和.m文件在項目已經。我如何確定哪個框架丟失? – ChickensDontClap

回答

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

非常感謝您的額外信息和資源!原來,我將這些文件添加到項目中,但它們不是編譯源的一部分。不知道爲什麼他們沒有自動添加,因爲我確實有'添加到目標'按鈕選中。 – ChickensDontClap

0

有時,當你創建一個新的類文件的Xcode不將其添加到「編譯源」

選擇項目圖標>目標>構建階段>編譯源代碼

,然後點擊+按鈕添加Class * .m文件。