символ (ы) не найден для архитектуры 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 ]

3 голосов
/ 28 мая 2012

В моем случае ни одно из опубликованных решений не сработало. Мне пришлось удалить проект и сделать новую проверку с сервера SVN .К счастью, проект был размещен в системе контроля версий.Не знаю, что бы я сделал иначе.

1 голос
/ 14 января 2013

Это случилось со мной при попытке скопировать демонстрационную библиотеку PSPDFKIT в мой проект.Я следовал всем инструкциям на сайте + все предложения на этой странице ... по какой-то причине он продолжал выдавать вышеуказанную ошибку, проблема заключалась в том, что если я щелкнул сообщение в методе ошибки ... оно появилось только в двоичном (очевидно, у меня нет доступа к исходному коду, потому что я должен заплатить за него).

Я заметил это на странице инструкции:

enter image description here

Поэтому я перешел к внутренностям этого конфигурационного файла и обнаружил следующее:

OTHER_LDFLAGS=$(inherited) -ObjC -fobjc-arc -lz -framework CoreText -framework CoreMedia -framework MediaPlayer -framework AVFoundation -framework ImageIO -framework MediaPlayer -framework MessageUI -framework CoreGraphics -framework Foundation -framework QuartzCore -framework AVFoundation -framework CFNetwork -framework MobileCoreServices -framework SystemConfiguration -weak_framework UIKit

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

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

1 голос
/ 29 ноября 2012

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

Чтобы добавить рамки, щелкните правой кнопкой мыши имя проекта в представлении проекта, выберите «Добавить», затем выберите «Существующие платформы» из списка. Затем найдите рамки с символами, которые вам не хватает.

Другое дело, если вы добавили какие-либо классы в скомпилированные ресурсы и удалили эти классы из проекта, то появится ошибка. Лучше всего удалить классы из ресурсов компиляции (Настройки сборки -> Исходники компиляции), которые были удалены из проекта.

В моем случае я добавил классы admob в проект и скомпилировал проект. В более позднем случае я не хочу включать admobs в свой проект, поэтому я удалил ссылки классов admob из моего проекта. Когда эта ошибка произошла, я удалил .m класс моего admob из ресурсов компиляции, и решил эту проблему.

1 голос
/ 11 октября 2012

В проекте C ++, использующем определенный шаблонизированный класс , получая ту же ошибку, я выбрал .cpp файл с определенным шаблонизированным классом в Навигаторе проекта, затем Удалить> УдалитьСсылка.Кроме того, связанный файл .h, хотя на него все еще ссылаются в проекте, должен иметь инструкцию #include для .cpp следующим образом:

#ifndef __CircularBuffer__CircularBufferT__
#define __CircularBuffer__CircularBufferT__

... snip ...

#include "CircularBufferT.cpp"
#endif /* defined(__CircularBuffer__CircularBufferT__) */

Если вы хотите увидеть, простой пример проекта - на github :

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

0 голосов
/ 08 февраля 2014

Я был озадачен этим раньше, только чтобы понять, что я добавил @interface только для данных и забыл добавить пустой блок @implementation.

0 голосов
/ 29 августа 2013

Я использовал CLGeocoder без добавления Core.Location Framework.В основном эта ошибка может означать несколько вещей.Я надеюсь, что это помогает кому-то еще.

0 голосов
/ 24 августа 2012

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

Если вы просто удалите группу, а затем перетащите новую папку в проект, «Путь поиска библиотеки» будет иметь оба пакета SDK.Чтобы решить, просто удалите старый путь SDK.

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