символ (ы) не найден для архитектуры i386 - PullRequest
110 голосов
/ 30 января 2011

При попытке скомпилировать с Xcode, я получаю следующую ошибку:

  **Ld /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher normal i386
    cd /Users/doronkatz/Sites/xCode/iKosher
    setenv MACOSX_DEPLOYMENT_TARGET 10.6
    setenv PATH "/Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Xcode4/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Xcode4/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk -L/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -L/Users/doronkatz/Sites/xCode/iKosher -F/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -filelist /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Intermediates/iKosher.build/Debug-iphonesimulator/iKosher.build/Objects-normal/i386/iKosher.LinkFileList -mmacosx-version-min=10.6 -all_load -ObjC -Xlinker -objc_abi_version -Xlinker 2 -lz -framework Security -framework CFNetwork -framework CoreData -framework Foundation -framework UIKit -framework CoreGraphics -framework QuartzCore -o /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher

Undefined symbols for architecture i386:
  "_UTTypeCreatePreferredIdentifierForTag", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_UTTypeCopyPreferredTagWithClass", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_kUTTagClassMIMEType", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_kUTTagClassFilenameExtension", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_SCNetworkReachabilitySetCallback", referenced from:
      -[Reachability startNotifier] in Reachability.o
  "_SCNetworkReachabilityScheduleWithRunLoop", referenced from:
      -[Reachability startNotifier] in Reachability.o
  "_SCNetworkReachabilityUnscheduleFromRunLoop", referenced from:
      -[Reachability stopNotifier] in Reachability.o
  "_SCNetworkReachabilityCreateWithName", referenced from:
      +[Reachability reachabilityWithHostName:] in Reachability.o
  "_SCNetworkReachabilityCreateWithAddress", referenced from:
      +[Reachability reachabilityWithAddress:] in Reachability.o
  "_SCNetworkReachabilityGetFlags", referenced from:
      -[Reachability currentReachabilityStatus] in Reachability.o
      -[Reachability isReachable] in Reachability.o
      -[Reachability isConnectionRequired] in Reachability.o
      -[Reachability isConnectionOnDemand] in Reachability.o
      -[Reachability isInterventionRequired] in Reachability.o
      -[Reachability isReachableViaWWAN] in Reachability.o
      -[Reachability isReachableViaWiFi] in Reachability.o
      ...
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status**

Не уверен, что это значит.

Ответы [ 17 ]

91 голосов
/ 30 января 2011

Если такие вещи появляются внезапно, это обычно означает, что в проекте отсутствуют некоторые необходимые ему фреймворки.Для библиотек и зависимых проектов могут потребоваться фреймворки, поэтому, если вы недавно добавили один фреймворк, это может вызвать эту ошибку.

Чтобы добавить фреймворки, щелкните правой кнопкой мыши имя проекта в представлении проекта, выберите Add, затемвыберите Existing frameworks... из списка.Затем найдите фреймворк с пропущенными символами.

Что касается того, как вы находите, какие фреймворки вам нужны, я нашел использование Google проще всего, хотя вы, вероятно, могли бы также использовать поиск справки Xcode.Ищите один из символов, стараясь изо всех сил придумать непонятное имя (например, SCNetworkReachabilityGetFlags), и тогда первая ссылка на документацию, которую вы найдете на developer.apple.com, часто является правильной.Вы обычно не должны охотиться очень далеко.В данном случае это следующая страница:

https://developer.apple.com/documentation/systemconfiguration/scnetworkreachability-g7d

Затем в верхней части страницы указывается, какой фреймворк использовать, SystemConfiguration в данном случае.Поэтому добавьте это в проект и снова скомпилируйте.

Затем просто продолжайте делать это, пока он не заработает ...

Редактировать: я никогда не использовал симулятор, но это то, что вы делаетена устройстве - я предполагаю, что это то же самое ...

63 голосов
/ 31 октября 2011

Иногда есть исходные файлы, которые отсутствуют в вашей цели.

  1. проверяет, какие символы отсутствуют
  2. target-> фазы сборки-> исходный код компиляции
  3. добавьте отсутствующие исходные файлы, если их нет в списке
  4. команда + b для блаженства

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

