아키텍처 i386에 대한 기호를 찾을 수 없습니다.


113

Xcode로 컴파일하려고 할 때 다음 오류가 발생합니다.

  **Ld /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher normal i386
    cd /Users/doronkatz/Sites/xCode/iKosher
    setenv MACOSX_DEPLOYMENT_TARGET 10.6
    setenv PATH "/Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Xcode4/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Xcode4/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk -L/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -L/Users/doronkatz/Sites/xCode/iKosher -F/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -filelist /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Intermediates/iKosher.build/Debug-iphonesimulator/iKosher.build/Objects-normal/i386/iKosher.LinkFileList -mmacosx-version-min=10.6 -all_load -ObjC -Xlinker -objc_abi_version -Xlinker 2 -lz -framework Security -framework CFNetwork -framework CoreData -framework Foundation -framework UIKit -framework CoreGraphics -framework QuartzCore -o /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher

Undefined symbols for architecture i386:
  "_UTTypeCreatePreferredIdentifierForTag", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_UTTypeCopyPreferredTagWithClass", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_kUTTagClassMIMEType", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_kUTTagClassFilenameExtension", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_SCNetworkReachabilitySetCallback", referenced from:
      -[Reachability startNotifier] in Reachability.o
  "_SCNetworkReachabilityScheduleWithRunLoop", referenced from:
      -[Reachability startNotifier] in Reachability.o
  "_SCNetworkReachabilityUnscheduleFromRunLoop", referenced from:
      -[Reachability stopNotifier] in Reachability.o
  "_SCNetworkReachabilityCreateWithName", referenced from:
      +[Reachability reachabilityWithHostName:] in Reachability.o
  "_SCNetworkReachabilityCreateWithAddress", referenced from:
      +[Reachability reachabilityWithAddress:] in Reachability.o
  "_SCNetworkReachabilityGetFlags", referenced from:
      -[Reachability currentReachabilityStatus] in Reachability.o
      -[Reachability isReachable] in Reachability.o
      -[Reachability isConnectionRequired] in Reachability.o
      -[Reachability isConnectionOnDemand] in Reachability.o
      -[Reachability isInterventionRequired] in Reachability.o
      -[Reachability isReachableViaWWAN] in Reachability.o
      -[Reachability isReachableViaWiFi] in Reachability.o
      ...
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status**

무슨 뜻인지 잘 모르겠습니다.

답변:



92

이런 종류의 것이 갑자기 나타나면 일반적으로 프로젝트에 필요한 프레임 워크가 누락되었음을 의미합니다. 라이브러리 및 종속 프로젝트에는 프레임 워크가 필요할 수 있으므로 최근에 프레임 워크를 추가 한 경우이 오류가 발생할 수 있습니다.

프레임 워크를 추가하려면 프로젝트보기에서 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고을 선택한 Add다음 Existing frameworks...목록에서 선택 합니다. 그런 다음 누락 된 기호가있는 프레임 워크를 찾으십시오.

필요한 프레임 워크를 찾는 방법에 관해서는 Xcode 도움말 검색도 사용할 수 있지만 Google을 사용하는 것이 가장 쉽습니다. 기호 중 하나를 검색하고 얽 히지 않은 이름 (예 :)을 찾기 위해 최선을 다한 SCNetworkReachabilityGetFlags다음 developer.apple.com에서 찾은 첫 번째 문서 링크가 적합한 경우가 많습니다. 일반적으로 멀리 사냥 할 필요는 없습니다. 이 경우 다음 페이지입니다.

https://developer.apple.com/documentation/systemconfiguration/scnetworkreachability-g7d

그런 다음 페이지 상단 SystemConfiguration에서이 경우 사용할 프레임 워크를 알려줍니다 . 그래서 그것을 프로젝트에 추가하고 다시 컴파일하십시오.

그런 다음 작동 할 때까지 계속하십시오 ...

편집 : 나는 시뮬레이터를 사용한 적이 없지만 이것은 장치에서하는 일입니다. 동일하다고 가정합니다 ...


64

