장치를 컴파일 할 때 Apple Mach-O 링커 오류


238

방금 xcode 4.0으로 업그레이드했으며 더 이상 iPhone에 배포 할 수 없으며 Apple Mach-O Linker Error가 발생하지만 여전히 시뮬레이터에서 작동합니다.

    Ld /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel normal armv7
    cd /Users/yveswheeler/iParcel
    setenv IPHONEOS_DEPLOYMENT_TARGET 3.2
    setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -L/Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos -F/Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos -filelist /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel.LinkFileList -dead_strip -all_load -ObjC -lxml2 -miphoneos-version-min=3.2 -framework UIKit -framework CoreGraphics -framework QuartzCore /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Core.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Network.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Style.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UI.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UICommon.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UINavigator.a -framework AddressBook -lz.1.2.3 -framework Foundation -framework CFNetwork -framework MobileCoreServices -framework SystemConfiguration -framework MessageUI -framework AudioToolbox -o /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel

arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Core.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Network.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Style.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UI.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UICommon.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UINavigator.a: No such file or directory
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 failed with exit code 1

38
이런 젠장?! 이렇게 많은 다른 에 문제 같은 오류 메시지. 잘 했어 애플!
Iulian Onofrei

18
"오류 오류가 발생했습니다" ) : 더 도움이 될 것입니다
Aviram Netanel

오류가 발생하기 전에 링커가 내뿜는 경고를 확인하십시오. 더 나은 / 더 구체적인 솔루션으로 이어질 수 있습니다.
Pro Q

답변:


216

영구적 인 해결 방법은 다음과 같습니다. 일반적으로 프로젝트를 덮어 쓰면 이러한 문제가 발생할 수 있습니다.

업데이트-Clang 오류-Mach-O 링커 오류

경우에 따라 .xctest 오류를 표시하는 오류 로그 창에서 오류를 수정했습니다.

-> 프로젝트를 선택하십시오

-> 이것 옆에 (일반 탭 직전에) 드롭 다운에서 프로젝트 테스트 파일을 선택하십시오.

-> ProjNameTests와 같은 하나의 옵션이 있습니다.

-> 호스트 응용 프로그램에서 사용자 정의가 표시되는 경우에만 드롭 다운에서 프로젝트를 선택하십시오

끝난!

여기에 이미지 설명을 입력하십시오

오래된 방법이 삭제되었습니다.


4
내가 얻는 것보다 Framework 검색 경로를 제거하면 헤더 파일을 찾을 수 없습니다
Danpe

62
나는 그것을 얻지 못한다고 생각합니다. 어떻게해야합니까…?
파비안

1
@fabian 그냥 건너 뛰고 다른 해결책을 시도해보십시오 :-)
Gajendra K Chauhan

4
내 남자를 구했다. 상사 앞에 앉아 작업중인 앱을 보여줘야하며이 링커 오류가 발생합니다. 나는 여기에 착륙하지 않으면 사라졌다 : D
Saraz

2
마지막 단계에서 호스트 응용 프로그램은 어디에 있습니까?
Kartiikeya

195

나는 같은 문제가 있었고 문제는 실수로 구현 파일에서 .h 대신 .m 파일을 가져 왔다는 것입니다.


1
오류를 찾을 수 없습니다! 다만 각각의 모든 솔루션을 시도
AsifHabib

이것은 사실이 아닙니다. 새 프로젝트에서 같은 것을 시도했지만 여전히 같은 오류가 발생합니다.
Hemang 2016 년

프로젝트 설정 및 빌드 단계 섹션으로 이동하여 "컴파일 소스"대신 "번들 자원 복사"섹션에 .m 파일이 없는지 확인하십시오. 그것은 나를 위해 일했다
LuAndre

해결책을 찾을 수 없습니다. 내가 뭘할지 모르겠다 ...
Markus

당신은 내 생명을 구했습니다. 정말 고맙습니다!
Isaac Isaac

73

같은 문제가 발생했습니다.

해결책 (나를 위해) = 프레임 워크를 확인하십시오.

제 경우에는 "CoreData.framework"없이 CoreData 관련 클래스를 추가했습니다. 그것을 추가하면 MACH_O 불만이 해결되었습니다.


6
최신 SDK 릴리스에없는 라이브러리를 다시 연결 한 경우에도 발생합니다. libz.1.2.3에 링크했으며 SDK에 1.2.5가 포함되어 있다고 가정 해 봅시다. 프레임 워크를 확인하는 것이 좋습니다. 단테 감사합니다!
SlowTree

