Подтвердить что ты не робот

Дублирующие символы для архитектуры arm64

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

enter image description here

Есть идеи, как это исправить?

4b9b3361

Ответ 1

Из ошибок, похоже, что в FacebookSDK.framework уже включены классы Bolts.framework. Попробуйте удалить дополнительную версию Bolts.framework из проекта.

Ответ 2

Для меня это помогло переключить параметр компилятора "Нет общих блоков" в НЕТ: Это, похоже, имеет смысл, здесь объясняется настройка: Для чего используется GCC_NO_COMMON_BLOCKS?

Ответ 3

Используя Xcode 8, опция "Обновить проект до рекомендуемых настроек" включила "Нет общих блоков" для моего проекта.

Возврат в выключенное положение исправил все.

Ответ 4

Для меня это было то, что я импортировал файл как .m, а не .h по ошибке

Ответ 5

При обновлении до Xcode 8 я получил сообщение для обновления до рекомендуемых параметров. Я принял и все было обновлено. Я начал получать сообщение о времени компиляции:

Дублирующий символ для XXXX Дублирующий символ для XXXX Дублирующий символ для XXXX

Всего 143 ошибки. Пошлите Target- > Build settings → No Common Blocks → Установите значение NO. Это решило проблему. Проблема заключалась в том, что интегрированные проекты имели общие кодовые блоки и, следовательно, не могли их скомпилировать. Объяснение можно найти здесь.

Ответ 6

Если вы переходите к Xcode 7 или 8 и открываете действительно старый проект, я столкнулся с этой проблемой:

in SomeConstFile.h

NSString * const kAConstant;

in SomeConstFile.m

NSString *const kAConstant = @"a constant";

Более ранние версии компилятора предполагали, что определение в файле заголовка было extern, и поэтому включение SomeConstFile.h повсеместно было прекрасным.

Теперь вам нужно явно объявить эти константы как extern:

in SomeConstFile.h

extern NSString * const kAConstant;

Ответ 7

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

  • Дублицированная функция/класс определяется в двух разных местах/файлах проекта, и только один из них должен был скомпилировать любую вариацию команды сборки. Но как-то оба этих файла были скомпилированы в вашем проекте. Поэтому вам нужно проверить условия if-else или другие зависимости, которые добавляют файлы src в список файлов, которые необходимо скомпилировать, и удалить ненужный файл для вашей конкретной команды сборки.

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

  • Очистите свой каталог OBJ до того, как вы построите его снова, там могут быть старые файлы obj из предыдущих версий, которые могут вызвать конфликт.

P.S Я не эксперт, но именно так я решил эту проблему, когда столкнулся с ней.:)

Ответ 8

Ниже исправления работают для меня..:)

Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No

Step 2: Go to TARGETS -> Build Settings -> enable testability -> No

Вернувшись к НЕТ, проблема решена!

Ответ 9

Другое решение состоит в том, чтобы:

Выберите " Проект" → " Цель" → " Стадия сборки" → " Источник компиляции" → найдите файл, упомянутый в 3-ей последней строке ошибки (в вашем случае BFAppLinkReturnToRefererView.o).

Тогда вы увидите 1 или 2 файла в результатах поиска.

Удалите один из них и скомпилируйте снова. Теперь он должен перекомпилироваться, потому что остался только один файл и больше нет конфликтов для сборки.

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

Ответ 10

Ну, несколько раз при использовании SDK, например, FB или библиотек, таких как Vuforia или GoogleAnalytics, добавление примеров проектов может привести к тому, что они уже включают в себя Frameworks и так далее, поэтому вы должны не повторять символы, которые вы добавляете вручную, когда они уже включены в образцы

Ответ 11

Для меня проблема была в стиле создания const, который отлично работал до этого iOS8.. У меня было несколько строк:

int const kView_LayoutCount = 3;

в моем .h файле. Шесть строк, например, привели к 636 файлам-линкерам, когда в обычных блоках было установлено значение НЕТ. (14k +, если ДА). Перемещали строки на .m после удаления .h объявления значения и компиляции было хорошо, чтобы идти.

Надеюсь, это поможет другим!

Ответ 12

В моем случае причина была слишком глупой:

У меня был файл Constant.h, где я определил макросы. Я думал о том, чтобы делать NSString. и сделал это:

NSString const *kGreenColor = @"#00C34E";

это вызвало проблему дублирования символов для архитектуры arm64  и команда Linker завершилась с кодом выхода 1. Удаление строки const NSString работало для меня.

Ответ 13

проверьте ваш включаемый файл, у меня возникла эта проблема, потому что я случайно #imported "filename.m" вместо "filename.h", автозамена (вкладка) поставил "m", а не "h".

Ответ 14

Из ошибок, казалось бы, все классы появляются несколько раз. Найдите и удалите классы, которые будут работать.

Создавать файлы AppDelegate.h и .m, создавая несколько раз. Таким образом, эта ошибка произойдет. Наконец, найдите и удалите классы, которые он отлично работает для меня.

Ответ 15

чтобы решить эту проблему, перейдите к разделу "Сборка фаз" и выполните поиск дубликата файла (facebookSDK, unityads) и delete (extension file.o), затем снова создайте.

Ответ 16

Для меня я создал метод с именем sampleMethod в ViewController_A и создал тот же метод в ViewController_B. Это вызвало у меня эту ошибку, затем я изменил имя метода в ViewController_B на secondSampleMethod. Это исправило ошибку.

Похоже, хорошая функция, чтобы уменьшить код и не дублировать один и тот же код во многих местах.

Я попытался изменить блоки No Common с Yes на No, а затем включить тестируемость с Yes на No. Это не сработало. Я проверял дубликаты файлов также на этапах сборки, но дублирующих файлов нет.

Ответ 17

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

Ответ 18

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

Ответ 19

Я испортил свои модули при понижении версии модуля, и мне удалось решить проблему с дубликатами символов для архитектуры arm64, удалив модули и снова установив их с помощью:

pod deintegrate
pod install

Ответ 20

У меня недавно была эта ошибка, когда у меня были оба этих маркера в классе Swift:

@objcMembers @objc(MySwiftClass)

Удаление их устранило ошибку.