Когда я пытаюсь запустить свой проект Xcode, он выдает ошибку с сообщением о том, что у меня есть повторяющиеся символы. Я посмотрел в Интернете, где найти эти дубликаты, но мне не повезло:
Любые идеи, как это исправить?
Когда я пытаюсь запустить свой проект Xcode, он выдает ошибку с сообщением о том, что у меня есть повторяющиеся символы. Я посмотрел в Интернете, где найти эти дубликаты, но мне не повезло:
Любые идеи, как это исправить?
Ответы:
Мне помогло переключить настройку компилятора «No Common Blocks» на NO: В этом есть смысл, настройка объясняется здесь: Для чего используется GCC_NO_COMMON_BLOCKS?
Используя Xcode 8, параметр «Обновить проект до рекомендуемых параметров» включил для моего проекта «Нет общих блоков».
Вернув его обратно в положение ВЫКЛ, все исправило.
Я испортил свои модули во время перехода на более раннюю версию модуля, и мне удалось решить проблему с повторяющимися символами для архитектуры arm64 , удалив модули и установив их снова с помощью:
pod deintegrate
pod install
Для меня это было то, что я по ошибке импортировал файл как .m, а не .h
Другое решение:
Выберите Project -> Target -> Build phase -> Compile source -> найдите файл, упомянутый в третьей последней строке ошибки (в вашем случае BFAppLinkReturnToRefererView.o ).
Тогда вы увидите в результатах поиска 1 или 2 файла.
Удалите один из них и снова скомпилируйте . Теперь он должен перекомпилировать, потому что остался только один файл и больше не будет конфликтов для сборки.
Если это не сработает, вероятно, в файле есть ошибки, и вам следует удалить их все, а затем перекомпилировать. Он должен снова работать.
При обновлении до Xcode 8 я получил сообщение о необходимости обновления до рекомендуемых настроек. Я согласился, и все было обновлено. У меня начались проблемы со временем компиляции:
Дублирующий символ для XXXX Дублирующий символ для XXXX Дублирующий символ для XXXX
Всего 143 ошибки. Пошел в Target-> Build settings -> No Common Blocks -> Set it to NO. Это решило проблему. Проблема заключалась в том, что интегрированные проекты имели общие блоки кода и, следовательно, не могли их скомпилировать. Объяснение можно найти здесь .
Эта ошибка возникает, когда компоновщик пытается связать файлы obj. Вот несколько причин, по которым я мог придумать эту ошибку:
Дублированная функция / класс определяется в двух разных местах / файлах в проекте, и только один из них должен был компилироваться для любого варианта команды сборки. Но каким-то образом оба этих файла были скомпилированы в вашем проекте. Поэтому вам нужно проверить свои условия if-else или другие зависимости, которые добавляют файлы src в список файлов, необходимых для компиляции, и удалить ненужный файл для вашей конкретной команды сборки.
Дублированная функция / класс случайно определяется в двух разных местах / файлах проекта. Удалите неправильное определение.
Очистите каталог OBJ перед повторной сборкой, там могут быть старые файлы obj из ваших предыдущих сборок, которые могут вызывать этот конфликт.
PS Я не эксперт, но вот как я решил эту проблему, когда столкнулся с ней. :)
Если вы переходите на 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;
Ниже патч работает у меня .. :)
Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No
Step 2: Go to TARGETS -> Build Settings -> enable testability -> No
Установка его обратно в NO решила проблему!
Ну, иногда при использовании SDK, такого как FB, или библиотек, таких как Vuforia или GoogleAnalytics, добавление примеров проектов может вызвать проблему, заключающуюся в том, что они уже включают Frameworks и тому подобное, поэтому вы должны убедиться, что не повторяете символы, которые вы добавляете вручную, пока они уже включены в образцы
Для меня проблема заключалась в стиле создания const, который отлично работал до этой iOS8 .. У меня было несколько строк:
int const kView_LayoutCount = 3;
в моем файле .h. Шесть строк, например, привели к 636 файлам компоновщика, когда для общих блоков было установлено значение NO. (14k + если ДА). Строки переместились в .m после удаления .h объявления значения, и компиляция прошла хорошо.
Надеюсь, это поможет другим!
В моем случае причина была слишком глупой:
У меня был файл Constant.h, в котором я определил макросы. Подумал сделать там NSString. и сделал это:
NSString const *kGreenColor = @"#00C34E";
это вызвало проблему дублирования символов для архитектуры arm64 и команда компоновщика завершилась неудачно с кодом выхода 1. Удаление строки const NSString сработало для меня.
проверьте ваш включаемый файл, у меня возникла эта проблема, потому что я случайно # импортировал "filename.m" вместо "filename.h", автозамена (табуляция) поставила "m", а не "h".
Из-за ошибок может показаться, что любые классы появляются несколько раз. Найдите и удалите те классы, которые будут работать.
Я создаю файл AppDelegate.h и .m, создавая несколько раз. Итак, эта ошибка произойдет. Наконец, найдите и удалите те классы, которые у меня работают нормально.
Чтобы решить эту проблему, перейдите к этапам сборки и выполните поиск повторяющихся файлов, таких как (facebookSDK, unityads) и удалите (extension file.o), а затем создайте снова.
Для меня я создал метод, называемый sampleMethod
в ViewController_A, и создал тот же метод в ViewController_B, это вызвало у меня эту ошибку, затем я изменил имя метода в ViewController_B на secondSampleMethod
. Это исправило ошибку.
Кажется, хорошая возможность уменьшить код и не дублировать один и тот же код во многих местах.
Я попытался изменить блоки «Нет общего» с «Да» на «Нет», а затем включить возможность тестирования с «Да» на «Нет». Это не сработало. Я проверял повторяющиеся файлы также на этапах сборки, но дубликатов файлов нет.
У меня возникла эта проблема, потому что я лениво определял переменную в моем .m вне метода, а затем в другом файле .m я определял другую переменную с тем же именем вне метода. Это вызывало проблему с дублированием имени глобальной переменной.
Мне удалось устранить эту ошибку, в которой говорилось: «158 повторяющихся символов для архитектуры armv7, 158 повторяющихся символов для архитектуры arm64» --- Если это то, что вы тоже получаете, то это означает, что вы пытаетесь скомпилировать файл, который импортирует или наследование фреймворка или статической библиотеки, имеющей ссылки на код или файлы C ++. Простой способ справиться с этим - изменить расширение вашего файла .m на .mm. Вот как это происходит, если вы используете Objective C, хотя не уверен в Swift.
Также в настройках сборки - вы можете обновить «другие флаги компоновщика» до -lc ++
Plz Измените настройку.
Шаг 1. Перейдите в ЦЕЛИ -> Настройки сборки -> Нет общих блоков -> Нет
Шаг 2: перейдите в ЦЕЛИ -> Настройки сборки -> включить возможность тестирования -> Нет