Ответ 1
Вы используете ASIHTTPRequest, поэтому вам нужно настроить свой проект. Прочитайте вторую часть здесь
При попытке скомпилировать с помощью 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**
Не уверен, что это значит.
Вы используете ASIHTTPRequest, поэтому вам нужно настроить свой проект. Прочитайте вторую часть здесь
Если вы вдруг обнаружите такое явление, оно обычно означает, что в проекте отсутствуют некоторые необходимые ему фреймворки. Библиотекам и зависимым проектам могут потребоваться фреймворки, поэтому, если вы недавно добавили их, это может вызвать эту ошибку.
Чтобы добавить фреймворки, щелкните правой кнопкой мыши по имени проекта в представлении проекта, выберите Add
, затем выберите Existing frameworks...
из списка. Затем найдите фреймворк с отсутствующими символами.
Что касается того, как вы находите, какие фреймворки вам нужны, я нашел использование google самым простым, хотя вы, вероятно, могли бы также использовать поиск справки Xcode. Найдите один из символов, делая все возможное, чтобы выработать неповрежденное имя (например, SCNetworkReachabilityGetFlags
), а затем первая ссылка на документацию, которую вы найдете на сайте developer.apple.com, часто является правильной. Обычно вам не нужно охотиться очень далеко. В этом случае эта страница:
https://developer.apple.com/documentation/systemconfiguration/scnetworkreachability-g7d
Затем в верхней части страницы он сообщает вам, какую инфраструктуру использовать, SystemConfiguration
в этом случае. Поэтому добавьте это в проект и снова скомпилируйте.
Затем продолжайте делать это, пока это не сработает...
Изменить: я никогда не использовал симулятор, но это то, что вы делаете на устройстве - я предполагаю, что это то же самое...
Иногда есть исходные файлы, которые отсутствуют в вашей целевой папке.
Вы можете выбрать файлы, которые кажутся "отсутствующими", и проверить в правой панели служебных программ, что их флажки выделены для создаваемого объекта.
Я решил это, используя следующий метод (для XCode 4):
1) Выберите проект в навигационном окне проекта, в котором будет отображаться сводка проекта справа
2) Выберите фазы сборки 4-й вкладки
3) Выберите ссылку "Бинарный файл с библиотекой"
4) Добавьте фреймворк, для которого вы получаете
5) Переместите фреймворк из основной папки в папку фреймворков
6) Постройте его снова, и ошибки исчезнут.
Думал добавить мое решение для этого, потратив несколько часов на ту же ошибку :(
Ребята, приведенные выше, были верны, что первое, что вы должны проверить, это то, что вы пропустили добавление каких-либо фреймворков, см. Шаги, описанные Прутвидом выше.
Моя проблема, оказалось, была компиляционным классом, отсутствующим после того, как я удалил его, а затем снова добавил его обратно.
Проверьте "Источники компиляции", как показано для сообщений об ошибках. Добавьте в любые отсутствующие классы, которые вы создали.
Проблема заключается в том, что целевое членство для добавленной подачи отсутствует в целевой программе приложения. Выберите файл и добавьте галочку в поле целевого членства
Например, если ошибка, показанная в определении метода в common.m
Убедитесь, что отсутствующая структура фактически указана в разделе "Целевая/Сборка Фазы/Ссылка с бинарными библиотеками" , если не просто добавить ее. Как упоминалось ранее, это обычно указывает на недостающую структуру.
В моем проекте было две идентичные структуры, перечисленные, когда я удалил одну из них, у меня была эта ошибка, потому что она также удалила ее из списка "Link Binary With Libraries". Я добавил обратно, и проблема исчезла (и у меня все еще есть две фреймворка)
Я установил аналогичную ошибку в моем проекте, изменив Настройки сборки > Архитектуры для ВСЕ моих целей.
Проблема: Когда я обновился с Xcode 4.4 до Xcode 4.5, мой проект все еще хорошо компилировался на симуляторе, но не компилировался на устройствах. На устройствах он выбрал символ "не найден для архитектуры armv7s" , а также вводящую в заблуждение ошибку Apple Mach-O Linker Error и команду clang: error: linker с кодом завершения 1 (используйте -v, чтобы увидеть вызов).
Причина (в моем случае): У моего проекта было несколько целей, и даже если в настройках сборки > Архитектуры для главной цели была включена архитектура armv7s, основная цель зависела от другой цели (перечисленной в разделе "Сложные фазы" > "Зависимости" ), и я не думал о reset Настройки сборки > Архитектуры для этой другой цели, и мне пришлось изменить это, чтобы включить armv7. Я предполагаю, что симулятор и устройство работают на разных архитектурах, и почему имитатор был в порядке, пока устройство не было.
Зависит ли ваш проект от другого проекта и является ли цель в этом проекте прямой зависимостью от вашей основной цели? Если это так, и зависимость не настроена, зависимая цель может не создаваться для всех конфигураций (т.е. Симулятора)
Просто дикая догадка.
Другая ситуация, которая может вызвать эту проблему, - это то, что ваш код вызывает С++ или вызывается кодом С++. У меня возникла проблема с моей собственной функцией утилиты .c file, отображаемой как "символ не найден" при вызове из Obj-C. Исправлено изменение типа файла: в Xcode 4 используйте расширенную информационную панель, чтобы установить тип файла "Objective-C ++ Source"; в Xcode 3, используйте "Get Info", чтобы изменить тип файла на "source.cpp.objcpp".
В моем случае ни один из опубликованных решений не работал. Мне пришлось удалить проект и сделать новую проверку с сервера SVN. К счастью, проект был размещен в системе контроля версий. Не знаю, что бы я сделал иначе.
В проекте С++ с использованием определенного templatized класса при получении той же самой ошибки я выбрал файл .cpp с определенным классом templatized в Навигаторе проектов, затем Delete > Удалить ссылку. Также связанный файл .h, все еще ссылающийся в проекте, должен иметь оператор #include для .cpp следующим образом:
#ifndef __CircularBuffer__CircularBufferT__
#define __CircularBuffer__CircularBufferT__
... snip ...
#include "CircularBufferT.cpp"
#endif /* defined(__CircularBuffer__CircularBufferT__) */
Если вы хотите увидеть, простой пример проекта в github:
Это немного обтекания косвенности, и я не помню оригинального источника этого обходного пути.
Если эта ошибка появляется внезапно, это означает, что в проекте отсутствуют некоторые фреймворки. Библиотекам и зависимым проектам могут потребоваться фреймворки, поэтому, если вы недавно добавили их, это может вызвать эту ошибку.
Чтобы добавить фреймворки, щелкните правой кнопкой мыши имя проекта в представлении проекта, выберите "Добавить", затем выберите "Существующие фреймворки" из списка. Затем найдите фреймворк с отсутствующими символами.
Другое дело, если вы добавили какие-либо классы в скомпилированные ресурсы и удалили эти классы из проекта, тогда появится ошибка. Лучше всего удалить классы из ресурсов компиляции (параметры сборки → источники компиляции), которые были удалены из проекта.
В моем случае я добавил классы admob в проект и скомпилировал проект. В более позднем случае я не хочу включать admobs в свой проект, поэтому я удалил ссылки классов admob из моего проекта. Когда эта ошибка произошла, я удалил класс .m моего admob из ресурсов компиляции, решив эту проблему.
Это случилось со мной, пытаясь скопировать в демонстрационную библиотеку PSPDFKIT в мой проект. Я выполнил все инструкции на сайте + все предложения на этой странице.. по какой-то причине он продолжал давать вышеприведенную ошибку, проблема заключалась в том, что если бы я grepped сообщение в методе ошибки.. он появился только в двоичном ( очевидно, у меня нет доступа к исходному коду b/c, за который я должен заплатить за него).
Я заметил это на странице инструкции:
Итак, я пошел в мужество этого файла конфигурации и нашел это:
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 на своей настройке, дважды проверьте источник кода или что-то еще и убедитесь, что оно действительно было применено.. оно не было правильно применено в моем случае
Другая причина, по которой это может произойти, - это когда вы обновляете SDK.
Если вы просто удалите группу, а затем перетащите новую папку в проект, "путь поиска библиотеки" будет иметь оба SDK. Чтобы решить, просто удалите старый путь SDK.
Я использовал CLGeocoder без добавления Core.Location Framework. В основном эта ошибка может означать несколько вещей. Надеюсь, это поможет кому-то другому.
Я был в шоке от этого, прежде чем я понял, что добавил только интерфейс @interface и забыл добавить пустой блок @implementation.
В моем случае я обновляю XCode, а новый не поддерживает i386, и эта ошибка появляется так же, как и вы.
В конце я использую docker для создания указанной среды.