링커 명령이 종료 코드 1 (호출을 보려면 -v 사용), Xcode 8, Swift 3으로 실패했습니다.


114

이 오류를 제거 할 수 없습니다!

파생 데이터 지우기 (Preferences-> Locations-> 회색 화살표를 클릭하여 Finder에서 파생 데이터 폴더 열기-> 오른쪽 클릭, 휴지통으로 이동), 프로젝트 청소 (CMD + Shift + K 또는 제품)와 같은 모든 종류의 작업을 시도했습니다. -> Clean), 카르타고 및 종속성 업데이트, StackOverflow의 다른 답변 (대부분 빌드 설정 / 단계 조정)을 확인하고 github에서 앱을 다시 시작했습니다.

내 공동 작업자 컴퓨터에서도 동일한 프로젝트가 작동합니다 ..

편집 : 현재 최고 등급의 답변에서 조금 더 디버깅 할 수있었습니다 ... 그래도 수정하는 방법을 모르겠습니다. 프로젝트에 두 번있는 것이있는 것 같습니다. 두 번 나타나는 것을 찾을 수 없습니다!

다음은 로그 사진입니다.



문제가 해결되지 않았다면 왜 최고 등급 답변을 수락 했습니까 ...?
benomatis

답변:


160

나는 오늘 xcode 8 버전 8.3.2에서 같은 문제에 직면했습니다.

문제를 마우스 오른쪽 버튼으로 클릭-> 로그에 표시

여기에 이미지 설명 입력

그러면 그 문제의 원인을 확인할 수 있습니다.

여기에 이미지 설명 입력


감사합니다! 로그에 기록 된 내용은 다음과 같습니다. imgur.com/vFkNJzZ
Jake Dobson

나는 마침내 이것을 해결했다. 당신은 나를 올바른 방향으로 인도하도록 도왔습니다! Xcode가 클릭했을 때 로그를 공개하지 않았다는 사실이 정말 짜증났습니다 ... 시간을 절약 할 수 있었을까요!
Jake Dobson

Reveal in Log 팁에 감사드립니다. 나는 그것을 사용할 수 몰랐어요
KarenAnne

1
내 대답은 아래를 확인 @GhasemTabatabaei
제이크 돕슨

81
왜 이것이 허용되는 대답입니까? 실제로 질문에 답하는 것이 아니라 잠재적으로 해결책에 도달하는 데 도움이됩니다.
Tom Oakley

116

pod 파일 을 설치 했지만 여전히 .xcodeproj파일 에서 빌드하려고합니다..xcworkspace


4
아니, 그런 이유로 카르타고를 사용했습니다. 그래도 동일한 오류로 다른 사람들에게 도움이 될 수있는 합법적 인 답변입니다!
Jake Dobson

1
m $ AppCenter 코드를 기존 프로젝트에 추가했고 포드가 필요했습니다. 무슨 일이 일어나고 있는지, 그리고 .xcodeproj1 년 넘게 와 함께 해왔는지 전혀 몰랐습니다 .
Dennis Smolek

1
내 수정은 이것과 다소 관련이 있습니다. 최근에 몇 가지 종속성을 업그레이드했으며 이제 프로젝트에서 CocoaPods를 사용했습니다. 이전에는 항상 프로젝트 파일에서 작업했습니다. 내 프로젝트와 포드가 모두 포함 된 작업 공간 파일을 열었 더니 모든 것이 잘 작동했습니다.
Rozgonyi

40

나를 위해 일한 유일한 실행했다 pod deintegratepod install


질문에 대한 답변이 완료되었습니다. 아래에 내 댓글이 보이면 이미 해당 파일로 가져온 파일을 가져온 것입니다. 프로젝트가 파일을 두 번 참조하려고하는 경합 상태에있었습니다.
Jake Dobson

그래, jsut가 나를 위해 작동하지 않았고 내가봤을 때 이것이 나온 것이므로 id가 다른 사람을 도우려고 노력하고 있다고 생각했습니다 ... 이것이 처음입니다. 내 대답을 삭제해야합니까?
Charles Harring

