Дубликаты символов для архитектуры i386 лязг
Я видел несколько постов в google и stackru, связанных с этой ошибкой, я прочитал их все, но все еще выбираю проблему, буду рад решению. Вот сообщение об ошибке, которое я получаю при компиляции...
каталог не найден для опции '-L/Users/somefolder/Documents/Bharat/MyApp copy/GoogleAdMobAdsSDK' дубликат символа _OBJC_CLASS_$_AppDelegate в: /Users/madept/ Библиотека / Разработчик /Xcode/DerivedData/Alpha-dvvymdlmzseytagllsmbbrildxg / r / gz/ Intergatez Alpha.build/Debug-iphonesimulator/Alpha.build/Objects-normal/i386/AppDelegate-56890B6B994A4284.o
Благодарю.
24 ответа
Наконец я получил решение
- удалить все ссылки AdMob SDK, которые я добавил (также удалить из рабочей области).
- очистить свой проект
- перейдите по этой ссылке, чтобы добавить AdMob снова
- очистить и восстановить
Другая причина, по которой эта ошибка часто возникает, - это случайный импорт файла.m вместо.h.
шаги:
- Проверьте фазы сборки в настройках цели.
- Проверьте, существует ли какой-либо файл дважды или один раз.
- Если файл существует дважды, удалите один. Если нет, удалите файл внизу, который является самым последним.
- Построй снова.
Просто чтобы добавить к возможным решениям.
В моем случае я случайно объявил и инициализировал переменную в заголовочном файле.
Например, это неправильно:
MyFile.h
#import <Foundation/Foundation.h>
NSInteger const ABCMyConstant = 6;
Так должно быть:
MyFile.h
#import <Foundation/Foundation.h>
NSInteger const ABCMyConstant;
MyFile.m
#import "MyFile.h"
NSInteger const ABCMyConstant = 6;
Перейдите к настройке сборки и найдите " Нет общих блоков" и установите " НЕТ". И построить снова, вы не получите эту ошибку снова.
Я обнаружил, что получаю ошибку, когда у меня был const
объявлен в файле.m с тем же именем, что и другой const
в другом.m файле. Оба файла # включены в один и тот же родительский файл.
Я только испытал это после воссоздания модельного класса для Core Data. Параметр меню для создания классов объектов создал дубликат класса модели. как только я удалил обман, ошибка исчезла...
Ошибки компоновщика всегда показывают проблему, связанную с использованием библиотеки или проблемами импорта.
Иногда ошибка возникает, когда вы импортировали файл.m вместо файла.h.
Пожалуйста, проверьте ваш код и найдите оператор импорта.m в одном из ваших файлов заголовков (расширение.h), у меня была похожая проблема и возникла ошибка с 14 повторными символами.
Проверьте, импортировали ли вы ViewControler.m
вместо его.h, так должно быть так:
import "ViewController.h"
и ваш AppDelegate.h
должно быть что-то вроде этого:
import "UIKit/UIKit.h"
import "ViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong,nonatomic) ViewController *mainController;
@end
Всегда не забывайте импортировать заголовочные файлы, а не.m
Если другие люди пробовали все остальные ответы, но они все еще не работают, попробуйте открыть файл.xcodeproj в вашем любимом текстовом редакторе и найти имя класса, который доставляет вам проблемы. Убедитесь, что вы закрыли Xcode перед этим. В файле должна быть одна строка для.h и другая строка для.m. Если есть дубликаты, удалите их, сохраните файл и восстановите.
У меня была эта проблема со структурой, которая, как я знал, работала в другом проекте. Я скопировал файлы из другого проекта и добавил его в этот. Тогда при сборке я получил 76 повторяющихся ошибок.
Простым решением для меня было удаление -ObjC
от других флагов линкера. Предыдущий проект не имел этого. Как только я это сделал, предупреждение исчезло, и проект был успешно построен.
Я получил эту ошибку, когда в основной проект была включена статическая библиотека, а также была включена вторая библиотека, которая также имела ссылку на библиотеку. Это довольно запутанно, так что, может быть, это понятнее.
MyWorkspace + Основной проект + Ссылка на библиотеку 1 + Ссылка на библиотеку 2 + Библиотека 1 + Библиотека 2 + Ссылка на библиотеку 1
Я удалил ссылку на библиотеку 1 из основного проекта, и ошибка исчезла.
Другая причина может заключаться в том, что при создании дистрибутивной версии проект нацелен на симулятор, а не на реальное устройство. Это также вызывает это сообщение об ошибке.
В некоторых случаях вы также можете получить ошибку "дубликаты символов для архитектуры..." из-за того, что вы случайно объявили константу (const) с одинаковым именем в двух разных файлах.
Самый простой способ решить эту проблему - это проблема Xcode 7.0 или более поздней версии, просто измените No Common Blocks на NO, это решит вашу проблему, попробуйте этот Project Project > Build Setting > No Common Blocks, я изменяю его на NO.
У меня было это, где я определил одну и ту же функцию C дважды. В двух разных .m
файлы. Просто удалите одно из определений и вуаля.
Я попытался очистить проект, стер все полученные данные. Ничего не сработало. Атлас, это сработало для меня.
Другая причина может заключаться в том, что при создании дистрибутивной версии проект нацелен на симулятор, а не на реальное устройство. Это также вызывает это сообщение об ошибке.
Для меня все было по-другому, я скопировал методы реализации класса как есть, и iVars также были скопированы... так что в мире iVars есть два набора, и компилятор продолжал жаловаться на дубликаты ivars, прежде чем связывать файлы *.o,
чтение вывода помогло, поэтому удалил все дублирующиеся ивары... благодаря новой функции, где вам не нужно @synthesize все ваши свойства... ошибка ушла...
Взято с /questions/2527212/import-vse-esche-poluchaet-oshibku-dublikat-simvola/2527237#2527237
Что вы можете сделать, это положить в свой заголовок (MyConstants.h
):
extern const int MyConstant;
extern NSString * const MyStringConstant;
И в исходном файле, включите заголовок выше, но определите константы (MyConstants.m
):
const int MyConstant = 123;
NSString * const MyStringConstant = @"SomeString";
Затем вам просто нужно включить заголовок в любой другой исходный файл, который использует любую из этих констант. Заголовок просто объявляет, что эти константы где-то существуют, поэтому компилятор не будет жаловаться, потому что задача компоновщика - разрешить эти имена констант. Исходный файл, содержащий ваши определения констант, компилируется, и компоновщик видит, что именно там находятся константы, и разрешает все ссылки, найденные в других исходных файлах.
Проблема с объявлением и определением константы в заголовке (который не объявлен как static
) компилятор обрабатывает его как независимый глобал для каждого файла, который включает этот заголовок. Когда компоновщик пытается связать все ваши скомпилированные исходники вместе, он встречает глобальное имя столько раз, сколько вы включили MyConstants.h
,
У меня была эта проблема, и я застрял на некоторое время. Для меня возникла проблема: я записал некоторые логические значения в файл.h (между #import и @interface) и использовал их в своем файле.m
Я просто удалил их из моего файла.h и скопировал их в то же место в мой файл.m, и сборка прошла успешно.
Я импортировал файлы из другого проекта, в нем также был файл main.m. В общем, у меня было два файла main.m, удаление одного из них решило проблему для меня.
У меня была эта ошибка после того, как я скопировал и вставил тестовый файл в проект, забыв изменить имя интерфейса и строки реализации:
@interface TDInputValidationsTests : XCTestCase
а также
@implementation TDInputValidationsTests
Глупая ошибка... Я также предлагаю посмотреть на вкладку "фазы сборки" в проекте, чтобы проверить наличие дубликатов. Удаление полученных данных и чистая сборка также могут помочь.
Иногда, хотите верьте, хотите нет, XCode испортил файл проекта. Единственное решение, которое мы нашли, состояло в том, чтобы вручную удалить все ссылки на поврежденный файл с помощью текстового редактора, а затем повторно добавить файлы в Xcode.
Я получил ту же ошибку при настройке OCMock. Я исправил это, добавив libOCMock.a в раздел "Копирование файлов" фазы сборки.
Примечание для себя: "ЧИТАЙТЕ ОШИБКУ!"
В моем случае это говорит об этом: duplicate symbol _OBJC_CLASS_$_SATCoreData in:
Перевод: Objective C Class называется SATCoreData
дублируется.
Затем он дает путь к обоим вхождениям символа. Чтение пути указывает на два файла класса, оканчивающиеся на .o
, Если вы посмотрите на оба класса, вы найдете что-то подозрительное. В моем случае я случайно дал двум классам одно и то же имя. Один класс у меня был внутри файла другого класса, потому что я что-то тестировал и был слишком ленив, чтобы создать отдельный класс. Надеюсь, это кому-нибудь поможет.