Сборка завершилась неудачно с: ld: дубликат символа _OBJC_CLASS_$_Algebra5FirstViewController

Я неожиданно получаю эту ошибку при запуске приложения через симулятор iPhone:

clang: error: сбой команды компоновщика с кодом выхода 1 (используйте -v для просмотра вызова):

л.д.: дублировать символ _OBJC_CLASS_$_Algebra5FirstViewController в.../Algebra5-anwcuftojtxtgkfootneeeqhwztj/Build/ полупродукты /Algebra5.build/Debug-iphonesimulator/Algebra5.build/ Объекты нормальный /i386/ExercisesViewController.o и.../Algebra5-anwcuftojtxtgkfootneeeqhwztj/Build/Intermediates/Algebra5.build/Debug-iphonesimulator/PSLE ​​Algebra5.build/Objects-normal/i386/PSLE_Algebra5FirstViewController.o для архитектуры i386

О чем это все?

28 ответов

Решение

Похоже, класс Algebra5FirstViewController компилируется несколько раз.

Можете ли вы убедиться, что.m и.mm включены только один раз в исходные тексты вашего проекта в Xcode? Вы также можете подтвердить это, проверив в журнале компиляции (последний значок справа, рядом со значком точек останова) и убедитесь, что он скомпилирован только один раз.

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

Наконец, вы можете попробовать очистить и перестроить, на случай, если старые объектные файлы все еще присутствуют, и в скомпилированных файлах есть некоторое мусор. Так, на всякий случай...

РЕДАКТИРОВАТЬ

Также отмечу, что вторая ссылка сделана в файле для ExercisesViewController. Может быть, есть что-то в этом файле. Либо вы # импортировали файл Algebra5FirstViewController вместо.h, либо ExercisesViewController имеет @implementation (Algebra5FirstViewController) вместо @implementation (ExercisesViewController), либо был какой-то мусор с этим файлом, который будет очищен с помощью Clean a Rebuild.

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

Также была эта проблема, объявив const * NSString в заголовочном файле (неправильно) вместо файла реализации (правильно)

Я получил эту проблему, потому что я случайно импортировал.m вместо.h. Надеюсь, что прочитав это спасет кого-то с той же проблемой некоторое время

У меня была такая же проблема. Получил это решено!

Если вы импортировали какие-либо файлы в проект, то проверьте.m (основной) файл для того же, который существует в Targets (Имя проекта) -> Этапы сборки -> Исходники компиляции.

Если файл не существует, включите его, используя кнопку (+) "Добавить". Кроме того, если дубликаты файлов существуют (если есть), удалите их.

Теперь нажмите cmd+shift+k, чтобы очистить проект. Новая сборка не должна отображать эту ошибку.

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

Я получил аналогичную ошибку при добавлении файлов из другого проекта, как объяснил @paiego. Моя ошибка состояла в том, что я не проверял "Добавить к целям". Как объяснено выше, я удалил ссылки и снова добавил файлы, но на этот раз проверяя "Добавить к целям".

Я получил подобную ошибку, и я получил ее решить таким образом.

Попробуйте установить для параметра "Создать активную архитектуру только значение" НЕТ "проект" Стручки "и цель вашего приложения.

Я встречал это, когда импортировал ViewController.m в TableViewController. Попробуйте удалить '#import "ViewController.m", если он завершился. Надеюсь, это поможет!

В одном случае я видел эту ошибку при перетаскивании нового класса ' .h и.m в проект. Единственное решение, которое я нашел, было удалить ссылки на эти файлы и затем добавить их обратно через меню проекта.

"Команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v, чтобы увидеть вызов)" - я получил эту ошибку при запуске приложения PhoneGa p на iPhone. Я изменил Build Active Architecture Only на Yes, и он работал нормально.

Я публикую новый ответ на этот вопрос, потому что столкнулся с этой ошибкой и мне пришлось использовать другое решение, которое, я думаю, является специфическим для iOS 9.

Мне пришлось явно отключить параметр "Включить битовый код в настройках сборки", который автоматически включается в обновлении.

Ссылочный ответ: новые предупреждения в iOS 9

Я нашел эту статью, которая предоставила мне решение. Это относится к Xcode 7, где по умолчанию для No Common Blocks по умолчанию Да, а не Нет в предыдущих версиях.

Это цитата из статьи:

Похоже, проблема заключается в том, что "Нет общих блоков" в разделе "Apple LLVM 6.1 - Генерация кода" на панели настроек сборки установлено на "Да" в последней версии XCode.

Это вызвало то, что я опишу как циклические ссылки, где класс, который был включен в мои источники компиляции, был указан через #import в другом исходном файле (appDelegate.m). Это вызвало дублирование блоков для переменных, которые были объявлены в исходном базовом классе.

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

