아키텍처 arm64에 대한 정의되지 않은 기호


200

CocoaPods에서 파일을 가져올 때마다 Apple Mach-O Linker 오류가 발생합니다.

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_FBSession", referenced from: someFile
ld: symbol(s) not found for architecture arm64

내가 사용하는 다양한 포드에 대해이 중 약 12 ​​개를 얻습니다.

XCode 5를 사용하여 iPhone 5S를 빌드하려고합니다.

나는 여기에서 다양한 솔루션을 시도했지만 아직 작동 할 솔루션이 없습니다.

이 Apple Mach-O Linker 오류를 어떻게 해결합니까?


흥미로운 또 다른 경고를 찾았습니다.

Ignoring file ~/Library/Developer/Xcode/DerivedData/SomeApp/Build/Products/Debug-iphoneos/libPods.a, 

file was built for archive which is not the architecture being linked (arm64):~/Library/Developer/Xcode/DerivedData/someApp/Build/Products/Debug-iphoneos/libPods.a


간단한 솔루션 대상-> 링크-> 다른 링커 플래그로 이동하여 디버그 및 릴리스의 다른 링커 플래그에 $ (상 속됨)을 추가하십시오.
Mihir Oza

답변:


248

아키텍처유효한 아키텍처 가 모두 올바른 경우 다음 과 같이 $(inherited)포드에서 생성 된 링커 플래그를 기타 링커 플래그 에 추가하는 추가 여부를 확인할 수 있습니다. 여기에 이미지 설명을 입력하십시오


7
@chancyWu 설명해 주시겠습니까?
Paul Brewczynski

5
그래도 작동하지 않으면 라이브러리 검색 경로에도 @ (상 속됨)을 추가하십시오.
Enrico Susatyo 2016 년

1
Lol, Use the $(inherited) flag터미널 경고를 무시했습니다 . 그리고 오류가 나를 여기로 데려 왔습니다. 내 하루를 구했다.
Sushil Sharma

2
Xcode 7.2 및 기타 링커 플래그-> 디버그에서 작업 중입니다. -weak_framework CoreFoundation -weak_framework UIKit -weak_framework AVFoundation -weak_framework CoreMedia -weak-lSystem -ObjC ... 여기에 $ (상 속됨)를 추가했지만 그렇지 않습니다 ' t work
Alessandra

당신은 내 많은 시간을 절약했습니다. 감사.
Nirmalsinh

123

문제는 cocoapod가 arm64 아키텍처 용으로 빌드되지 않았으므로 빌드 할 때 연결할 수 없다는 것입니다. 패키지가 업데이트되고 해당 아키텍처를 사용할 때까지 해당 패키지를 사용할 수 없습니다. 프로젝트-> 대상 (프로젝트 이름)-> 빌드 설정으로 이동하여 아키텍처를 표준 아키텍처 (armv7, armv7s)로 변경하고 유효한 아키텍처를 armv7, armv7s로 변경하여 링커 오류를 해결할 수 있습니다.

그러나 이는 64 비트 프로세서의 성능을 최대한 활용할 수 없다는 것을 의미합니다. 당신은 당신이 5 대를 위해 건설하고 있다고 말했기 때문에 이것이 필요한 이유가있을 수 있습니다. 어떤 이유로 든 그 힘이 절대적으로 필요하고 (아마 게임을 만들고있을 때) 필사적으로 해당 파일이 필요한 경우 풀 요청을 제출 한 다음 풀 필드에서 동일한 필드를 arm64로 설정하여 arm64로 프로젝트를 다시 컴파일 할 수 있습니다 오픈 소스 프로젝트. 그러나 이러한 파일이 64 비트 호환 가능해야하지 않으면 현재로서는 약간의 잔인한 것처럼 보입니다.

편집 : 일부 사람들은 또한이 문제를 해결하기 위해 Build For Active Architectures를 YES로 설정해야한다고보고했습니다.

2014-04-28 현재 설정은 다음과 같습니다.

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