이미 거기에 있기 때문에 아닐 것 같아요. 누군가가 유용하다고 생각할 것입니다. 내가 사용했던 앱은 코코아 포드를 사용하지 않았습니다. 문제는이 오류가 매우 일반적이며 자체에 대한 정보를 거의 제공하지 않는다는 것입니다. 각 프로젝트에 따라 많은 솔루션을 찾을 수 있습니다.
Jake Dobson

그것은 내 하루를 구합니다! 하나님의 축복이 있기를!
user2612604

19

청소 해 봤어? cmd + 시프트 + k


8
오 예 .. 여러 번!
Jake Dobson

그게 말 그대로 내가 얻는 전부입니다. 텍스트를 클릭해도 대부분의 오류에서와 같이 추가 정보 나 파일의 위치가 표시되지 않습니다. 콘솔에 아무것도 없습니다.이 오류 때문에 앱을 실행할 수 없습니다.
Jake Dobson

FWIW, 최근 SDK로 빌드 할 때이 문제가 발생했으며 @FranciscoPerez의 제안이 트릭을 수행했습니다. 디버깅에 너무 깊이 들어가기 전에 첫 번째 단계로 확실히 권장합니다.
riastrad

9

좋아요 ... 그래서 여기 내 문제를 해결 한 것이 있습니다 ...

앱 위임 파일 :

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

내 프로젝트의 DarkSkyAPI.m 파일에 이미 Credentials.h를 가져 왔습니다. 추가 가져 오기를 주석 처리하면 오류가 사라졌습니다!

언급하고 미래에 누구에게나 도움이 될 몇 가지. @ umairqureshi_6의 답변은 프로세스를 진행하는 데 도움이되었지만 해결하지 못했습니다. 그는 내가 정보를 파헤칠 수있는 곳으로 안내했다. AppDelegate 및 DarkSkyAPI 파일이 오류 로그에 계속 표시되고 Credentials 파일에서 가져온 정보로 인해 오류가 발생했습니다. 이 세 파일 중 하나에 있어야한다는 것을 알았으므로 .h가 .m 파일의 모든 가져 오기를 전달한다는 소식을 들었 기 때문에 즉시 가져 오기를 확인했습니다. 팔!


6

나는 이제 질문에 이미 대답했습니다. 그러나 이것이 누군가가 시간을 절약하는 데 도움이된다면 나는 같은 오류가 발생했습니다. 나는 내 쪽에서 아주 작고 어리석은 실수를 찾기 위해 모든 것을 확인했습니다. 내 프로젝트의 뷰 컨트롤러에서 핵심 데이터 ManagedObject 사용자 지정 파일을 가져 왔습니다. 속성 클래스의 .m 파일이 핵심 데이터 클래스의 .h 파일을 가져와 중복 가져 오기를 일으키기 때문에 아키텍처 오류 (링커 명령 실패)에서 중복 기호를 일으키는 .h 파일 대신 .m 파일을 실수로 가져 왔습니다 .

따라서 여러 솔루션을 시도하기 전에 올바른 파일을 가져 왔는지 확인하십시오.!


예! 이것은 내 문제와 매우 유사했습니다. 내 프로젝트에서 동일한 파일을 두 번 가져 왔습니다. 오히려 "fileA.h"를 "fileB.h"로 가져온 다음 "fileA.h"및 "fileB.h"를 "fileC.h"또는 그 라인을 따라 가져 왔습니다 ... 무엇을 사용해야할지 모르기 때문입니다. 다른 사람들이 파일 가져 오기를 다시 확인하도록 미리 알림을 제공 할 수있는 좋은 장소입니다!
Jake Dobson은

6

많은 솔루션이 위에서 언급되었습니다. 아무도 나를 위해 일하지 않았습니다 (하지만 먼저 위에서 시도하십시오).

Project-> Select Target-> Linked Framework and Libraries-> Add all pod libraries를 선택합니다. (포함 된 바이너리에있는 경우 제거)

이제 xcode의 왼쪽 파일 탐색기의 Framework 폴더에서 제거하십시오.

이것은 내 문제를 해결했습니다.


4

프로젝트-> 빌드 단계-> 바이너리를 라이브러리와 연결을 선택하고 모든 포드 라이브러리를 추가합니다.


3

Carthage를 종속성으로 사용하는 것과 동일한 문제가 발생했습니다.

프로젝트 선택-> 빌드 설정-> 비트 코드 사용 검색-> 예로 선택한 경우 아니오를 선택하십시오.

