Ошибка компоновщика с кодом выхода 1 (используйте -v, чтобы увидеть вызов), Xcode 8, Swift 3


114

Я не могу избавиться от этой ошибки!

Я пробовал всевозможные вещи, такие как очистка производных данных (Настройки-> Местоположения-> щелкните серую стрелку, чтобы открыть папку производных данных в Finder-> щелкните правой кнопкой мыши, переместите в корзину), очистите проект (CMD + Shift + K или Product -> Очистить), обновив файл Carthage и зависимости, проверил другие ответы на StackOverflow (в основном это корректировки в Build Settings / Phases) и повторно клонировал приложение из github и т. Д.

Этот же проект работает на компьютерах моих сотрудников.

РЕДАКТИРОВАТЬ: Из текущего ответа с самым высоким рейтингом я смог немного отладить ... Я все еще не уверен, как исправить. Похоже у меня что-то в проекте дважды? Я посмотрел и не нашел ничего, что показывалось дважды!

Вот изображение журнала:



почему вы приняли ответ с наивысшим рейтингом, если он не решил вашу проблему ...?
benomatis

Ответы:


160

Сегодня я столкнулся с той же проблемой в xcode 8 версии 8.3.2

щелкните правой кнопкой мыши по проблеме -> показать в журнале

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

тогда вы сможете проверить, что вызывает эту проблему

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


Спасибо за это! Вот что я получаю в журнале: imgur.com/vFkNJzZ
Джейк Добсон,

Я наконец решил это. Ты помог вести меня в правильном направлении! Это действительно отстой, что Xcode не открывал журнал при нажатии ... Мог бы сэкономить мне время!
Джейк Добсон

Спасибо за подсказку "Показать в журнале". Я не знал, что смогу это использовать
KarenAnne

1
@GhasemTabatabaei Проверьте мой ответ ниже
Джейк Добсон,

81
Почему это принятый ответ? На самом деле он не отвечает на вопрос, а только потенциально помогает найти решение.
Tom Oakley

116

Возможно, вы установили pod-файл и все еще пытаетесь собрать его из .xcodeprojфайла, а не.xcworkspace


4
Нет, по этой причине я использовал Карфаген. Однако это законный ответ, который может помочь другим людям с той же ошибкой!
Джейк Добсон

1
Я добавил код m $ AppCenter в существующий проект, и ему потребовались Pods. Понятия не имею, что происходит, и делал это с the .xcodeprojбольше года .. Что-то такое простое!
Денис Смолек

1
Мое исправление было несколько связано с этим. Недавно я обновил некоторые зависимости, и теперь в проекте используется CocoaPods. Раньше я всегда работал с файлом проекта. Я открыл файл рабочей области, в котором были и мой проект, и модули, и все работало нормально.
Розгоный,

40

единственное, что у меня работало, это бегать pod deintegrateиpod install


На вопрос дан ответ. Если вы видите мой комментарий ниже, я импортировал файл, который уже был импортирован в этот файл. Проект находился в состоянии гонки, пытаясь дважды сослаться на файл.
Джейк Добсон

хорошо, да, это просто не сработало для меня, и когда я погуглил, это то, что пришло в голову, поэтому я подумал, что я попробую помочь кому-то еще ... Я новичок в этом, я должен удалить свой ответ?
Charles

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

Это спасает мне день! Будьте здоровы!
user2612604

19

вы пробовали чистую? cmd + shift + k


8
Ах да .. много раз!
Джейк Добсон

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

FWIW, я недавно столкнулся с этой проблемой при сборке с помощью SDK, и предложение @ FranciscoPerez помогло. Определенно рекомендую это в качестве первого шага, прежде чем вы слишком углубитесь в отладку.
риастрад

9

Хорошо ... Итак, вот что решило мою проблему ...

в файле делегата приложения:

#import "AppDelegate.h"
#import "DarkSkyAPI.h"
//#import "Credentials.h"

Я уже импортировал Credentials.h в файл DarkSkyAPI.m в моем проекте. Комментируя дополнительный импорт, ошибка исчезла!

Некоторые вещи, о которых стоит упомянуть и, возможно, помочь кому-нибудь в будущем. Ответ @ umairqureshi_6 помог мне в этом процессе, но не решил его. Он привел туда, где я смог выкопать информацию. Я продолжал видеть файлы AppDelegate и DarkSkyAPI, отображаемые в журнале ошибок, и информация, которую он извлекал из файла Credentials, вызывала ошибку. Я знал, что он должен быть в одном из этих трех файлов, поэтому сразу проверил импорт, потому что вспомнил, что слышал, что .h переносит весь импорт из своего файла .m. Бум!


6