4
이렇게하면 시뮬레이터에서 실행되는 오류가 해결되었지만 장치에서 실행되는 오류는 해결되지 않았습니다. 포드는 libPods.a에 대해 거부되었습니다. 아키텍처는 ''(어떤 이유로 든 Xcode에서 볼 수는 있지만 감지하지 못함) 모든 필수 아키텍처 'armv7 armv7s'를 포함하지 않았기 때문에
GangstaGraham

7
좋아, Build For Active Architectures를 Yes로 설정하여 이것을 얻었습니다. 정말 고맙습니다!
GangstaGraham

2
따로 : file터미널 에서 명령을 사용하여 정적 라이브러리가 지원하는 아키텍처를 알 수 있습니다 .
funroll

8
코러스에 추가하기 위해 여기에 들어 왔습니다. 활성 아키텍처 빌드에 대해 예를 선택하는 것이 가장 좋습니다.
Wells

56
이것은 더 이상 해결책이 아닙니다. Apple은 이제 모든 배포에 64 비트 지원을 요구합니다.

52

나는 다음을 설정 하여이 문제를 해결했다.

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64


1
XCode 5.1을 처음 사용할 때 비슷한 문제가 발생하여 문제가 해결되었습니다. 감사!
GangstaGraham

@morisunshine 확실합니까, 빌드 후 바이너리 아키텍처를 확인하셨습니까?
onmyway133

@ onmyway133 확인했지만 새 XCode 에서이 문제를 충족시키지 못했습니다.
morisunshine

@morisunshine 그래, 내 팔을 잃어버린거야 64
onmyway133

더 이상 빌드 오류가 없습니다. 지금까지는 괜찮습니다. 그러나 보관 된 빌드를 업로드하는 동안, 나는 arm64 비트 지원과 같은 오류 누락 arm64 비트를 받고 있어요 2월 1일, 2015 년에서 강제입니다
zeeawan

45

구현 AVPictureInPictureController과 동일 / 유사한 문제 가 발생하여 프로젝트에서 AVKit 프레임 워크를 연결하지 않았다는 것이 문제였습니다 .

오류 메시지는 다음과 같습니다.

