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

104

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

введите описание изображения здесь

Любые идеи, как это исправить?

Picciano
источник
1
это значит, что у вас слишком много BFAppLinkReturnToRefererView
Андрей Чернуха
Кроме того, вы можете захотеть немного очистить свой проект, а не связываться с фреймворками, которые находятся на вашем рабочем столе. :)
Пиччано
В моем случае я добавил extern NSString * const tColor; в файле .h и NSString const * tColor = @ "# 000022"; в двух разных классах .m.
ios_dev
Вы можете найти то, что ищете здесь stackoverflow.com/a/46678210/988941
MoOx

Ответы:

66

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

Picciano
источник
23
как? не могли бы вы провести меня шаг за шагом
Имдад Али
68

Мне помогло переключить настройку компилятора «No Common Blocks» на NO: В этом есть смысл, настройка объясняется здесь: Для чего используется GCC_NO_COMMON_BLOCKS?

tania_S
источник
Ты человек! Только что создал новый проект xCode 7.3.1, и настройка по умолчанию ДА :(
Yaro
4
Эта опция была включена для меня в окне Xcode «Обновить проект до рекомендуемых настроек».
commscheck
Ты лучший
showmyroutes
бесценный совет, но в моем случае дох не помог! : O
Fattie
49

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

Вернув его обратно в положение ВЫКЛ, все исправило.

Адам Дж.
источник
2
Обновите проект до рекомендованных настроек, как мне это сделать? я имею ввиду из какого меню?
Sazzad Hissain Khan
@SazzadHissainKhan Это в настройках вашей сборки.
Поездка
24

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

pod deintegrate
pod install
Матеа
источник
Я использовал SDK Google Places, интегрированный через CocoPods - 3.9.0, и этот ответ устранил мою проблему.
Эндрюлунди
Спасибо, вы избавили меня от головной боли
Владимир Суканица
21

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

Джейсон Сильвер
источник
Это LOL, но это правда; D
Владимир
это только что случилось со мной .. Я обвиняю завершение кода во всем
user426132
12

Другое решение:

Выберите Project -> Target -> Build phase -> Compile source -> найдите файл, упомянутый в третьей последней строке ошибки (в вашем случае BFAppLinkReturnToRefererView.o ).

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

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

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


источник
2
Чрезвычайно недооцененный ответ, спасибо за помощь, Лукас! :)
patreu22
Нет проблем, рад, что решил вашу проблему :)
10

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

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

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

iosCurator
источник
9

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

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

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

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

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

МанюБишной
источник
9

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

в SomeConstFile.h

NSString * const kAConstant;

в SomeConstFile.m

NSString *const kAConstant = @"a constant";

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

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

в SomeConstFile.h

extern NSString * const kAConstant;
Дэн Лоуни
источник
1
Спасибо за это! Бился с проблемой с файлом constants.h, который я создавал lol
Сон Мин Ким
1
Спасибо за ответ. Я тоже столкнулся с той же проблемой, и ваш ответ сработал для меня ...
reetu
1
Спасибо, я боролся с этой проблемой последние 3-4 часа
Сумит Кумар Саха
9

Ниже патч работает у меня .. :)

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

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

Установка его обратно в NO решила проблему!

Саумил Шах
источник
2
Шаг 2: Моя проблема решена. Спасибо :)
Доральд
2

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

IsPha
источник
2

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

int const kView_LayoutCount = 3;

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

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

нарисовался..
источник
2

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

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

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

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


источник
2

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

Майк Зриэль
источник
Большое вам спасибо, я не осознавал, что совершил эту ошибку, отнимал все мое время. Еще раз спасибо 👍
Supertecnoboff
1

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

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

Картиккк
источник
1

Чтобы решить эту проблему, перейдите к этапам сборки и выполните поиск повторяющихся файлов, таких как (facebookSDK, unityads) и удалите (extension file.o), а затем создайте снова.

Махмуд абуаламриен
источник
0

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

Кажется, хорошая возможность уменьшить код и не дублировать один и тот же код во многих местах.

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

Р. Мохан
источник
0

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

Альберт Реншоу
источник
0

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

MobileMon
источник
0

Мне удалось устранить эту ошибку, в которой говорилось: «158 повторяющихся символов для архитектуры armv7, 158 повторяющихся символов для архитектуры arm64» --- Если это то, что вы тоже получаете, то это означает, что вы пытаетесь скомпилировать файл, который импортирует или наследование фреймворка или статической библиотеки, имеющей ссылки на код или файлы C ++. Простой способ справиться с этим - изменить расширение вашего файла .m на .mm. Вот как это происходит, если вы используете Objective C, хотя не уверен в Swift.

Также в настройках сборки - вы можете обновить «другие флаги компоновщика» до -lc ++

Маниш Гупта
источник
0

Если кто-то экспериментирует с этим, работая с Flutter, не пытайтесь деинтегрировать pod, pod init.

Как я решил, это запустить flutter clean, flutter run -d [iOS Device]

Надежда может кому-нибудь помочь.

Dx_
источник
0

Plz Измените настройку.

Шаг 1. Перейдите в ЦЕЛИ -> Настройки сборки -> Нет общих блоков -> Нет

Шаг 2: перейдите в ЦЕЛИ -> Настройки сборки -> включить возможность тестирования -> Нет

Днянешвар Шинде
источник