감사합니다 SlowTree, 제안 저장이 링커 충돌에 대한 내 경험을 해결했습니다. libz.1.2.3 내지 libz.1.2.5;
톰 페이스

2
Cocoapods libPods.a는 나를 위해 두 파일을 링크했습니다 (따라서 중복 기호). 고마워, 단테!
Nick Merrill

예. .a 파일을 제거하고 링커에서 다시 추가했습니다. 작동했습니다!
Balasubramanian 2016 년

61

.xcodeproj가 아닌 .xcworkspace 파일을여십시오. 열린 .xcworkspace 파일을 반복합니다. 모든 오류가 사라집니다.


1
와, 그것은 가장 미친 디버그 메시지 중 하나 여야합니다. 나는 이것이 이것이 제공된 메시지에 근거한 이유라고 문자 그대로 추측하지 못했을 것입니다.
Joseph Casey

1
.xcodeproj에 포함되지 않은 외부 라이브러리가 있기 때문에 나를 위해 속임수를 썼습니다. cocoapods와 관련이 있었다
Sjoerd de Wit

이것은 나를 위해 일했습니다. @SjoerddeWit이 말했듯이 cocoapods를 포함하려면 .xcodeproj가 아닌 .xcworkspace를 열어야합니다.
코디 리치몬드

내 하루를 구했다! +1
Bruno Monteiro

단일 프로젝트를 xcode로 내보냈으며 .xcworkspace 파일이 없습니다
Ayush Malviya

36

다시 : 제목에 설명 된 문제 :

다른 사람이 명백한 것을 놓친 경우를 대비하여 ...

새 버전의 Xcode4를 설치하고 기존 파일을 새 프로젝트로 드래그 한 후이 오류가 발생했습니다. '파일 추가 옵션 선택 :'대화 상자에서 '대상에 추가'확인란이 선택되어 있지 않은 것으로 나타났습니다. Targets> Build Phases> Compile Sources에서 누락을 수정하면 문제가 해결되었습니다.


이 트릭은 나를 위해 일했습니다. 감사. 모든 컴파일 디렉토리를 삭제하고 프로젝트를 다시 빌드하십시오.
Vivek Gyaneshwar

34

메뉴> 제품> 청소가 작동합니다. 나는 다른 사람들에 대해 확신하지 못한다. 보여주기 위해 그림을 추가했습니다.

여기에 이미지 설명을 입력하십시오


1
대박. 지금까지 내가 찾은 가장 쉬운 솔루션입니다.
Vincent van Leeuwen 2016 년

29

기괴한 오류. 나를 위해 방금 Xcode를 청소하고 다시 시작했는데 문제가 해결되었습니다.



24

이 답변들 중 어느 것도 도움이되지 않았습니다. 그런 다음 Cocoapods를 다시 설치하려고했습니다.

pod deintegrate

pod install

문제 해결됨!


포드 및 xcode와의 연결 끊기가 어디에 있는지 확실하지 않지만 종종 포드 파일이 파생 데이터 폴더에 파일을 만들지 못하는 경우가 종종 있습니다. 이 문제를 해결하는 것 같습니다. 이 답변을 시작할 수 있기를 바랍니다 ..
Jacksonkr

20

문제는 XCode 4에서 종속성이 이전에 XCode 3에서했던 것처럼 기본 프로젝트의 아키텍처 설정을 가정하지 않는다는 것입니다. 모든 종속성을 통해 올바른 아키텍처를 설정해야했습니다.


2
감사합니다! 링커의 오류 메시지가 "파일을 찾았지만 사용할 수 없습니다 ..."가 아니라 "파일을 찾을 수 없음"에 대해 불평하고 라이브러리 검색을 찾는 xcode 설정을 헤매고 있다는 사실에 오해되었습니다. 경로. 그러나 이것은 나를 위해 일했습니다. 그리고이 문제를 겪고 있다면이 다른 게시물도 관련이 있습니다 : stackoverflow.com/questions/2999844/three20-and-ios-4 . 또한이 멋진 요약 블로그 : amirnaor.com/?p=112
Rob

13

나는 똑같이 그것을 해결했다.

xcode 환경 설정에서 위치 탭의 빌드 위치 값 이 "로 변경 Place build products in locations specified by targets"됩니다.