Я знаю, что на этот вопрос уже дан ответ. Но если это поможет кому-то сэкономить время: у меня была такая же ошибка. Я все проверил, чтобы найти с моей стороны очень маленькую и глупую ошибку. Я импортировал пользовательский файл ManagedObject основных данных в контроллер представления моего проекта. Я случайно импортировал файл .m вместо файла .h, который вызывал повторяющийся символ в ошибке архитектуры (сбой команды компоновщика), потому что мой файл .m класса свойств импортирует файл .h основного класса данных и, следовательно, вызывает дублирующийся импорт.

Поэтому просто проверьте, правильно ли вы импортировали файлы, прежде чем пробовать несколько решений.!


Да! Это было очень похоже на мою проблему. Один и тот же файл дважды импортировался в мой проект. Скорее, я импортировал «fileA.h» в «fileB.h», а затем импортировал «fileA.h» и «fileB.h» в «fileC.h» или что-то в этом роде ... Итак, приложение вылетает потому что он не знает, что использовать. Определенно хорошее место, чтобы напомнить другим о необходимости дважды проверить импорт файлов!
Джейк Добсон

6

Выше упомянуто множество решений. У меня никто не работал (но сначала попробуйте выше).

Выберите Project -> Select Target -> Linked Framework and Libraries -> Добавить все библиотеки модулей. (удалите, если они существуют во встроенных двоичных файлах)

Теперь удалите их из папки Framework в левом проводнике файлов xcode.

Это решило мою проблему.


4

Выберите проект-> Фаза сборки-> Связать двоичный файл с библиотеками и добавьте все библиотеки модулей.


3

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

Просто зайдите в Select Project -> Build Settings -> Search for Enable Bitcode -> Если выбрано Yes, выберите No.

Это решило эту проблему для меня.


2

У меня была такая же проблема.

Причина в том, что я объявил одну и ту же глобальную переменную в 2 файлах . Таким образом, он показывал ту же ошибку, говоря 2 повторяющихся символа .

Решением было удалить эти переменные.


1
почему вы удалили оба, а не только один?
Джейк Добсон

2

Для тех, у кого есть проблема с фреймворком Flurry. Это решило мою проблему. Для меня проблема заключалась в том, что я импортировал следующие файлы, но никогда их не использовал. "libFlurryTVOS_9.2.3" "libFlurryWatch_9.2.3"

Так что все, что мне нужно было сделать, это перейти к настройкам цели проекта и удалить эти 2 файла из раздела «Связанные рамки и библиотеки», и проблема была решена.


2

В моем случае причиной ошибки является библиотека, которую подключали два раза.

Я использую, react-nativeчтобы он был автоматически связан с использованием react-native linkи вручную в xcode.


2

Убедитесь, что Find Implicit Dependenciesфлажок установлен.

(Продукт -> Схема -> Изменить схему -> Сборка -> Найти неявные зависимости)


2

Я тестировал фреймворк Sparkle с помощью CocoaPods.

К сожалению, я поместил pod 'Sparkle', '~> 1.21'PodFile не в то место. Я поместил его под Testing (для модульных тестов).

После размещения в правильном месте в PodFile все в порядке.


1

Мне просто нужно было сделать import Foundation!

Я использовал Kitura для серверной части Swift и все время забывал об этом!


Ха. Да, вам всегда нужно будет как минимум импортировать Foundation, прежде чем что-либо делать! Я обычно импортирую UIKit вместо Foundation, потому что почти всегда мне нужно будет использовать функции UIKit, а UIKit наследует все от Foundation за вас. Импорт с помощью Objc может быть довольно сложным, но похоже, вы использовали Swift?
Джейк Добсон,

Да, я использовал Swift, у файла под рукой не было проблем с компилятором, но я столкнулся с этой проблемой только во время запуска файла!
Дорогая,

1
Да, я не думаю, что это действительно проверяет до времени выполнения, я могу ошибаться. Но, похоже, проблем не возникнет, пока вы не попытаетесь получить доступ к чему-либо из Foundation, не сможете найти импорт, а затем не сможете продолжить процесс - сбой!
Джейк Добсон

1

Вот моя проблема и решение:

Я удалил два файла из исходного кода, используя дерево исходных текстов (контроллер версий). После применения diff, содержащего два удаленных класса, Xcode не добавил его автоматически. Итак, у меня ошибка компоновщика.

Я вручную добавил файлы, щелкнув правой кнопкой мыши имя группы и выбрав «Добавить файлы в». Теперь моя ошибка решена.

Если кто-то сталкивался с ошибкой компоновщика в отношении файла класса, попробуйте добавить его вручную.


