При попытке скомпилировать с 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**
Не уверен, что это значит.
источник
Я решил это с помощью следующего метода (для XCode 4):
1) Выберите проект в окне навигации по проекту, в котором справа отобразится сводка проекта.
2) Выберите этапы сборки 4-й вкладки
3) Выберите Связать двоичный файл с опцией библиотеки.
4) Добавьте фреймворк, для которого вы получаете
5) Переместите фреймворк из основной папки в папку фреймворков.
6) Создайте заново, и ошибки исчезнут.
источник
Проблема в том, что целевое членство для добавленного поля отсутствует для целевого приложения. Поэтому выберите файл и установите флажок в поле целевого членства.
Например, если ошибка отображается в общем определении метода. M
источник
Подумал добавить свое решение для этого, потратив несколько часов на ту же ошибку :(
Ребята, приведенные выше, были правы: первое, что вы должны проверить, это не пропустили ли вы добавление каких-либо фреймворков, см. Шаги, указанные выше Pruthvid.
Моя проблема, как оказалось, заключалась в том, что класс компиляции отсутствовал после того, как я удалил его, а позже снова добавил его.
Проверьте свои «Источники компиляции», как показано, на предмет сообщаемых классов ошибок. Добавьте любые недостающие классы, которые вы создали.
источник
Убедитесь, что отсутствующий фреймворк действительно указан в разделе «Цель / Этапы сборки / Связать двоичный файл с библиотеками», если не просто добавить его. Как упоминалось ранее, это обычно указывает на отсутствующую структуру.
В моем проекте были указаны две идентичные структуры, когда я удалил одну из них, у меня была эта ошибка, потому что она также удалила ее из списка «Связать двоичный файл с библиотеками». Я добавил обратно, и проблема исчезла (и у меня все еще указаны две платформы)
источник
Я исправил аналогичную ошибку в своем проекте, изменив настройки сборки> Архитектуры для ВСЕХ моих целей.
Проблема: когда я обновился с Xcode 4.4 до Xcode 4.5, мой проект все еще отлично компилировался на симуляторе, но не компилировался на устройствах. На устройствах он выдал ошибку «символ (ы) не найден для архитектуры armv7s» вместе с вводящей в заблуждение «Apple Mach-O Linker Error» и «clang: error: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v, чтобы увидеть вызов ). "
Причина (в моем случае): у моего проекта было несколько целей, и хотя настройки сборки> Архитектуры для основной цели были настроены на включение архитектуры armv7s, основная цель зависела от другой цели (указанной в разделе «Фазы сборки»> «Зависимости») и Я не подумал сбросить настройки сборки> Архитектуры для этой другой цели, и мне пришлось изменить это, чтобы включить armv7s. Я полагаю, что симулятор и устройство работают на разных архитектурах, и поэтому симулятор работал нормально, а устройство - нет.
источник
Зависит ли ваш проект от другого проекта, и настроена ли цель в этом проекте, чтобы быть прямой зависимостью от вашей основной цели? Если это так и зависимость не настроена, зависимая цель может быть построена не для всех конфигураций (например, симулятор).
Просто дикая догадка.
источник
Другая ситуация, которая может вызвать эту проблему, - это если ваш код вызывает C ++ или вызывается кодом C ++. У меня была проблема с моей служебной функцией файла .c, которая отображалась как «символ не найден» при вызове из Obj-C. Исправление заключалось в изменении типа файла: в Xcode 4 используйте расширенную информационную панель, чтобы установить тип файла на «Objective-C ++ Source»; в Xcode 3 используйте «Get Info», чтобы изменить тип файла на «source.cpp.objcpp».
источник
В моем случае ни одно из опубликованных решений не помогло. Мне пришлось удалить проект и произвести новую проверку с сервера SVN . К счастью, проект был размещен в системе контроля версий. Не знаю, что бы я сделал иначе.
источник
В проекте C ++, использующем определенный шаблонный класс, при получении той же ошибки я выбрал файл .cpp с определенным шаблонным классом в навигаторе проекта, затем «Удалить»> «Удалить ссылку». Также связанный файл .h, хотя он все еще упоминается в проекте, должен иметь инструкцию #include для .cpp следующим образом:
Если хотите, то на github есть простой пример проекта :
Это небольшая уловка косвенного обращения, и я не помню исходный источник этого обходного пути.
источник
Если эта ошибка появляется внезапно, это означает, что в проекте отсутствуют некоторые фреймворки. Для библиотек и зависимых проектов могут потребоваться фреймворки, поэтому, если вы добавили их недавно, это может вызвать эту ошибку.
Чтобы добавить фреймворки, щелкните правой кнопкой мыши имя проекта в представлении проекта, выберите «Добавить», а затем выберите «Существующие фреймворки» из списка. Затем найдите рамку с отсутствующими символами.
Другое дело, если вы добавили какие-либо классы в скомпилированные ресурсы и удалили эти классы из проекта, появится ошибка. Лучше всего удалить классы из ресурсов компиляции (Настройки сборки -> источники компиляции), которые были удалены из проекта.
В моем случае я добавил в проект классы admob и скомпилировал проект. В более позднем случае я не хочу включать admob в свой проект, поэтому я удалил ссылки на классы admob из своего проекта. Когда произошла эта ошибка, я удалил класс .m моего admob из ресурсов компиляции, решив эту проблему.
источник
Это случилось со мной, когда я пытался скопировать демо-библиотеку PSPDFKIT в мой проект. Я выполнил все инструкции на сайте + все предложения на этой странице ... по какой-то причине он продолжал выдавать указанную выше ошибку, проблема заключалась в том, что если я использовал grep для сообщения в методе ошибки ... оно появлялось только в двоичном ( очевидно у меня нет доступа к исходному коду б / ц я должен за это платить).
Я заметил это на странице с инструкциями:
Итак, я просмотрел этот файл конфигурации и нашел следующее:
Затем я перешел к образцу проекта, предоставленному автором указанной библиотеки ... и заметил, что предыдущие флаги были дословно скопированы с другими флагами компоновщика в моих настройках сборки ... однако в моем проекте ... их не было! .. Итак Я просто скопировал и вставил их в настройки сборки моего проекта другие флаги компоновщика, и все сработало!
отнимите точку: если вы полагаетесь на какой-то файл .xcconfig в своей настройке, дважды проверьте образец кода или что-то в этом роде и убедитесь, что он действительно был применен .. в моем случае он был применен неправильно
источник
Другая причина, по которой это может происходить, - это ОБНОВЛЕНИЕ SDK.
Если вы просто удалите группу, а затем перетащите новую папку в проект, «Путь поиска библиотеки» будет содержать оба SDK. Чтобы решить эту проблему, просто удалите старый путь к SDK.
источник
Я использовал CLGeocoder без добавления Core.Location Framework. Обычно эта ошибка может означать несколько вещей. Надеюсь, это поможет кому-то другому.
источник
Раньше я был озадачен этим, только чтобы понять, что добавил @interface только для данных и забыл добавить пустой блок @implementation.
источник
Столкнулся с этой проблемой в Xcode 11, исправлением было изменение минимальной цели развертывания с 10.0 на 11.0, надеюсь, это кому-то поможет :)
источник