我刚将我的项目从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
答案 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 =所有对不起男人:(希望这有帮助。