1
Это определенно похоже на проблему с файлом, на которую они пытаются намекнуть ... Файлы в другом месте не извлекают информацию друг от друга, похоже, на этой странице обычно можно найти. Спасибо за ваш ответ. Надеюсь, это поможет кому-то в будущем!
Джейк Добсон,

1

У меня не было этой проблемы, когда я собирал и запускал на собственном устройстве. Только была эта проблема с симуляторами. Я просто перезапустил свой компьютер и запустил его. Это сработало.


1

В моем случае я изменил Targetимя в моем PodfileТак что это создает ту же ошибку для меня.

Решение

Просто зайдите. project-> Build Phase->Link Binary with librariesУдалите старую FrameWorks, нажав « Очистить» minus button(-)и снова «Запустить». Это работа меня.

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

Удалить нежелательные .framework.


1

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

Моя проблема заключалась в том, что я настраивал Podfile своего XCode-Project для неправильной платформы. Изменение «platform: ios» в начале моего подфайла на «platform: macos» помогло мне избавиться от ошибки.


0

У меня такая же проблема. Если вы проверяете какой-либо проект github, то вместо использования git clone используйте git lfs clone, так как иногда некоторые большие файлы неправильно клонируются с использованием только git. Также убедитесь, что ваш битовый код отключен.


хорошее примечание .. но обычно консоль сообщает, что некоторые файлы слишком велики для передачи?
Джейк Добсон

0

Для меня файл блокировки gem указывал на более старую версию cocoapods, чем та, которую я установил. Мне пришлось заново разветвляться и запускать bundle exec pod installвместоpod install


0

Кажется, что проблема у большинства из нас другая, и сообщение об ошибке содержит приличную информацию. В моем случае, Target Deployment был установлен 10.13на export MACOSX_DEPLOYMENT_TARGET=10.13линии, но я бегу 10.14. Поэтому мне пришлось переключить цель развертывания на 10.14Общие> Информация о развертывании, чтобы символы, связанные с ITLibrary, снова были доступны.

cd /Users/foo/src/scrobble/macos/itunes-scrobble
    export MACOSX_DEPLOYMENT_TARGET=10.13

... SNIP ...

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_ITLibMediaItem", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_ITLibPlaylist", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_ITLibrary", referenced from:
      objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

0

В моем случае я производил несколько продуктов из одного проекта. Для одного из продуктов main.mфайл импортировал файл заголовка из другой папки того же проекта. Но этот файл не был включен в «Соответствующие исходные коды» в «Фаза сборки». Это вызвало ошибку компоновщика.

После тщательного сравнения настроек «Фазы сборки» для продукта, который может быть успешно собран, я понял, что .mфайл заголовка необходимо включить в список «Скомпилированный исходный код». Моя проблема была решена после добавления этого файла. Прикрепляю картинку для наглядности. Выделенный файл нужно было добавить.

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


-1

У меня возникли те же проблемы при сборке проекта Ionic 1.

Мне удалось решить проблему после удаления файла CDVLogger.h & CDVLogger.m


Кажется, вам вообще не нужны эти файлы? Должно быть, он также запрашивал файлы в этих и других файлах, запутывая проект и не давая ему запуститься.
Джейк Добсон

-4

Хорошо, у меня была такая же проблема только сегодня, и я начал гуглить, когда наткнулся на эту ветку. Я не дочитал вопрос, когда в голову пришел ответ: я объявил класс с пустым конструктором

class MyClass{
    MyClass();

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

    ~MyClass(){
        cout << "Deleting object" << endl;
     }
};

Затем я подумал, почему бы не завершить (не уверен, правильно ли я выбрал слово здесь, но кого это волнует) конструктор моего класса фигурными скобками ( {}). Так я и сделал:

class MyClass{
    MyClass(){}

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

    ~MyClass(){
        cout << "Deleting object" << endl;
     }
};

Проблема устранилась, мой код заработал отлично.

Я знаю, что хорошая практика - исследовать проблему и найти настоящую причину, но у меня это сработало.


Я не думаю, что это полезно для этой темы ... Похоже, что ошибка связана с проблемой файла, например, при импорте того же самого в отдельные файлы. Мне кажется странным, что вы получили эту ошибку, потому что это ошибка, специфичная для Objective-C ...
Джейк Добсон

Я получил эту ошибку и на C ++. Ошибка компоновщика в вашем случае, вероятно, заключалась в том, что компоновщик не смог найти код для вашего конструктора. У меня была аналогичная ошибка с функцией, которую я переименовал, но поскольку Xcode 10 не открывал журнал компоновщика сам по себе, и я не знал, что вы можете щелкнуть правой кнопкой мыши и «открыть журнал», я был несколько озадачен. минут пытается найти ошибку.
Мэтт Паркинс,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.