Повторяющиеся символы для архитектуры 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.