고마워 Wolfert, 그것을 시도했지만 여전히 1250 Apple Mach-O Linker Warnings가 있고 진행되지 않습니다. 이 문제를 해결하기 위해 다른 작업을 했습니까? 건배

고마워요 Wolfert! 당신은 내 많은 시간을 절약했습니다.
Sunil Targe

6
XCode 5.1에서 옵션을 사용할 수 없음
Hemang

13

나는 이것을 잠시 동안 고투했고, 내 경우에는 FRAMEWORK_SEARCH_PATHS라는 검색 경로에서 빌드 설정이되었습니다. 프로젝트, 대상 및 "해결"설정을 비교하는 것처럼 보이는 "레벨"버튼을 선택하는 데 도움이되었습니다. 내 목표 설정이 어떻게 든 "$ (상 속됨)"의 기본값을 대체하는 것을 보았고 재정의 된 값은 XCode가 설정을 "해결"한 값이었습니다. 이 경우 3.2 SDK를 지정하는 재정의를 제거하면 링커 오류가 사라졌습니다 .4.0 이후 메소드를 호출 한 클래스에 대한 경고가 최근에 나타났습니다.

이러한 경고에 대해-최근 변경을 위해 MessageUI 프레임 워크를 추가하기 전에는 경고를 본 적이 없습니다. 나는 그 프레임 워크를 추가 할 때 XCode가 대상에 재정의를 추가하여 영리한 무언가를 시도했다는 것을 의심하지만 확실하지 않습니다. 나는 어떤 시점에서도 명시 적으로하지 않았다. 예를 들어 NSURL의 URLByAppendingPathComponent 메소드에 대한 경고는 sdk 4.0까지 나타나지 않았습니다. MessageUI 프레임 워크를 추가하기 전에 해당 경고가 표시되지 않습니다. 그리고 재정의를 제거했기 때문에 더 이상 그것들을 얻지 못했습니다.


11

이 문제가 발생하여 가져 오기로 해결 QuartzCore했습니다.


8

CordovaLib.xcodeproj-> Build Settings에서 "Build Active Architectures Only"를 Yes로 변경하면 나에게 트릭이되었습니다. 이전에는 앱이 시뮬레이터에서 실행되었지만 장치에서는 실행되지 않았습니다.


7

빌드 설정을 업데이트해야 할 수도 있습니다.

XCode 4가 포함 된 이전 SDK가 없을 수 있으므로 iOS 대상 버전 및 프로세서 아키텍처를 확인하십시오.

빌드 설정에«Missing SDK»가 표시 될 수 있습니다. 해당하는 것으로 변경하십시오.


xcode를 업그레이드 할 때마다 가장 먼저하는 일입니다. 이번에는 문제가되지 않습니다.
CodeVomit

7

나는 .h가 프로젝트에있는 동안 실수로 .m 파일을 삭제했습니다. .m 파일을 복원하면 문제가 사라졌습니다.


6

특정 프레임 워크 검색 경로가 지정되어 있지 않은지 확인하십시오. 대상의 정보로 이동하여 프레임 워크 검색 경로 항목을 제거하면 지정된 배치 버전의 기본값을 사용해야합니다.


5

방금 category class파일 을 만들려고 하는데이 이상한 문제가 발생했습니다.

문제를 일으키는 카테고리 클래스를 작성하는 잘못된 방법 :

New File-> Cocoa Touch-> Objective-C class, 그때에 파일의 이름을 변경 같은 카테고리 클래스 (즉 .. 이름 OriginalClass_CategoryName.h/m으로 OriginalClass+CategoryName.h/m, 또한 파일의 내용을 수정).

올바른 방법은 다음과 같습니다.

New File-> Cocoa Touch-> Objective-C category파일을 자동 생성합니다 ( OriginalClass+CategoryName.h/m).

오, 내가 얼마나 바보 야!


5

CoreData를 사용하고 XCode를 사용하여 엔티티에 대한 NSManagedObject 서브 클래스를 생성하는 경우 각 엔티티에 대해 하나만 생성해야합니다.

내 문제는 동일한 엔티티에 대해 여러 NSManagedObject 서브 클래스를 생성하고 다른 폴더에 넣는 것입니다.

방금 그것들을 모두 삭제하고 NSManagedObject 서브 클래스를 재생성했습니다.


5

이 문제를 해결 한 이상한 것들의 목록에 추가하려면 ...

글로벌 헤더 파일에 const CGFloat 변수가 있습니다.

const NSInteger  globalInteger1 = 2;
const NSInteger  globalInteger2 = 3;