Это происходит либо в том случае, если в разделе "Исходники компиляции" отсутствуют некоторые файлы, либо для некоторых файлов найдены повторяющиеся записи. В моем случае у меня были повторяющиеся записи для двух файлов, я удалил одну запись для каждого из файлов, что решило мою проблему. Надеюсь это поможет.

[XCODE 7.1 ОБНОВЛЕНИЕ]

Первый вариант, который работал:

Я изменил Deployment Target с 7.1 до 8.1 и ошибка ушла.

Надеюсь, что это помогает кому-то.

ОБНОВЛЕНИЕ (день 2): Второй раз я вернусь сюда через 2 дня.

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

  1. "_OBJC_CLASS _ $ _ viewsampleViewController", на который ссылаются из:

  2. 'ld: warning: каталог не найден для опции'

И в конечном итоге:

  1. "_OBJC_CLASS _ $ _ viewsampleViewController", на который ссылаются из:

Я удаляю все из FrameWork Search Paths + Compile Resources + Run Script Phases + стручки, а затем переустановить их снова, чтобы в конечном итоге найти успех.

Проблема с моим размером (на второй день) была больше связана с конфликтующими файлами или файлами, которые Xcode не распознал.

Но, в конечном счете, помогло удалить все (упомянутое выше и в ссылках), много раз очистить и переустановить фазы сценариев pods/frameworks/run.

Очень надеюсь, что это кому-то поможет.

Кажется, что для m я перетащил файлы в проект и после этого не сработал, нажал файл "добавить файлы в проект". Оба были неправильным подходом. просто перетащите его в папку проектов (в Finder), в которой находятся другие файлы.h и.m.

Как только я получил

18 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1

Для меня это было связано с тем, что я использовал "const NSInteger" в моем случае коммутатора.

Что я сделал, так это изменил const NSInteger на enum и заменил ссылку на значения enum.

Это исправило ошибку для меня.

Я получил это один раз (случайно), импортировав файлы.h и.m в один класс.

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

В итоге я просто удалил библиотеку из Link Binary With Libraries, а затем снова добавил ее, и она работала нормально.

У "Link Binary With Libraries" была старая библиотека под названием проекта. Исправлено после удаления.

  1. Элемент списка
  2. проект
  3. Этапы сборки
  4. Связь бинарных с библиотеками
  5. Удалить устаревшую библиотеку.

Варианты этой проблемы могут возникать, если у вас отсутствует библиотека или файл. Убедитесь, что в вашем Project Explorer нет пропущенных файлов: они будут написаны красным, если Xcode не сможет их найти.

Запуск Xcode 4.6.3 на OSX 10.7.5 смог исправить эту ошибку, изменив Architectures на Native Architecture of Build Machine с $(NATIVE_ARCH_ACTUAL).

Это произошло для меня, когда я назвал ссылку UILabel и int одним и тем же, я не получил ошибку, когда набрал его только при попытке запустить его, поэтому я не осознавал, что это была проблема, но если вы есть что-то вроде ярлыка, который является "счетом", и вы называете его счетом, и называете int, который является счетом, также означает, что эта проблема возникает.

Единственный (и безошибочный) способ решения этой проблемы - сборка теста из командной строки:

xcodebuild -workspace MyProject.xcworkspace/ -scheme MyScheme -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 7,OS=10.3.1' test

Итак, на этом этапе ваша компиляция, безусловно, не удастся, но вы увидите все проблемы с компоновкой. В моем случае у меня было несколько проблем, таких как:

  • ld: рамки 'Foo' не найдены
    Чтобы решить эту проблему, вам нужно на вашей цели BuildSettings->Linking->OtherLinkerFlags и удалить фреймворк Foo.
  • Использование неразрешенного идентификатора ClassName.
    Чтобы решить эту проблему, мне нужно добавить / проверить целевое членство файла в целевой UITest тоже.

Другие возможные проблемы будут подняты xcodebuild, и вы можете легко исправить это.

Я получил эту ошибку при реализации подкласса без добавления необходимого фреймворка (в данном примере MPMoviePlayerController без фреймворка MediaPlayer)

Я получил эту же проблему при работе с Bolts.framework. Оказывается, что, когда Болты будут повреждены, никакое количество повторного импорта не решит проблему. Мне пришлось вернуться к исходному загрузочному файлу и полностью импортировать его заново. Это исправило это сразу. Это была такая странная проблема, что мне потребовалось целую вечность, чтобы понять это... надеюсь, этот совет избавит некоторых из вас от таких же разочарований:)

Просто очистка CMD + SHIFT + K, затем сборка CMD + B работала на меня.

В моем случае у меня была ссылка на библиотеку в Другие флаги компоновщика. Удаление это избавило от ошибки.

У меня была такая же ошибка. Я импортировал аудиофрейм, который больше не использовал. Я удалил его (НЕ УДАЛЯЙТЕ ЭТО!), И он успешно построен.

Другие вопросы по тегам