2011-09-27 96 views
0

我剛剛將我的項目從Xcode 3轉換爲4並更新到最新的SDK。該項目運行正常,當我在XCode中3打開它,但也有錯誤,當我在XCode中運行4XCode更新 - iOS鏈接錯誤

我得到以下鏈接錯誤:

Undefined symbols for architecture armv7: 
    "_objc_memmove_collectable", referenced from: 
     __ZN9cPlaylistaSERKS_ in MediaItemManager.o 
ld: symbol(s) not found for architecture armv7 

從我所瞭解memmove_collectable它與周圍的垃圾收集記憶有關。然而在我的項目設置設置爲:

Obj-C Garbage Collection - Unsupported 

我什至不知道有iOS的垃圾收集。任何人都知道我可能會做錯什麼?

有些幫助解除名稱也很棒。我的MediaItemManager是一個C++類,它調用new/delete和memset/memcpy。但是,他們都不在名爲播放列表的功能中。 MediaItemManager中包含單詞Playlist。 cPlaylist不會調用memset/memcpy函數。

cPlaylist* AllSongsPlaylist() { return mSongList; } 
pPlaylistVec Playlists() { return &mPlaylists; } 
cPlaylist* PlaylistByIndex(uint32 idx); 
cPlaylist* PlaylistByName(NSString* name); 

... 

    std::vector<cPlaylist> mPlaylists; 

    typedef std::vector<cPlaylist>*     pPlaylistVec; 

編輯: 這似乎與ARMv7的ARMv6的還是要發生。這可能是XCode的安裝問題,我不確定XCode的安裝應該如何。我確實需要添加這個符號鏈接才能在安裝後獲得XCode。 iPhone Codesign object file format invalid or unsuitable

回答

1

所以你可能會討厭這個,因爲它需要一個小時左右,但我必須做的這些鏈接器錯誤是完全卸載xcode,然後重新啓動重新安裝xcode並重新啓動。通常這是問題,因爲安裝xcode 3然後xcode 4而不卸載xcode 3通常會導致嚴重的問題。所以你必須去終端和CD到你的開發文件夾和sudo/Library/uninstall-devtools --mode = all對不起人:(希望這有助於我)

+1

我並非如此當然可以。 。您可以將多個Xcode版本並排安裝在單獨的目錄中,只要您始終安裝較新的版本即可。 (你不能安裝版本X,然後安裝X-1;這會使事情變得糟糕。)安裝程序允許你選擇一個備用位置。「新的」基於App Store的安裝程序將移動/開發人員放在一邊(將其重命名爲/Developer-x.y.z,x.y.z是之前安裝的版本號),並重新安裝到/ Developer中。 –

+0

你是對的馬克,這確實最終工作。安裝中必須發生奇怪的事情。 – TurqMage

1

我假設你的C++代碼在庫中。你重建了圖書館嗎?

錯誤提示您的庫需要重建,因爲它不包含armv7符號,正如錯誤所示。換句話說,它不是一個通用圖書館。您需要重建該庫,或者,更改您的主要項目以僅爲armv6構建。

值得注意的是,Xcode4默認僅爲armv7構建。如果您想支持4.2以前的iOS4版本,則必須在構建設置中將armv6添加到支持的體系結構中。而且,您必須相應地重建任何相關庫。

這是否有意義?

+0

我沒有將它設置爲庫現在,只是一個包含在其他obj-c類中的C++類,我將這個項目轉換爲使用armv6,我從Valid Archs中移除了armv7,並將archs從$(ARCHS_STANDARD_32_BIT)改爲了armv6,但我仍然遇到類似的錯誤,現在只要用armv6 – TurqMage

+0

嗯...嗯,我還沒有嘗試將C++與Objective-C混合使用,儘管我已經使用了C語言。我想知道如果C++名稱是mangling是問題,那麼您可能需要設置一些C++的編譯器標誌,這樣名字不會被破壞,這樣就可以讓鏈接器解析這些名字。你可能必須爲你的C++方法編寫C封裝器,儘管這看起來像是一個破解。 –