Повторяющиеся символы для архитектуры x86_64 в Xcode

Теперь у меня есть тот же вопрос с вышеуказанным заголовком, но пока не нашел правильного ответа. Я получил ошибку:

    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
duplicate symbol _OBJC_METACLASS_$_MoboSDK in:
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
ld: 75 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Любая помощь приветствуется.

Наконец Я выясню причину этой ошибки, поэтому я добавил -ObjC в Other Linker Flags. После удаления этого значения я смогу успешно создать свой проект, но я не знаю, почему. Кто-нибудь может это объяснить?

Ответ 1

75 повторяющихся символов для архитектуры x86_64

означает, что вы дважды загрузили одни и те же функции. Поскольку проблема исчезает после удаления -ObjC из Other Linker Flags, это означает, что этот параметр приводит к тому, что функции загружаются дважды:

из Технического Q & A

Этот флаг заставляет компоновщик загружать каждый объектный файл в библиотеке который определяет класс или категорию Objective-C. Хотя этот параметр будет обычно приводят к выполнению большего исполняемого файла (из-за дополнительного объектного кода загружается в приложение), это позволит успешно создать эффективные статические библиотеки Objective-C, содержащие категории на существующих классов.

https://developer.apple.com/library/content/qa/qa1490/_index.html

Ответ 2

Для меня проблема с изменением "Нет общих блоков" от "Да" до "Нет" (в разделе "Цели" - "Настройки сборки" → "Apple LLVM - Генерация кода" ).

Ответ 3

Глупый, но убедитесь, что вы не #import ed a .m файл по ошибке где-то

Ответ 4

В моем случае я просто создал файл заголовка для определения константных строк, например:

NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";

Я решил этот сценарий, используя static:

static NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";

Ответ 5

У меня такая же проблема. В Xcode 7.2 в пути Project Target > Build Setting > No Common Blocks, я меняю его на NO.

Ответ 6

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

duplicate symbol _OBJC_IVAR_$_BLoginViewController._hud in:

17 duplicate symbols for architecture x86_64

"означает, что вы дважды загрузили одни и те же функции. Поскольку проблема исчезла после удаления -ObjC из других флагов компоновщика, это означает, что эта опция приводит к тому, что функции загружаются дважды:"

В непростых условиях это означает, что у нас есть два файла в нашем проекте с точно таким же именем. Может быть, вы объединяете один проект в другой? Посмотрите на ошибки выше ошибки "дубликатов символов", чтобы увидеть, какая папка дублируется, в моем случае это был BLoginViewController.

Например, на изображении ниже вы можете увидеть, что у меня есть два BImageViewControllers, для меня это то, что вызывало проблему.

Как только я удалил один, проблема исчезла:)

enter image description here

Ответ 7

Случается также при объявлении константных переменных с одинаковым именем в другом классе:

в файле Message.m

const int kMessageLength = 36;

@implementation Message

@end

в файле Chat.m

const int kMessageLength = 20;

@implementation Chat

@end

Ответ 8

Это произошло во мне, когда я принял "рекомендуемые настройки" всплывающего окна по проекту, который я разработал два года назад в Objective-C.

Проблема заключалась в том, что когда вы приняли обновление "рекомендуемых настроек", Xcode автоматически изменил или добавил некоторые настройки сборки, включая GCC_NO_COMMON_BLOCKS = YES;.

Это привело к сбою сборки с ошибкой duplicate symbol в моем обновленном проекте. Поэтому я изменил No Common Block на NO в моих настройках сборки, и ошибка исчезла.

Ответ 9

Удалить -ObjC из других флагов компоновщика или Пожалуйста, проверьте, что вы импортировали какой-либо файл .m, а не .h по ошибке.

Ответ 10

Самый быстрый способ найти дубликат:

  • Перейти к Целям
  • Переход к фазам сборки
  • Перейдите в раздел "Источники компиляции"
  • Удалить дубликаты файлов.

Ответ 11

Следующие шаги решили проблему для меня.

  • Перейдите в раздел "Сборка фаз в целевых настройках".
  • Перейдите в раздел "Связывание двоичных файлов с библиотеками".
  • Проверьте, существует ли какая-либо из библиотек дважды.
  • Создайте снова.

Ответ 12

Определение этой же переменной в @implementation в более чем одном классе также может вызвать эту проблему.

Ответ 13

В моем случае в местоположении было два файла с одинаковым именем

Цели > Сборка фаз > Скомпилировать источники и удалить все повторяющиеся файлы.

Ответ 14

Моя ситуация с некоторым устаревшим проектом, открытым в Xcode 7.3, была:

duplicate symbol _SomeEnumState in:

а затем список из двух несвязанных файлов .o, то это повторялось пару раз, а затем:

ld: 8 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Для меня это решило изменить объявление enum:

enum SomeEnumState {
    SomeEnumStateActive = 0,
    SomeEnumStateUsed = 1,
    SomeEnumStateHidden = 2
} SomeEnumState;

:

typedef NS_ENUM(NSUInteger, SomeEnumState) {
    SomeEnumStateActive = 0,
    SomeEnumStateUsed = 1,
    SomeEnumStateHidden = 2
};

Если у кого-то есть объяснение, пожалуйста, просветите меня.

Ответ 15

  • Перейти к целям
  • Выберите настройки сборки
  • Ищите "Нет общих блоков", выберите " Нет".

У меня сработало

Ответ 16

Для меня во время рекомендованных параметров проекта Xcode8 обновите "Нет общих блоков" до "ДА", что вызывает эту проблему.

