Обновление XCode - ошибка ссылки iOS - PullRequest
0 голосов
/ 28 сентября 2011

Я только что преобразовал свой проект из 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;

Edit: Кажется, это происходит с armv7 или armv6. Это может быть проблема установки с XCode, я не уверен, как должна выглядеть установка XCode. Мне пришлось добавить эту символическую ссылку, чтобы получить сборку XCode после установки. Неправильный или неподходящий формат файла объекта iPhone Codesign

Ответы [ 2 ]

1 голос
/ 28 сентября 2011

Так что вы, вероятно, возненавидите это, потому что это занимает около часа, но я должен был устранить эти ошибки компоновщика - полностью удалить xcode, а затем перезапустить, переустановить xcode и перезапустить. Обычно это проблема, потому что установка xcode 3, а затем xcode 4 без удаления xcode 3 обычно вызывает огромные проблемы. Поэтому вам нужно перейти в терминал и перейти к папке с папками разработчика и sudo / Library / uninstall-devtools --mode = все извините :( Надеюсь, это поможет.

1 голос
/ 28 сентября 2011

Я предполагаю, что ваш код C ++ находится в библиотеке.Вы перестроили библиотеку?

Ошибка предполагает, что ваша библиотека должна быть перестроена, потому что она не содержит символов armv7, как предполагает ошибка.Другими словами, это не универсальная библиотека.Вам нужно будет перестроить эту библиотеку, ИЛИ, изменить основной проект на сборку только для armv6.

Стоит отметить, что Xcode4 по умолчанию строит только для armv7.Если вы хотите поддерживать версии iOS4 более ранние, чем 4.2, вам нужно добавить armv6 в список поддерживаемых архитектур в настройках сборки.И, вы должны перестроить любые зависимые библиотеки соответственно.

Имеет ли это какой-то смысл?

...