XCode更新 - iOS链接错误

时间:2011-09-27 20:45:52

标签: iphone ios xcode linker garbage-collection

我刚将我的项目从Xcode 3转换为4并更新到最新的SDK。当我在XCode 3中打开它时,项目运行正常,但是当我在XCode 4中运行时出现错误。

我收到以下链接错误:

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

2 个答案:

答案 0 :(得分:1)

我假设您的C ++代码在库中。你重建了图书馆吗?

该错误表明您的库需要重建,因为它不包含armv7符号,如错误所示。换句话说,它不是一个通用的库。您需要重建该库,或者,将主项目更改为仅为armv6构建。

值得注意的是,Xcode4默认只为armv7构建。如果要支持4.2之前的iOS4版本,则必须在构建设置中将armv6添加到支持的体系结构中。 AND,您必须相应地重建任何依赖库。

这有意义吗?

答案 1 :(得分:1)

所以你可能会讨厌这个,因为它需要一个小时左右,但我与这些链接器错误有关的是完全卸载xcode然后重新启动重新安装xcode并重新启动。通常这是问题,因为安装xcode 3然后xcode 4而不卸载xcode 3通常会导致很大的问题。所以你将不得不去终端和CD到你的开发者文件夹和sudo / Library / uninstall-devtools --mode =所有对不起男人:(希望这有帮助。