Ответ 17

Убедитесь, что вы случайно не импортировали файл .m, возможно, вы захотите удалить производные данные в окне "Проекты", а затем снова создать и запустить.

Ответ 18

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

dispatch_time_t getDispatchTimeByDate(NSDate *date)
{
    NSTimeInterval interval;
    double second, subsecond;
    struct timespec time;
    dispatch_time_t milestone;


    interval = [date timeIntervalSince1970];
    subsecond = modf(interval, &second);
    time.tv_sec = second;
    time.tv_nsec = subsecond * NSEC_PER_SEC;
    milestone = dispatch_walltime(&time, 0);

    return milestone;
}

Надеюсь, что это может помочь кому-то.

Ответ 19

Я получил ту же ошибку, когда я добавил репозиторий pod

pod 'SWRevealViewController'

для уже добавленного исходного кода (SWRevealViewController) из gitHub. Таким образом, ошибка будет устранена путем удаления исходного кода или хранилища pod.

Случай №2:

Во второй раз эта ошибка появилась, когда я объявляю константу в файле .h.

NSString * const SomeConstant  = @"SomeValue";
@interface AppDelegate : UIResponder <UIApplicationDelegate> {
...
...

Ответ 20

Для всех, кто имеет эту проблему, я не видел разрешения в любом из этих ответов.

После конфликта слиянием .pbxproj, который был адресован вручную (хотя и плохо), были дубликаты ссылок на отдельные файлы классов в .pbxproj. Удаление из Project > Build Phases > Compile Sources все исправлено для меня.

Надеюсь, что это поможет кому-то по очереди.

Ответ 21

Сегодня у меня такая же ошибка. Ключевое слово ошибки duplicate. Я исправляю это:

1. Remove the duplicate file at Build Phases-->Compile Sources
2. If you can not remove it at Build Phases, you need find the file at your project and remove the reference by DELETE :

удалить ссылку

3. Add the file to your project again
4. Add the file .m to your Build Phases-->Compile Sources again
5. Build your project, the error will disappear

Ответ 22

Подобно Juice007, я объявил и инициализировал переменную типа C в двух разных файлах .m(которые не были импортированы!)

BOOL myVar = NO;

однако этот метод объявления и инициализации переменной, даже в .m, даже в @implementation, предоставляет ей глобальную область видимости. Ваши варианты:

  • Объявите его как static, чтобы ограничить область применения классом:

    static BOOL myVar = NO;
    
  • Удалите инициализацию (которая заставит два класса совместно использовать глобальный var):

    BOOL myVar;
    -(void) init{
        myVar = NO;
    }
    
  • Объявить его как свойство:

    @property BOOL myVar;
    
  • Объявите его как правильный iVar в @interface

    @interface myClass(){
        BOOL myVar;
    }
    @end
    

Ответ 23

В моем случае у меня было два main() метода main() определенных в моем проекте, и удаление одного из них решило проблему.

Ответ 24

Такая же проблема возникает со мной, когда я интегрировал проект lob внутри моего проекта.

enter image description here

На самом деле проект lob также имеет файлы AFNetworking, Поэтому я удаляю файлы .m из проекта lob.

enter image description here

Фактически файлы .m конфликтуют с My project POd/AFNetworking/.m files

enter image description here

Ответ 25

В Xcode 6.3.2. Я проверил все возможности как ниже

1: Я не импортирую файл .m в мой проект.

2: удалено -ObjC из другого флага компоновщика.

3: Удалены все мои данные.

Я все равно получаю такую ​​же ошибку. Я удалил эту ошибку, удалив любое объявление переменной из .pch файла. в моем случае, я объявил объект AppDelegate в файле .pch. наконец, я нашел причину, которая вызывает ошибку. поэтому я удаляю объявление любой переменной из файла .pch и моего рабочего шага проекта.

Ответ 26

Другая глупая ошибка, которая вызовет эту ошибку, - это повторяющиеся файлы. Я случайно скопировал несколько файлов дважды. Сначала я пошел в Targets → Build Phases → Compile sources. Там я заметил несколько файлов в этом списке дважды и их местоположения.

Ответ 27

Я надеюсь, что это определенно поможет вам

Я получил ту же ошибку 3 повторяющихся символа для архитектуры x86_64

в моем случае я скопировал код из другого файла того же проекта, например. код файла A.m на B.m и после компиляции, я получил сообщение об ошибке. и я решаю ошибку, изменив имя глобальной переменной.

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

Ответ 28

У меня также есть эта ошибка сегодня. Это потому, что я определил значение const в файле .m. Но я определил еще один .m файл, который также включил это значение const. Это означает, что он имеет два одинаковых значения const. Таким образом, появляется ошибка. И мое решение добавляет ключевое слово "static" перед значением const. Например:

static CGFloat const btnConunt = 9;

И затем я построю проект, он не сообщит об этой ошибке.

Ответ 29

1.Построить фазы 2. Поиск имени файла 3. Удалить дубликат - > Ошибка исчезнет.

Если это не так, попробуйте найти "file.m", если вы видите любой файл #import "file.m", очистите эту строку

Ответ 30

Я сталкиваюсь с той же ошибкой, что и я.

1. Копируем дублированный файл символа (имя класса или имя фреймворка) с конца, который только что показан выше строки (дубликаты символов для архитектуры x86_64).

2. Вставьте его в Find Navigator и нажмите enter

Он показал мне дублирующий класс. Я удаляю дубликат класса и выполняю успешную работу.