때때로 타겟에서 누락 된 소스 파일이 있습니다.

  1. 누락 된 기호 조사
  2. 타겟-> 빌드 단계-> 컴파일 소스
  3. 목록에없는 경우 누락 된 소스 파일 추가
  4. 행복을 위해 command + b

"누락 된"것으로 보이는 파일을 선택하고 빌드중인 대상에 대한 확인란이 선택되어 있는지 오른쪽 유틸리티 표시 줄에서 확인할 수 있습니다.


1
두 프로젝트 파일을 부정확하게 병합하고 대상 멤버 자격을 잃은 경우 이러한 문제가 자주 발생할 수 있습니다.
Steven Hepting 2012-06-05

1
감사합니다. 어떻게 든 xcode가 빌드 단계 단계에 필요한 .m 파일을 추가하지 않았습니다!
dreampowder

1
덕분에 프로젝트에이 개 파일을 추가합니다 :) 만 그 단계를 수행 한 후 모든 확인했다
user1105951

32

다음 방법을 사용하여 해결했습니다 (XCode 4의 경우).

1) 프로젝트 탐색 창에서 프로젝트를 선택하면 오른쪽에 프로젝트 요약이 표시됩니다.

2) 4 번째 탭 빌드 단계 선택

3) 라이브러리 옵션과 바이너리 링크 선택

4) 받고있는 프레임 워크 추가

5) 프레임 워크를 기본 폴더에서 프레임 워크 폴더로 이동합니다.

6) 다시 빌드하면 오류가 사라집니다.


감사합니다. 나는 MFMailCompose의 검색이 대답을 발견하고 MessageUI.framework을 추가하여 해결
프랭크 음을

17

문제는 추가 된 파일에 대한 대상 멤버십이 앱 대상에 누락되어 있다는 것이므로 파일을 선택하고 대상 멤버십 상자에 체크 표시를 추가하십시오.

예를 들어 common.m의 메서드 정의에 오류가 표시되는 경우여기에 이미지 설명 입력


이 Symbol Not Found 오류가 발생했지만 상황은 훨씬 간단했습니다. 내 Schemes 중 하나에 필요한 새로운 기능이있는 새 모듈 (파일)을 추가했습니다. 몇 주 후에 다른 체계를 만들었을 때 그 함수에 대한 호출을 찾을 수 없었습니다. 타겟에 추가하기 만하면됩니다.

17

동일한 오류에 몇 시간을 보낸 후 이에 대한 솔루션을 추가하려고 생각했습니다.

위의 사람들은 가장 먼저 확인해야 할 프레임 워크 추가를 놓쳤는 지 여부입니다. 위의 Pruthvid에서 제공하는 단계를 참조하십시오.

내 문제는 내가 그것을 삭제 한 후 누락 된 컴파일 클래스였으며 나중에 다시 추가했습니다.

보고 된 오류 클래스에 대해 표시된대로 "컴파일 소스"를 확인하십시오. 작성한 누락 된 클래스를 추가하십시오.


2
고마워요 ... 이건 저에게 효과적입니다. 나는 커스텀 클래스를 도입하고 있었다. 두 사용자 정의 클래스를 모두 복사했습니다. h 및 .m을 프로젝트에 추가합니다. #import를 수행했지만 여전히 오류가 발생합니다. 사용자 정의 클래스의 .m을 "Compile Sources"섹션에 추가하면 문제가 해결되었습니다!
GeneCode

대박! Rocotilos와 동일한 문제가 있었고 사용자 지정 클래스를 가져오고 가져 왔지만 여전히 문제가있었습니다. 이것은 트릭을했다! 감사합니다!
Souleiman

8

누락 된 프레임 워크를 추가하는 것이 아니라면 실제로 "타겟 / 빌드 단계 / 바이너리와 라이브러리 연결"에 나열되어 있는지 확인 합니다. 앞에서 언급했듯이 일반적으로 프레임 워크가 누락되었음을 나타냅니다.

