IT story

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

hot-time 2020. 4. 11. 10:15
반응형

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


방금 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

일반적으로 프로젝트를 덮어 쓰면이 문제가 발생할 수 있으므로이 방법을 사용해보십시오.

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

어떤 경우에는 오류 로그 창에 .xctest 오류가 표시되어 문제를 해결합니다.

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

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

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

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

끝난!

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

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


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


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

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

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


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


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

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

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


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

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


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


수정 : 빌드 설정> 비트 코드 활성화> 아니요 여기에 이미지 설명을 입력하십시오


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

pod deintegrate

pod install

문제 해결됨!


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


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

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


I struggled with this for a little while, and in my case it ended up being the Build Setting under Search Paths called FRAMEWORK_SEARCH_PATHS. It helped that I selected the "Levels" button, which seemed to compare my project, target and "Resolved" settings. I saw that my target setting somehow overrode the default of "$(inherited)", and the overridden value was what XCode "resolved" the setting to be. When I removed the override, which in this case specified the 3.2 sdk, the linker errors went away -- as did some recently appeared warnings about any classes where I called post-4.0 methods.

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


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


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


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

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

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


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


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


난 그냥 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).

오, 내가 얼마나 바보 야!


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

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

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


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

전역 헤더 파일에 const CGFloat 변수가 있습니다.

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

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


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


관련이 있는지 확실하지 않지만 일부 three20 라이브러리를 실행하고 있음을 확인하면 웹 사이트에서이 게시물을 확인하십시오. http://three20.info/article/2011-03-10-Xcode4-Support


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


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


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

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

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

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


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

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

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

단계 :-

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

2) goto Project-> Build

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


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

이동

1) 제품> 청소

2) 윈도우> 프로젝트

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

4) 제품> 빌드


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

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


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


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

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

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

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

참고 URL : https://stackoverflow.com/questions/5329001/apple-mach-o-linker-error-when-compiling-for-device

반응형