Ошибка компоновщика при компиляции приложения iOS 5 для симулятора - неопределенные символы: _objc_assign_global, _objc_assign_ivar и _objc_assign_strongCast - PullRequest
0 голосов
/ 03 ноября 2011

Мой проект больше не компилируется для симулятора iOS 5.0 после обновления до автоматического подсчета ссылок.Он по-прежнему безупречно компилируется для любого устройства iOS.

Кроме того, после обновления до iOS 5, но до обновления до автоматического подсчета ссылок, мой проект безупречно компилируется как для устройства, так и для симулятора.

Компоновщикговорит, что не может найти следующие символы:

  • _objc_assign_global
  • _objc_assign_ivar
  • _objc_assign_strongCast

Сначала я подумал, что могуотсутствует специальная платформа Simulator, но после добавления каждой доступной платформы все равно появляются те же ошибки.

Другая информация

  • Цель развертывания iOS: 4.0.
  • ОСэто Snow Leopard OSX 10.6.8 64bit
Undefined symbols for architecture i386:
  "_objc_assign_global", referenced from:
      +[InAppPurchaseManager sharedInAppPurchaseManager] in InAppPurchaseManager.o
      +[ThemeManager sharedThemeManager] in ThemeManager.o
      +[DownloadUpdatesManager sharedDownloadUpdatesManager] in DownloadUpdatesManager.o
      +[AudioManager sharedAudioManager] in AudioManager.o
      +[IOHelper sharedIOHelper] in IOHelper.o
      -[CKBezierPath svgStringPath] in CKBezierPath.o
      +[PreferencesManager defaultLineWidth] in PreferencesManager.o
      ...
  "_objc_assign_ivar", referenced from:
      -[InAppPurchaseManager init] in InAppPurchaseManager.o
      -[InAppPurchaseManager addTransactionObserver:] in InAppPurchaseManager.o
      -[InAppPurchaseManager removePurchaseTransactionObserver:] in InAppPurchaseManager.o
      -[InAppPurchaseManager purchaseProduct:forThemeIDType:] in InAppPurchaseManager.o
      -[InAppPurchaseManager productsRequest:didReceiveResponse:] in InAppPurchaseManager.o
      -[ThemeEditVC viewDidLoad] in ThemeEditVC.o
      -[ThemeEditVC setDelegate:] in ThemeEditVC.o
      ...
  "_objc_assign_strongCast", referenced from:
      +[SFHFKeychainUtils getPasswordForUsername:andServiceName:error:] in SFHFKeychainUtils.o
      +[SFHFKeychainUtils storeUsername:andPassword:forServiceName:updateExisting:error:] in SFHFKeychainUtils.o
      +[SFHFKeychainUtils deleteItemForUsername:andServiceName:error:] in SFHFKeychainUtils.o
      __replacePlaceholdersWithValues in Utility.o
      -[LocationManager checkForNewLocation:] in LocationManager.o
      -[LocationManager getNewLocationInStringFormat] in LocationManager.o
      ___52-[LocationManager getNewLocationInStringFormat]_block_invoke_0 in LocationManager.o
      ...
ld: symbol(s) not found for architecture i386

Редактировать:

В Objective-C для сборки мусора было установлено «Поддерживается», а не «Требуется».После установки значения «Обязательный» я получил сообщение об ошибке:

ld: /Users/teacher/drawingapp/FlurryLib/libFlurryAnalytics.a(FlurryAnalytics.o), созданный с несовместимыми настройками сборки мусора для связи с предыдущими .oфайлы для архитектуры Команда i386 /Developer_4_2_ios5/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang завершилась ошибкой с кодом выхода 1

После удаления библиотеки Flurry снова начали появляться предыдущие сообщения об ошибках.

Edit 2:

Похоже, сборка мусора поддерживается только для OS X, а не для iOS.Я до сих пор не понимаю, почему это позволило бы мне скомпилировать и запустить приложение на устройстве с включенной сборкой мусора, но не на симуляторе.

В любом случае, я только что установил сборку мусора на «Unsupported»но теперь он больше не будет компилироваться и запускаться на устройстве.

Теперь я получаю эту ошибку:

/Users/teacher/drawingapp/Main/Source/PurchaseThemeOptionVC.m 
1. /Users/teacher/drawingapp/Main/Source/PurchaseThemeOptionVC.m:52:1: current parser token '-'
2. /Users/teacher/drawingapp/Main/Source/PurchaseThemeOptionVC.m:39:1: LLVM IR generation of declaration 'PurchaseThemeOptionVC::viewDidLoad'
3. /Users/teacher/drawingapp/Main/Source/PurchaseThemeOptionVC.m:39:21: LLVM IR generation of compound statement ('{}')
clang: error: unable to execute command: Segmentation fault
clang: error: clang frontend command failed due to signal 2 (use -v to see invocation)

Ответы [ 2 ]

2 голосов
/ 03 ноября 2011

Компилятор должен ссылаться на эти функции, только если вы включили сборку мусора. Вы уверены, что эти объектные файлы не были скомпилированы с включенной сборкой мусора?

1 голос
/ 28 июля 2012

Компилятор должен ссылаться на эти функции, только если вы включаете сборку мусора

Не забывайте, что будут ссылки на символы _objc_assign_global/ivar/strongCast, если вы будете ссылаться на библиотеки, скомпилированные ссборка мусора включена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...