내 프로젝트에는 두 개의 동일한 프레임 워크가 나열되어 있는데, 그중 하나를 제거했을 때이 오류가 발생했습니다. "Link Binary With Libraries"목록에서도 제거 되었기 때문입니다. 다시 추가했고 문제가 사라졌습니다 (아직 두 개의 프레임 워크가 나열되어 있습니다).


6

모든 대상에 대한 빌드 설정> 아키텍처 를 변경하여 프로젝트에서 유사한 오류를 수정했습니다 .

문제 : Xcode 4.4에서 Xcode 4.5로 업그레이드했을 때 내 프로젝트는 시뮬레이터에서 여전히 잘 컴파일되었지만 장치에서는 컴파일되지 않았습니다. 장치 에서 "armv7s 아키텍처에 대한 기호를 찾을 수 없음" 오류 와 함께 잘못된 "Apple Mach-O 링커 오류"및 "clang : 오류 : 링커 명령이 종료 코드 1로 실패했습니다 (호출을 보려면 -v 사용). ). "

원인 (필자의 경우) : 내 프로젝트에 여러 대상이 있고 기본 대상 에 대한 빌드 설정> 아키텍처가 armv7s 아키텍처를 포함하도록 설정 되었음에도 불구하고 기본 대상은 다른 대상 (빌드 단계> 종속성 아래에 나열 됨)에 의존했습니다. 다른 대상에 대한 Build Settings> Architectures를 재설정 할 생각이 없었으며 armv7s를 포함하도록 변경해야했습니다. 시뮬레이터와 장치가 서로 다른 아키텍처에서 실행된다고 가정합니다. 그래서 시뮬레이터는 괜찮 았지만 장치는 괜찮 았습니다.


5

프로젝트가 다른 프로젝트에 의존하고 있으며 해당 프로젝트의 대상이 기본 대상의 직접적인 종속성으로 설정되어 있습니까? 이 경우 종속성이 설정되지 않은 경우 종속 대상이 모든 구성 (예 : 시뮬레이터)에 대해 빌드되지 않을 수 있습니다.

그냥 거친 추측입니다.


4

이 문제를 일으킬 수있는 또 다른 상황은 코드가 C ++를 호출하거나 C ++ 코드에 의해 호출되는 경우입니다. Obj-C에서 호출 할 때 "symbol not found"로 표시되는 내 자신의 .c 파일의 유틸리티 기능에 문제가있었습니다. 수정 사항은 파일 유형을 변경하는 것입니다. Xcode 4에서 확장 정보 창을 사용하여 파일 유형을 "Objective-C ++ Source"로 설정합니다. Xcode 3에서는 "Get Info"를 사용하여 파일 유형을 "source.cpp.objcpp"로 변경합니다.


4

제 경우에는 게시 된 솔루션 중 어느 것도 작동하지 않았습니다. 프로젝트를 삭제하고 SVN 서버에서 새로 체크 아웃해야했습니다 . 운 좋게도 프로젝트가 버전 관리 시스템에서 호스팅되었습니다. 그렇지 않으면 내가 무엇을할지 모르겠다.


2

정의 된 템플릿 클래스를 사용하는 C ++ 프로젝트 에서 동일한 오류가 발생하는 동안 프로젝트 네비게이터에서 정의 된 템플릿 클래스가있는 .cpp 파일을 선택한 다음 삭제> 참조 제거를 선택했습니다. 또한 연관된 ​​.h 파일은 여전히 ​​프로젝트에서 참조되지만 다음과 같이 .cpp에 대한 #include 문이 있어야합니다.

#ifndef __CircularBuffer__CircularBufferT__
#define __CircularBuffer__CircularBufferT__

... snip ...

#include "CircularBufferT.cpp"
#endif /* defined(__CircularBuffer__CircularBufferT__) */

보고 싶다면 간단한 프로젝트 예제가 github에 있습니다 .

이것은 약간의 간접적 인 속임수이며이 해결 방법의 원래 소스를 기억하지 못합니다.


2

