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


104

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

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

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


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.


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

68

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


Ты человек! Только что создал новый проект 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, и этот ответ устранил мою проблему.
Эндрюлунди

Спасибо, вы избавили меня от головной боли
Владимир Суканица


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. Это решило проблему. Проблема заключалась в том, что интегрированные проекты имели общие блоки кода и, следовательно, не могли их скомпилировать. Объяснение можно найти здесь .


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 и тому подобное, поэтому вы должны убедиться, что не повторяете символы, которые вы добавляете вручную, пока они уже включены в образцы


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, не зная, что я это сделал. Как только я удалил одно или другое, проблема исчезла



0

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

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


0

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

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

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


0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.