Сбой сборки: 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 не распознал. Я использовал ссылки ниже в качестве справки:
И в конечном итоге:
- "_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
У меня была такая же ошибка.
Я импортировал аудио-кадровую работу, которую я больше не использовал. Я удалил его (НЕ УДАЛЯЙТЕ ЭТО!), И он успешно сработал.