내가 이것을 제거하는 순간, 모든 것이 좋았습니다 :)


1
WEIRD 문제는 .pch 또는 constants.h 파일에있었습니다. NSString으로 상수를 선언했습니다. * const kInitiaNotification = @ "kInitialNotification"; 처음에는 "정적"을 언급하지 않고
Mazen Kasser

나는 변경 직후 문제를 가지고 NSString static *key = @"someKey"const NSString *key = @"someKey"
TonyTony

5

다른 클래스에 두 개의 동일한 상수가 있기 때문에 정확히 같은 문제가있었습니다. .h 파일이 아닌 .m 파일을 가져 오는 경우에도이 문제가 발생할 수 있습니다


당신은 내 하루를 저장!
teck wei

@ teckwei 당신은 upVote 화살표를 누를 수 있습니다 : D
Adela Toderici


4

나는 같은 문제가 있었고 그것을 해결했다. 필자의 경우 "아키텍처"설정으로 인해 문제가 발생했습니다. 내 프로젝트 파일의 빌드 설정 탭에서 아키텍처가 armv6으로 설정되었습니다. 나는 그것을 표준 (armv7)으로 변경하고 청소하고 짓습니다. 그런 다음 작동했습니다!


4

필자의 경우 문제는 다른 대상에서 다른 아키텍처를 지정했습니다. 표준 (amrv7)을 사용하여 armv6, armv7 및 cocos2d로 응용 프로그램 대상을 작성했습니다. 빌드 설정으로 이동하여 아키텍처가 모든 대상에 동의하는지 확인하십시오.


4

나는이 문제를 너무 이상하게 해결했다!

대상 > 빌드 단계 > 바이너리를 라이브러리와 연결로 이동 하십시오. .

모든 프레임 워크를 제거하고 다시 추가하십시오!

그것이 당신을 위해 작동하기를 바랍니다!


꽤 끔찍한 솔루션
SleepsOnNewspapers

그것은 대답이 될 수 없습니다 ...별로 논리적이 아닙니다
LKM

오류 메시지를 확인한 후 해당 프레임 워크 중 하나 인 것을 발견했습니다. 따라서 모든 프레임 워크가 아니라 해당 프레임 워크 만 해당 프레임 워크를 제거하고 다시 추가했습니다.
Oluwatobi Omotayo

4

스위프트 언어의 경우 ...

"ld : file too small (length = 0) ...."이 오류가 발생합니다.

내 경우에는 프로젝트를 정리 한 다음 다시 빌드합니다.

단계 :-

1) 프로젝트로 이동-> 청소

2) goto Project-> Build

도움이 되었기를 바랍니다..


나를 위해 일했다. iPhone 6에서 iPhone 4S로 기기를 전환하면 발생했습니다.
racl101

나도 일했다. 고마워
Lee

4

이것은 나를 위해 속임수를 썼다 :

이동

1) 제품> 청소

2) 윈도우> 프로젝트

3) 프로젝트를 선택하고 " 삭제 " 파생 데이터를 클릭하십시오

4) 제품> 빌드


3

한 가지 가능성 : Xcode 4 빌드 설정에서 "Dead code stripping"을 켜십시오.

다른 가능성 : 이전에 GCC를 사용했던 일부 프레임 워크에 LLVM을 사용하도록 전환했을 수 있습니다. GCC (또는 LLVM GCC)로 다시 이동하면 이러한 경고가 사라질 수 있습니다.


3

다른 파일의 기존 상수와 동일한 이름으로 새 상수를 실수로 정의했으며 xCode 4.3.1을 사용 하여이 오류가 발생했습니다. xCode는 불평하지 않았지만 컴파일러는 그것을 좋아하지 않습니다.


3

"라이브러리 검색 경로"를 편집하여이 오류를 해결할 수있었습니다.

폴더를 몇 개 움직 였기 때문에 처음에 자랐고 라이브러리 / 프레임 워크를 연결할 때 빌드 설정에 자동으로 추가되기 때문에 빌드 설정에 두 가지 다른 검색 경로가 생겼습니다. 항상 제거되었습니다.

따라서 링크 된 라이브러리 / 프레임 워크를 다른 디렉토리로 이동하고 다시 링크하면 검색 경로를 수동으로 편집해야합니다.

라이브러리 / 프레임 워크를 제거하기 전에 제거하여 이것을 피할 수는 있지만 테스트하지는 않았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.