Команда Linker не вдалася з кодом виходу 1 (використовуйте -v для перегляду виклику), Xcode 8, Swift 3


114

Я не можу позбутися цієї помилки!

Я спробував усілякі речі, такі як очищення отриманих даних (Налаштування-> Місцеположення-> клацніть сіру стрілку, щоб відкрити папку «Отримані дані» у Finder-> клацніть правою кнопкою миші, перемістити в сміття), очищення проекту (CMD + Shift + K або Product -> Очистити), оновлення картриджа та залежностей, перевірено інші відповіді на StackOverflow (переважно коригування в Налаштуваннях / Фазах збірки) та повернуто додаток з github тощо.

Цей же проект працює і на моїх комп'ютерах-співпрацівників.

РЕДАКТУВАННЯ: Відповідно до поточної відповіді, яку я отримав найкращий рейтинг, мені вдалося дегустувати трохи далі ... Я все ще не впевнений, як виправити. Схоже, у мене щось було в проекті двічі? Я подивився і не можу знайти нічого, що відображається двічі!

Ось малюнок журналу:



чому ви прийняли найкращу відповідь, якщо вона не вирішила вашу проблему ...?
benomatis

Відповіді:


160

Я сьогодні зіткнувся з тим же питанням у xcode 8 версії 8.3.2

клацніть правою кнопкою миші на питанні -> виявити в журналі

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

то ви зможете перевірити, що викликає це питання

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


Дякую за це! Ось що я отримую в журналі: imgur.com/vFkNJzZ
Джейк Добсон

Я нарешті це вирішив. Ви допомогли вести мене в правильному напрямку! Це дійсно засмакло, що Xcode не виявив журнал при натисканні на ... Могло б врятувати мене деякий час!
Джейк Добсон

Дякуємо за пораду "Розкрити в журналі". Я не знав, що можу ним скористатися
KarenAnne

1
@GhasemTabatabaei Перевірте мою відповідь нижче
Джейк Добсон

81
Чому це прийнята відповідь? Це насправді не відповідає на питання, лише потенційно допомагає досягти рішення.
Том Оуклі

116

Можливо, ви встановили файл pod, і ви все ще намагаєтеся створити його з .xcodeprojфайлу, а не з нього.xcworkspace


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

1
Я додав m $ AppCenter код до вже існуючого проекту, і він потребував Pods. Поняття не маю, що відбувається, і робив це з .xcodeprojпротягом більше року. Щось таке просто!
Денніс Смолек

1
Моє виправлення було дещо пов’язане з цим. Я нещодавно оновив деякі залежності, і зараз проект використовував CocoaPods. Раніше я завжди працював над файлом проекту. Я відкрив файл робочої області, в якому був і мій проект, і Pods, і все працювало чудово.
Розгоній

40

єдине, що працювало для мене, - це бігати pod deintegrateіpod install


На запитання відповіли. Якщо ви бачите мій коментар нижче, я імпортував файл, який вже був імпортований у цей файл. Проект був у гоночному стані, намагаючись посилатися на файл двічі.
Джейк Добсон

гаразд, так це не працювало для мене, і коли я googled це ось що придумав, тому я думав, що я спробую допомогти комусь іншому ... я нова в цьому, чи варто видалити свою відповідь?
Чарльз Харрінг

Гадаю, не тому, що це вже є. Я впевнений, що хтось може вважати це корисним. Додаток, який я використовував, не використовував какаоди. Справа в тому, що ця помилка дуже поширена і дає мало інформації про себе. Так багато рішень можна знайти, залежно від кожного проекту.
Джейк Добсон

Це рятує мій день! Бог вас благословить!
користувач2612604

19

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


8
О так .. багато разів!
Джейк Добсон

Це буквально все, що я отримую ... Натискання на текст не надсилає мені ніякої додаткової інформації або розташування файлу, де це сталося, як це робиться для більшості помилок. Нічого в консолі, вона ніколи не запускає запуск програми через цю помилку ..
Джейк Добсон