49 голосов
/ 30 января 2011

Вы используете ASIHTTPRequest, поэтому вам нужно настроить свой проект.Прочитайте вторую часть здесь

https://allseeing -i.com / ASIHTTPRequest / Инструкции по настройке

31 голосов
/ 28 марта 2011

Я решил это, используя следующий метод (для XCode 4):

1) Выберите проект в окне навигации проекта, в котором справа будет отображаться сводка проекта

2) Выберите 4-ую вкладкуэтапы сборки

3) Выберите ссылку на двоичный файл с опцией библиотеки

4) Добавьте фреймворк, для которого вы получаете

5) Переместите фреймворк из главной папки в папку фреймворков

6) Создайте его заново и ошибки исчезнут.

16 голосов
/ 08 мая 2013

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

Например, если в определении метода показана ошибкав общем.м enter image description here

16 голосов
/ 20 марта 2012

Мысль добавить свое решение для этого, потратив несколько часов на ту же ошибку: (

Ребята выше были правы, что первое, что вы должны проверить, это то, что вы пропустили добавление каких-либо фреймворков, см.шаги, предоставленные Pruthvid выше.

Моя проблема, как оказалось, была в том, что класс компиляции отсутствовал после того, как я удалил его, а затем снова добавил его.

Проверьте ваши "источники компиляции"как показано для сообщаемых классов ошибок. Добавьте все отсутствующие классы, которые вы создали.

7 голосов
/ 16 августа 2011

Убедитесь, что отсутствующий фреймворк действительно указан в "Целевые / Фазы сборки / Связать двоичные файлы с библиотеками" , если не просто добавить его. Как упоминалось ранее, это обычно указывает на отсутствующую структуру.

В моем проекте было два идентичных фреймворка, перечисленных, когда я удалил один из них, у меня была эта ошибка, потому что он также удалил ее из списка «Link Binary With Libraries». Я добавил обратно, и проблема исчезла (и у меня все еще есть две платформы в списке)

5 голосов
/ 31 октября 2012

Я исправил аналогичную ошибку в своем проекте, изменив Настройки сборки> Архитектуры для ВСЕХ моих целей.

Проблема: Когда я обновил Xcode 4.4 до Xcode 4.5, мой проект по-прежнему нормально компилировался на симуляторе, но не компилировался на устройствах.На устройствах он выдавал символ ошибки "не найден для архитектуры armv7s", вместе с вводящими в заблуждение "Apple Mach-O Linker Error" и "clang: error: сбой команды linker с кодом выхода 1 (используйте -v, чтобы увидеть вызов). "

Причина (в моем случае): У моего проекта было несколько целей, и даже несмотря на то, что Настройки сборки> Архитектуры для основной цели был настроен на включение архитектуры armv7s, основная цель зависела от другой цели (перечисленной в разделе «Фазы сборки»> «Зависимости»), и я не думал сбросить настройки сборки> Архитектуры для этой другой цели, и мне пришлось изменить этовключить armv7s.Я полагаю, что симулятор и устройство работают на разных архитектурах, и поэтому симулятор был в порядке, а устройство - нет.

4 голосов
/ 30 января 2011

Зависит ли ваш проект от другого проекта и является ли цель в этом проекте прямой зависимостью от вашей основной цели? Если это так, и зависимость не установлена, зависимая цель может быть построена не для всех конфигураций (например, симулятор)

Просто дикое предположение.

3 голосов
/ 14 апреля 2011

Другая ситуация, которая может вызвать эту проблему, - это если ваш код вызывает C ++ или вызывается кодом C ++.У меня была проблема с утилитой моего собственного .c файла, отображаемой как «символ не найден» при вызове из Obj-C.Исправление состояло в том, чтобы изменить тип файла: в Xcode 4, используйте расширенную информационную панель, чтобы установить тип файла "Источник Objective C ++";в Xcode 3 используйте «Get Info», чтобы изменить тип файла на «source.cpp.objcpp».

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