이 오류가 갑자기 나타나면 프로젝트에 일부 프레임 워크가 누락 된 것입니다. 라이브러리 및 종속 프로젝트에는 프레임 워크가 필요할 수 있으므로 최근에 프레임 워크를 추가 한 경우이 오류가 발생할 수 있습니다.

프레임 워크를 추가하려면 프로젝트보기에서 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 추가를 선택한 다음 목록에서 기존 프레임 워크를 선택합니다. 그런 다음 누락 된 기호가있는 프레임 워크를 찾으십시오.

다른 것은 컴파일 된 리소스에 클래스를 추가하고 해당 클래스를 프로젝트에서 제거한 경우 오류가 나타납니다. 가장 좋은 방법은 프로젝트에서 제거 된 컴파일 리소스 (빌드 설정-> 컴파일 소스)에서 클래스를 제거하는 것입니다.

제 경우에는 프로젝트에 admob 클래스를 추가하고 프로젝트를 컴파일했습니다. 나중에 내 프로젝트에 admob를 포함하고 싶지 않아 프로젝트에서 admob 클래스의 참조를 삭제했습니다. 이 오류가 발생했을 때 컴파일 리소스에서 admob의 .m 클래스를 삭제하여이 문제를 해결했습니다.


2

PSPDFKIT 데모 라이브러리를 내 프로젝트 에 복사하려고 할 때 이런 일이 발생했습니다 . 나는 사이트의 모든 지침 +이 페이지의 모든 제안을 따랐습니다 .. 어떤 이유로 위의 오류를 계속 제공했지만 문제는 오류 메서드에서 메시지를 grepped하면 바이너리에만 나타납니다. 분명히 나는 ​​소스 코드에 대한 액세스 권한이 없습니다 b / c 비용을 지불해야합니다).

그래도 지침 페이지에서 이것을 발견했습니다.

여기에 이미지 설명 입력

그래서 나는 그 구성 파일의 내장으로 가서 이것을 발견했습니다.

OTHER_LDFLAGS=$(inherited) -ObjC -fobjc-arc -lz -framework CoreText -framework CoreMedia -framework MediaPlayer -framework AVFoundation -framework ImageIO -framework MediaPlayer -framework MessageUI -framework CoreGraphics -framework Foundation -framework QuartzCore -framework AVFoundation -framework CFNetwork -framework MobileCoreServices -framework SystemConfiguration -weak_framework UIKit

그런 다음 해당 라이브러리의 작성자가 제공 한 샘플 프로젝트로 이동하여 빌드 설정의 다른 링커 플래그에 그대로 복사 된 이전 플래그를 확인했습니다. 그러나 내 프로젝트에서는 그렇지 않습니다! .. 그래서 나는 단순히 복사하여 다른 링커 플래그와 모든 것이 작동하는 내 프로젝트의 빌드 설정에 붙여 넣었습니다!

요점 : 설정에서 일부 .xcconfig 파일에 의존하는 경우 샘플 코드 소스 등으로 다시 확인하고 실제로 적용되었는지 확인합니다. 제 경우에는 제대로 적용되지 않았습니다.


0

이 문제가 발생할 수있는 또 다른 이유는 SDK를 업그레이드 할 때입니다.

그룹을 삭제 한 다음 새 폴더를 프로젝트로 끌어다 놓으면 "라이브러리 검색 경로"에 두 SDK가 모두 포함됩니다. 해결하려면 이전 SDK 경로를 삭제하면됩니다.


0

Core.Location 프레임 워크를 추가하지 않고 CLGeocoder를 사용했습니다. 기본적으로이 오류는 여러 가지를 의미 할 수 있습니다. 다른 사람에게 도움이되기를 바랍니다.


0

나는 데이터 전용 @interface를 추가하고 빈 @implementation 블록을 추가하는 것을 잊었다는 사실을 깨닫기 위해 이전에 이것에 놀랐습니다.


0

Xcode 11에서이 문제를 발견했습니다. 수정 사항은 최소 배포 대상을 10.0에서 11.0으로 변경했습니다. 이것이 도움이되기를 바랍니다. :)

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