FWIW, я нещодавно зіткнувся з цим питанням, коли будівництво за допомогою SDK і пропозиція @ FranciscoPerez зробили свою справу. Однозначно рекомендую це як перший крок, перш ніж ви заглиблюєтеся в налагодження.
riastrad

9

Гаразд ... Отже, ось що вирішило мою проблему ...

у файлі делегата додатка:

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

Я імпортував Credentials.h вже у файл DarkSkyAPI.m у своєму проекті. Коментуючи додатковий імпорт, помилка зникла!

Деякі речі, які варто згадати, і, можливо, допоможуть комусь у майбутньому. @ umairqureshi_6 відповідь допомогла мені в ході процесу, але не вирішила. Він привів туди, де мені вдалося розкопати інформацію. Я постійно бачив файли AppDelegate та DarkSkyAPI, що відображаються в журналі помилок, і інформація, яку вона витягувала з файлу Credentials, викликала помилку. Я знав, що він повинен бути в одному з цих 3 файлів, тому я негайно перевірив імпорт, бо пам’ятав, що чув, що .h здійснює весь імпорт зі свого файлу .m. Бум!


6

Я к тепер на питання вже відповіли. Але якщо це допоможе комусь заощадити деякий час: у мене була така ж помилка. Я все перевірив, щоб знайти з моєї сторони дуже маленьку і дурну помилку. Я імпортував основний файл власного керованого даних ManagedObject в контролер подання проекту. Я випадково імпортував файл .m замість .h- файла, який спричиняв дублікат символу в архітектурній помилці (команда linker не вдалася), оскільки мій .m-клас властивостей імпортує .h-файл основного класу даних, а отже, викликає імпорт дубліката.

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


Так! Це було дуже схоже на мою проблему. У моєму проекті два рази було імпортовано один і той же файл. Швидше, я імпортував "fileA.h" у "fileB.h", але потім імпортував "fileA.h" і "fileB.h" у "fileC.h", або щось у цьому рядку ... Тож додаток виходить з ладу тому що не знає, яким користуватися. Безумовно, гарне місце, щоб нагадати іншим, щоб двічі перевірити імпорт файлів!
Джейк Добсон

6

Вище згадується багато рішень. Ніхто не працював на мене (але спробуйте спочатку вище).

Виберіть Проект -> Вибрати ціль -> Пов'язані рамки та бібліотеки -> Додати всі бібліотеки струків. (видаліть, якщо вони існують у вбудованих бінарних файлах)

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

Це вирішило моє питання.


4

Виберіть проект-> Фаза збірки-> Пов’язати бінарне з бібліотеками та додати всі бібліотеки струків.


3

У мене була така ж проблема із використанням Карфагена для залежностей.

Просто перейдіть до пункту Вибрати проект -> Налаштування збірки -> Пошук увімкнути біткод -> Якщо вибрано Так, виберіть Ні.

Це вирішило для мене цю проблему.


2

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

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

Рішенням було усунення цих змінних.


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

2

Для тих, хто має цю проблему з Flurry Framework. Це те, що вирішило мою проблему. Для мене проблема полягала в тому, що я імпортував такі файли, але ніколи їх не використовував. "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 в неправильному місці. Я помістив його під Тестування (для одиничних тестів).

Після розміщення в правильному місці в PodFile все добре.


1

Я просто повинен був зробити import Foundation!

Я використовував Kitura для сервера Swift і забував це!


Ха. Так, вам завжди потрібно буде імпортувати Фонд, перш ніж робити що-небудь! Зазвичай я імпортую 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 для неправильної платформи. Зміна "платформи: ios" на початку мого Podfile на "платформа: macos" працювала для мене, щоб позбутися помилки.


0

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


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

0

Для мене у файлі блокування дорогоцінного каменю було вказано старішу версію кокаподів, ніж ту, яку я встановив. Довелося 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файл імпортував файл заголовка з іншої папки в рамках того ж проекту. Але цей файл не був включений до "Composite Source" у розділі "Phase Build". Це спричинило помилку лінкера.

Після ретельного порівняння параметрів "Фази збірки" для продукту, який можна було б успішно побудувати, я зрозумів, що .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.