Сбой сборки: ld: дублировать символ _OBJC_CLASS _ $_ Algebra5FirstViewController

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

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

ld: дублировать символ _OBJC_CLASS _ $_ Algebra5FirstViewController в.../Algebra5-anwcuftojtxtgkfootneeeqhwztj/Build/полупродукты/Algebra5.build/Debug-iphonesimulator/Algebra5.build/Объекты нормальный /i 386/ExercisesViewController.o а также.../Algebra5-anwcuftojtxtgkfootneeeqhwztj/Build/полупродукты/Algebra5.build/Debug-iphonesimulator/PSLE Algebra5.build/Objects-normal/i386/PSLE_Algebra5FirstViewController.o для архитектуры i386

В чем дело?

Ответ 1

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

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

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

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

ИЗМЕНИТЬ

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Если вы импортировали какие-либо файлы в проект, тогда проверьте файл .m(main) для того же самого, что и в Targets (Project Name) → Build Phases → Compile Sources.

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

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

enter image description here

Ответ 6

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

Ответ 7

У меня была схожая ошибка, и я решил ее .

Попробуйте настроить Build Active Architecture только на NO для проекта "Pods" и цель вашего приложения

Ответ 8

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

Ответ 9

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

Ответ 10

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

Ответ 11

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

Ответ 12

после того, как я получил

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

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

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

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

Ответ 13

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

Ответ 14

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

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

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

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

Изменение значения "Нет" сразу же отключило мое приложение для компиляции и устранения моей проблемы.

Ответ 15

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

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

Ответ: Новые предупреждения в iOS 9

Ответ 16

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

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

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

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

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

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

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

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

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

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

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

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

Ответ 17

Запуск Xcode 4.6.3 на OSX 10.7.5 смог исправить эту ошибку, изменив архитектуру на собственную архитектуру машины сборки из $(NATIVE_ARCH_ACTUAL).

Ответ 18

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

Ответ 19

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

Ответ 20

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

Ответ 21

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

Ответ 22

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

Ответ 23

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

  • Элемент списка
  • Проект
  • Фазы сборки
  • Ссылка на двоичные файлы с библиотеками
  • Удалить устаревшую библиотеку.

Ответ 24

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

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

Ответ 25

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

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, и вы можете легко исправить его.

Ответ 26

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

Ответ 27

В моем случае у меня была ссылка на библиотеку в других флагах Linker. Удаление из него избавилось от ошибки.

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

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

Ответ 28

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