그것은 나를 위해이 문제를 해결했습니다.


2

나는 같은 문제가 있었다.

원인은 2 개의 파일에서 동일한 전역 변수를 선언했기 때문 입니다. 그래서 두 개의 중복 기호 라는 동일한 오류가 표시되었습니다. .

해결책은 이러한 변수를 제거하는 것이 었습니다.


1
왜 하나가 아닌 둘 다 제거 했습니까?
Jake Dobson

2

Flurry 프레임 워크에서이 문제가있는 모든 사람을 위해. 이것이 내 문제를 해결 한 것입니다. 나에게 문제는 다음 파일을 가져 왔지만 사용하지 않았다는 것입니다. "libFlurryTVOS_9.2.3" "libFlurryWatch_9.2.3"

그래서 제가해야 할 일은 프로젝트 대상 설정으로 가서 "연결된 프레임 워크 및 라이브러리"섹션에서이 두 파일을 제거하는 것이 었습니다. 그러면 문제가 해결되었습니다.


2

제 경우 오류의 원인은 두 번 연결된 라이브러리입니다.

나는 xcode에서 react-native자동으로 사용 react-native link하고 수동으로 연결되도록 사용 합니다 .


2

Find Implicit Dependencies확인란이 선택되어 있는지 확인하십시오 .

(제품-> 체계-> 체계 편집-> 빌드-> 암시 적 종속성 찾기)


2

CocoaPods로 Sparkle 프레임 워크를 테스트하고있었습니다.

슬프게도 pod 'Sparkle', '~> 1.21'PodFile을 잘못된 위치에 넣었 습니다. 단위 테스트를 위해 테스트 아래에 놓았습니다.

PodFile의 올바른 위치에 배치되면 모든 것이 정상입니다.


1

난 그냥해야 했어 import Foundation!

나는 Swift 서버 측에 Kitura를 사용하고 있었고 이것을 계속 잊어 버렸습니다!


하아. 예, 무엇이든하기 전에 항상 최소한 재단을 수입해야합니다! 저는 보통 Foundation 대신 UIKit을 가져옵니다. 거의 항상 UIKit의 기능을 사용해야하고 UIKit이 Foundation에서 모든 것을 상속했기 때문입니다. Objc를 사용한 가져 ​​오기는 꽤 까다로울 수 있지만 Swift를 사용하고있는 것 같습니다.
Jake Dobson

예, 저는 Swift를 사용하고있었습니다. 현재 파일에 컴파일러 문제가 나타나지 않았지만 파일을 실행하는 동안에 만이 문제가 발생했습니다!
Honey

1
예, 런타임까지 실제로 확인하지 않는다고 생각합니다. 틀릴 수 있습니다. 그러나 재단에서 무언가에 액세스하려고 시도하고 가져 오기를 찾을 수 없으며 프로세스를 계속할 수 없을 때까지 문제가 없을 것 같습니다.
Jake Dobson

1

내 문제와 해결책은 다음과 같습니다.

소스 트리 (버전 컨트롤러)를 사용하여 소스 코드에서 두 개의 파일을 제거했습니다. 내가 제거한 두 개의 클래스가 포함 된 diff를 적용한 후 Xcode가 자동으로 추가하지 않았습니다. 그래서 링커 오류가 발생했습니다.

그룹 이름을 마우스 오른쪽 버튼으로 클릭하고 "파일 추가"를 선택하여 수동으로 파일을 추가했습니다. 이제 내 오류가 해결되었습니다.

누군가 클래스 파일과 관련된 링커 오류에 직면했다면 수동으로 추가하십시오.


1
분명히 그들이 힌트하려는 파일 문제인 것 같습니다 ... 다른 파일이 서로 정보를 검색하지 않는 것은이 페이지에서 흔히 발견되는 것 같습니다. 답장을 보내 주셔서 감사합니다. 길을 따라 누군가를 돕길 바랍니다!
Jake Dobson

1

내 장치에서 빌드하고 실행할 때이 문제가 없었습니다. 시뮬레이터에서만이 문제가 발생했습니다. 그냥 컴퓨터를 다시 시작하고 실행했습니다. 효과가있었습니다.


1