Undefined symbols for architecture armv7:
   "_OBJC_CLASS_$_AVPictureInPictureController", referenced from:
       objc-class-ref in yourTarget.a(yourObject.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

해결책:

  1. 프로젝트로 이동
  2. 대상을 선택하십시오
  3. 그런 다음 빌드 단계 로 이동 하십시오.
  4. 라이브러리가있는 오픈 링크 바이너리
  5. 마지막으로, 단지 추가 + AVKit의 프레임 워크 / 다른 프레임 워크를 .

바라건대 이것은 다른 사람이 비슷한 문제를 겪을 수 있기를 바랍니다.


6
예, 프레임 워크가 누락되면 발생하는 오류입니다. 하나의 단서는 아키텍처를 제거하려고 / 다음 나머지 하나는 ... 너무 실패
크리스틴 웨이트

1
잘 했어. `:에서 참조 된 "_OBJC_CLASS _ $ _ XXXXXClass", xxx 프레임 워크 추가.
iHTCboy

에 딱 맞다! 'xml'로 인쇄 된 것을 보는 사람은 이것을 확인하십시오. 제 경우에는 'libxml'프레임 워크가 연결되지 않았습니다.
Evusas

포드 소개를 수정 한 후이 오류가 발생했으며 모든 방법이 수정되지 않았습니다. 그러나 귀하의 방법으로 문제가 해결됩니다. 참고 : lib는 검색 할 수 없습니다.
stellar lee

33

나는 또한 같은 문제가 발생, 위의 방법은 작동하지 않습니다. 실수로 다음 디렉토리의 파일을 삭제했습니다.

폴더 배치 :

~ / 라이브러리 / 개발자 / Xcode / DerivedData /

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


3
이상하게도 이것이 실제로 작동하는 것처럼 보일 수 있습니다. 고마워 친구
Felipe

2
파생 데이터를 수동으로 삭제하면 나에게도 속임수가되었습니다. 건배!
L_Sonic

7
감사합니다! 힌트를 추가하고 싶습니다. 폴더는 / User / yourname / Library / Developer / XCode / DerivedData
Stefano Buora

다음 터미널을 사용하여 파생 데이터를 삭제할 수도 있습니다 : rm -rf ~ / Library / Developer / Xcode / DerivedData
simon_smiley

내 시간을 절약 ... XDDD
Hsiao-Ting

25

설정 아키텍처하는 ARMv7 armv7s , 활성 아키텍처 구축NO를 포함하여 프로젝트의 모든 대상에 대해, 모든 일 에서 포드


일종의 작업 ... 이제 "잘못된 비트 코드 서명"오류가 발생합니다.
JeremyF

18

오른쪽의 대상 멤버 자격에서 선택한 구현 파일을 확인하여 수정했습니다. 이것은 확장 기능, 즉 사용자 정의 키보드를 다룰 때 특히 유용합니다.

대상 회원


Xcode 9는 확인란을 선택하더라도 자동으로 적용되지 않습니다. 감사합니다.
Amro Shafie

그게 문제였습니다. 감사합니다
Ignacio Hernández

11

다음은 왜 build_active_architectureNO로 설정 되었는지 에 대한 설명 입니다. Xcode는 이제 어떤 장치를 연결했는지 감지하고 이에 따라 활성 아키텍처를 설정합니다. 따라서 2 세대 iPod Touch를 컴퓨터에 연결하면 Xcode는 활성 아키텍처를 armv6으로 설정해야합니다. 위의 디버그 구성으로 대상을 빌드하면 armv6 바이너리 만 빌드하여 시간을 절약 할 수 있습니다 (큰 프로젝트가 아닌 한 차이를 느끼지 않지만 시간이 지남에 따라 초가 추가되는 것 같습니다).

App Store에 게시하기 위해 배포 구성을 생성 할 때 Xcode가 대신 범용 범용 바이너리 http://useyourloaf.com/blog/2010/04/21/xcode 를 빌드하도록이 옵션이 설정되어 있지 않은지 확인해야합니다. -build-active-architecture-only.html


정말 믿을 수 없을 정도입니다! XCode의 출력은 빌드 머신에 연결된 장치에 따라 다릅니다!
Matt

6

유효한 아키텍처 에서 arm64 를 제거 하고 NO활성 아키텍처로만 설정 하면됩니다. 됩니다. 이제 청소하고 빌드하고 실행하십시오. 이 오류는 다시 표시되지 않습니다.

:) KP



4

이 관련이있을 수도 libz.dylib또는 libz.tbd바로 연결 바이너리에 대한 귀하의 목표에 추가하고 다시 컴파일 할 필요가.


Tesseract 프레임 워크를 추가하려고 시도했지만 이것만으로도 도움이되었습니다. !
HelloimDarius

3

릴리스에서 유효한 아치를 armv7 armv7s로 설정하고 빌드 활성 아키텍처 만 YES로 설정 한 다음 명령 줄에서 새로운 "포드 설치"를 수행하여 문제를 해결했습니다.


3

iPhone 5s가 아직 64 비트 버전의 타사 라이브러리를받지 못했기 때문에 최신 Xcode를 사용하여 32 비트 모드로 돌아 가야했습니다 (5.1 이전에는 불평하지 않았습니다).

유효한 아키텍처 목록에서 arm64를 삭제 한 다음 활성 아키텍처 만 빌드를 NO로 설정하여이 문제를 해결했습니다. 위와 같이 다른 방법보다 더 의미가있는 것 같습니다. 다른 사람들이 위의 솔루션 중 어느 것도 효과가없는 경우에 게시하고 있습니다.


3

Xcode 5.1로 업그레이드 한 후 동일한 문제가 발생했으며 아키텍처armv7 armv7s 로 설정하여 수정했습니다.


3

하루 종일이 문제에 갇혀있었습니다.

여러 구성표가 있었고 데모, 내부, 릴리스에 적합하게 컴파일되고 있었지만 디버그 구성표는 컴파일되지 않고 libPods.a에 대해 불평했습니다.

해결책은 프로젝트-> 대상-> 빌드 설정으로 이동하여 "Build Active Architecture Only"를 YES로 변경하는 것입니다. 깨끗하고 빌드! 마침내 머리 가려움증이 해결되었습니다!


당신과 정확히 같은 문제는 아니지만 비슷합니다. 제공 한 것과 동일한 방법으로 해결했습니다.
Helzgate

2

설정 -ObjCOther Linker Flags대상의 빌드 설정에 문제를 해결했다.


2

이것은 나를 위해 일했다 :

ios SDK 9.3

app.xcodeproj 유효한 아키텍처 의 빌드 설정으로 : armv7 armv7s 활성 아키텍처 빌드 : 아니오

깨끗하고 빌드하고 나를 위해 일했습니다.


1

다음 은 유효한 아키텍처 목록에서 arm64를 제거 할 필요 없이 64 비트 시뮬레이터와 레티 나 iPad 미니 모두 Xcode 5.1에서 오류없이 GPUImage를 컴파일 하는 데 도움이되었습니다 (테스트를 위해 64 비트 장치를 소유하는 목적을 상실 함) 64 비트 성능).

GitHub 페이지에서 .zip 폴더를 다운로드하십시오. https://github.com/BradLarson/GPUImage

압축을 풀고 'framework'폴더로 이동하십시오. 여기에서 'Source'폴더를 Xcode 프로젝트에 추가하고 복사하십시오. '대상 그룹의 폴더에 항목 복사'가 선택되어 있고 '추가 된 폴더에 대한 그룹 작성'도 선택되어 있는지 확인하십시오. 일반, iOS 및 Mac 헤더 / 구현 파일이 프로젝트에 복사됩니다.

iOS 용으로 컴파일하기 때문에 Mac 파일이 필요하지 않은 경우 파일을 프로젝트로 복사하기 전에 또는 Xcode 내에서 그룹을 간단히 삭제하기 전에 Mac 폴더를 삭제할 수 있습니다.

소스 폴더를 프로젝트에 추가 한 후에는 다음을 사용하여 GPUImage의 클래스 / 메서드 사용을 시작하십시오.

#import "Source/GPUImage.h" 

몇 가지 지적 할 사항 :

  • 'Cocoa'를 찾을 수 없다는 오류가 발생하면 Mac 폴더 / 헤더를 iOS 프로젝트에 추가 한 것입니다. 프로젝트에서 Mac 그룹 / 파일을 삭제하면 경고가 사라집니다.
  • Xcode의 그룹이 아닌 소스 폴더의 이름을 바꾸려면 #import 명령어에서 "Source / GPUImage.h"대신 해당 이름을 사용하십시오. 따라서 프로젝트에 추가하기 전에 폴더 이름을 GPUImageFiles로 바꾸면 다음을 사용하십시오. #import "GPUImageFiles / GPUImage.h
  • A7 64 비트 프로세서를 이용하려면 Valid Architectures 목록에서 arm64가 선택되어 있어야합니다!
  • 이것은 GPUImage.framework 번들이 아니므로 (예 : http://www.raywenderlich.com/60968/ios-7-blur-effects-gpuimage 에서 프레임 워크를 다운로드 한 경우 ) GPUImage를 사용하는 올바른 방법이 아닐 수 있습니다 Brad Larson이 의도했지만 현재 SpriteKit 프로젝트에서 작동합니다.
  • 프레임 워크 / 라이브러리 등에 링크 할 필요가 없습니다-위에서 설명한대로 헤더와 구현 소스 폴더를 가져 오십시오.

위의 도움이되기를 바랍니다-여러 번 질문을 받았음에도 불구하고 명확한 지침이 없었지만 GPUImage는 arm64 아키텍처에서 작동합니다.


1

Podfile 및을 통해 포드를 설치 한 후이 문제가 발생했습니다 pod install. 여러 가지 수정을 시도한 후 마침내 포드를 수동으로 가져 와서 (필요한 파일을 내 프로젝트로 끌어 옮김) 문제를 해결했습니다.


그것은 나에게도 효과가 있었지만 하나의 파일로 하나의 쉬운 포드였습니다.
iluvatar_GR

1

morisunshine 답변이 올바른 방향으로 지적함에 따라 , 그의 답변에 약간의 조정이 iOS8.2에 대한 내 문제를 해결했습니다.

나는 다음을 설정 하여이 문제를 해결했다.

ARCHS = armv7

VALID_ARCHS = armv6 armv7 armv7s arm64

BUILD ACTIVE ARCHITECTURE ONLY= NO

1
  1. 대상 빌드 설정으로 이동하십시오.
  2. 디버그 및 릴리스 모두에 대해 빌드 활성 아키텍처 만 = 아니오로 설정
  3. 빌드하고 실행

3
PODS 프로젝트
Elad

1

제 경우에는 찾아야했습니다

C++ Standard Librarylibc++선택한 것이 맞는지 확인하십시오 .


1

나를 위해 iOS 용 xcode 7.2에서 opencv 2.4.9를 사용하고 위의 오류가 발생했으며 오프라인 opencv 프레임 워크 대신 포드 설치를 통해 opencv를 사용하여 오류를 해결합니다.

아래 opencv 포드 텍스트를 추가하여 사용해보고 오프라인 opencv 프레임 워크를 삭제 한 경우 사용할 수 있습니다.

포드 'OpenCV', '2.4.9'


1

내 솔루션 (Xcode 9)에서이 오류를 해결하는 솔루션은 없습니다 TesseractOCRiOS. 몇 시간의 시행 착오 끝에 좋은 해결책을 찾았습니다. 난 그냥 실행 'pod 'TesseractOCRiOS', '~> 4.0.0'에서 삭제 Podfile합니다 pod install. 그런 다음 pod 'TesseractOCRiOS', '~> 4.0.0'다시 추가하고 다시 Podfile실행 pod install하십시오.

쾅! 효과가있다!


1

"OPN [Debug] 대상은 OTHER_LDFLAGS 빌드 설정보다 우선합니다." 이것이 주요 문제였습니다. 다른 링커 플래그의 새 줄에 $ (상 속됨)을 추가하면 내 문제가 해결되었습니다. 여기에 이미지 설명을 입력하십시오


1

경우에 따라 .h 파일에 하나 이상의 인터페이스를 정의했지만 이러한 인터페이스를 모두 구현하지 않은 경우이 오류가 발생했습니다.

링커가 .m 파일에서 구현을 찾을 수 없으므로 모든 인터페이스에 대해 .m 파일에서 구현해야합니다.

이 오류를 해결하려면

1. .m 파일에서 각 인터페이스에 대한 구현을 제공하십시오. 2. 재 구축



0

이 문제를 극복하기 위해 AWS 프레임 워크를 설치 한 후 동일한 문제에 직면했습니다. AWS POD를 설치 한 후 생성 된 프로젝트에서 POD 구성 파일을 업데이트했습니다. 아래와 같이 설정 파일을 확인하십시오

OTHER_LDFLAGS = $(inherited) -ObjC -l"Pods-AWSAutoScaling" -l"
Pods-   AWSCloudWatch" -l"Pods-AWSCognito" -l"Pods-AWSCore" -l
"Pods-AWSDynamoDB" -l"Pods-AWSEC2" -l"Pods-AWSElasticLoadBalancing" 
-l"Pods-AWSKinesis" -l"Pods-AWSLambda" -l"Pods-AWSMachineLearning" 
-l"Pods-AWSS3" -l"Pods-AWSSES" -l"Pods-AWSSNS" -l"
Pods-AWSSQS"-l "Pods-AWSSimpleDB" -l"Pods-Bolts" -l"Pods-FMDB" 
-l"Pods-GZIP" -l"Pods-Mantle" -l"Pods-Reachability" -l"Pods-TMCache" 
-l"Pods-UICKeyChainStore" -l"Pods-XMLDictionary" -l"sqlite3" -l
"z"-framework "Accelerate" -framework "AssetsLibrary" 
-framework "CoreLocation" -framework "Foundation" -framework
"ImageIO" -framework "Security" -framework "SystemConfiguration"
-framework "UIKit" -weak_framework "UIKit"
 OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)   

구성 파일이 제대로 작동하지 않으면 Other Linker 플래그 를 $ (상 속됨)으로 설정하십시오.


0

아키텍처 및 링커 설정이 양호하면 h 파일을 확인하십시오. 내 문제는 같은 오류 였지만 h 파일을 재구성하고 extern 문을 제거했습니다. 다른 m 파일이 해당 변수를 사용하여 링커 오류가 발생했습니다.


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