Ошибка компоновщика Mach-O на Xcode 4.6

У меня есть приложение iOS на Xcode 4.6, и когда я недавно пытался создать и запустить в симуляторе iPhone 6.1, я получил «ошибку компоновщика Mach-O». Он продолжал говорить:

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

Кто-нибудь знает, как это решить?

Спасибо!

Просто зайдите в «Build Phases» -> «Compile Sources» и найдите дубликаты классов.

Проверьте, есть ли у вас файлы * .m в #import ! Кажется, это была моя ошибка …

В моем примере я объявил

 extern NSString const *keyString 

в двух разных файлах. Я переименовал один из них, и он решил мою проблему.

  1. Выйти из Xcode
  2. Перезапустить систему
  3. Выберите Xcode -> Настройки -> Местоположение
  4. В разделе «Местоположения» вы увидите «Производные данные». Нажмите на значок стрелки рядом с дорожкой.
  5. Это откроет папку, содержащую «Производные данные», удалив ее.
  6. Очистите продукт и выполните

    если все еще не работает

    Настройки сборки> Включить биткод> Нет введите описание изображения здесь

В моем случае это были константы.

 NSString *const cellID = @"cellID"; 

Эта строка была написана в двух файлах .m. После добавления static ключевого слова в начале проблема была решена.

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

Я не уверен, что смогу дать вам решение, но я поделюсь ответом, так как то же самое произошло и с xCode 4.6. Я добавил заголовок класса C и файл реализации и включил их в main. Затем я решил удалить этот новый заголовок и реализацию класса C. Когда я снова добавил новый класс c / header c тем же именем и вызовами функций, я закончил с вашей ошибкой.

Честно говоря, это может быть ошибкой. Единственный и быстрый способ, с помощью которого я зафиксировал это, – это запустить новый проект и потянуть все классы.

Удостоверьтесь, что у вас нет не-мгновенных методов с одним и тем же именем в нескольких классах (например, если у меня есть два диспетчера видимости, которые очень похожи, поэтому для быстрого перемещения я копирую и вставляю код с одного контроллера представления во второй, и оба они есть методы, называемые такими же: NSMutableString * filterStringFromStringWithFilter (NSString * string, NSString * filter)), тогда приложение запутывается, какой из этих методов использовать, поскольку они оба доступны, RENAME IT во втором классе и изменять любые вызовы на этот метод в этом классе, и вы устранили путаницу. Разве мы не хотим, чтобы вещи были более ясными!

Если вы хотите изменить значение как в буксировке другого класса. Не забывайте отмечать статическими ключевыми словами.

или clang произведет такую ​​ошибку ниже без какой-либо интерпретации значений.

Apple Mach-O Linker Ошибка clang: ошибка: сработала команда компоновщика с кодом выхода 1

Когда вы реорганизуете функцию класса, вы также иногда получаете эту ошибку. Просто зайдите в Product-> Clean и перестройте.

Build Phases "->" Compile Sources "нажмите кнопку" Проверить настройки "

он исправит ваш проект

Interesting Posts
Давайте будем гением компьютера.