제 경우에는 Target이름을 변경 Podfile하여 동일한 오류를 생성합니다.

해결책

클릭 project-> Build Phase->Link Binary with libraries하여 오래된 것을 제거하고 청소하고 다시 실행하십시오. 그것은 나를 일합니다.FrameWorksminus button(-)

여기에 이미지 설명 입력

원치 않는 제거 .framework.


1

다른 답변은 나를 위해 작동하지 않았으므로 다른 사람에게 도움이 될 수있는 경우를 대비하여 여기에서 솔루션을 공유합니다.

내 문제는 잘못된 플랫폼에 대해 XCode-Project의 Podfile을 구성하고 있다는 것입니다. 내 Podfile의 시작 부분에있는 "platform : ios"를 "platform : macos"로 변경하면 오류를 제거 할 수있었습니다.


0

나는 같은 문제가 있었다. github 프로젝트를 체크 아웃하는 경우 git clone을 사용하는 대신 git lfs clone을 사용하십시오. 때로는 일부 대용량 파일이 git 만 사용하여 제대로 복제되지 않기 때문입니다. 또한 비트 코드가 비활성화되어 있는지 확인하십시오.


좋은 메모 ..하지만 일반적으로 콘솔은 일부 파일이 너무 커서 전송할 수 없음을 알려줍니다.
Jake Dobson

0

나를 위해 gem 잠금 파일은 내가 설치 한 것보다 이전 버전의 cocoapods를 지정하고있었습니다. 나는 bundle exec pod install대신에 다시 분기하고 실행해야pod install


0

우리 대부분의 경우 문제가 다른 것처럼 보이며 오류 메시지에 적절한 정보가 있습니다. 내 경우에는, 배포 목표로 설정되었다 10.13에 의해 export MACOSX_DEPLOYMENT_TARGET=10.13라인,하지만 실행했다 10.14. 따라서 10.14ITLibrary 관련 기호를 다시 사용할 수 있으려면 일반> 배포 정보에서 배포 대상을 전환해야 했습니다.

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파일이 동일한 프로젝트의 다른 폴더에서 헤더 파일을 가져 왔습니다. 그러나 해당 파일은 "Build Phase"의 "Complied Sources"에 포함되지 않았습니다. 이로 인해 링커 오류가 발생했습니다.

성공적으로 빌드 할 수있는 제품의 "빌드 단계"설정을주의 깊게 비교 한 후 .m헤더 파일이 "컴파일 된 소스"목록에 포함되어야 한다는 것을 깨달았습니다 . 해당 파일을 추가 한 후 내 문제가 해결되었습니다. 명확성을 위해 사진을 첨부합니다. 강조 표시된 파일을 추가해야했습니다.

여기에 이미지 설명 입력


-1

Ionic 1 프로젝트를 빌드하는 동안 동일한 문제가 발생했습니다.

CDVLogger.h 및 CDVLogger.m 파일을 삭제 한 후 문제를 해결할 수있었습니다.


처음에 그 파일이 필요하지 않은 것 같습니까? 프로젝트를 혼란스럽게하고 실행을 방해하는 이러한 파일과 다른 파일의 파일을 요청 했어야합니다.
Jake Dobson 2019

-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;
     }
};

문제가 해결되고 코드가 완벽하게 작동하기 시작했습니다.

좋은 방법은 문제를 조사하고 실제 원인을 찾는 것이지만 이것은 저에게 효과적이었습니다.


나는 이것이이 스레드에 도움이되지 않는다고 생각합니다 ... 같은 것을 별도의 파일로 가져 오는 것과 같은 파일 문제에서 오류가 발생하는 것 같습니다. 이것이 오브젝티브 C의 특정 오류입니다 때문에,이 오류를 얻을 것이라고 이상한 찾을 ...
제이크 돕슨

C ++에서도이 오류가 발생했습니다. 귀하의 경우 링커 오류는 아마도 링커가 생성자에 대한 코드를 찾을 수 없다는 것입니다. 이름을 바꾼 함수와 비슷한 오류가 발생했지만 Xcode 10이 자체적으로 링커 로그를 열지 않았기 때문에 마우스 오른쪽 버튼을 클릭하여 "로그에서 표시"할 수 있는지 몰랐습니다. 오류를 찾는 데 분.
Matt Parkins
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.