[Ios] 아키텍처 arm64에 대해 정의되지 않은 기호


Answers

만약 아키텍쳐유효한 구조 가 괜찮다면, 다음과 같이 포드에서 생성 된 링커 플래그를 추가하는 $(inherited)다른 링커 플래그에 추가했는지 확인할 수 있습니다 :

Question

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

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 링커 오류를 어떻게 수정합니까?

흥미로운 또 다른 경고를 발견했습니다. 해결책을 찾았 으면합니다.

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




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

나는 여러 개의 Schemes을 가지고 있었지만, Demo, Internal, Release에서 잘 컴파일되어 있었지만 - Debug Scheme은 컴파일되지 않고 libPods.a가 누락되었다고 불평했다.

해결책은 Project -> Target -> Build Settings로 이동하여 "Active Architecture 만 빌드"를 YES로 변경하는 것이 었습니다. 깨끗하고 지어라! 마지막으로 머리 가려움의 시간이 해결되었습니다!




유효한 아치를 armv7 armv7s에 설정하고 릴리스에서 활성 아키텍처를 빌드하고 명령 줄에서 새로운 "pod install"을 수행하도록 설정하여 해결했습니다.




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

폴더 위치 :

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




다음은 64 비트 시뮬레이터와 Retina iPad Mini 모두에 대해 Xcode 5.1에서 GPIXmage를 오류없이 컴파일하기 위해 유효한 아키텍처 목록에서 arm64을 제거 하지 않고도 64 비트 장치 소유의 목적을 테스트하지 않고도 컴파일 할 수 있도록했습니다. 64 비트 성능).

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

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

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

소스 폴더를 프로젝트에 추가하면 다음을 사용하여 GPUImage의 클래스 / 메소드를 사용하기 만하면됩니다.

#import "Source/GPUImage.h" 

몇 가지 지적해야 할 점은 다음과 같습니다.

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

위의 도움이되기를 바랍니다. 여러 번 묻는 질문에도 불구하고 명확한 지침이없는 것 같지만 GPUImage는 arm64 아키텍처에서 확실히 작동합니다.




이것은 libz.dylib 또는 libz.tbd 와 관련 될 수 있습니다. 링크 바이너리의 대상에 추가하고 다시 컴파일하려고하면됩니다.




아이폰 5가 있고 아직 제 3 자 라이브러리의 64 비트 버전을받지 못했다면 최신 Xcode (이전에 5.1에서는 불평하지 않았 음)로 32 비트 모드로 돌아 가야했습니다.

나는 이것을 Valid Architectures리스트에서 arm64를 지우고 Build Active Architecture Only를 NO로 설정하여 이것을 수정했다. 위에서 보았 듯이 이것은 다른 방법보다 의미가 있습니다. 다른 사람들이 위의 해결책을 얻을 수 없을 경우에 대비해 게시하고 있습니다.




나는 이것이 오래되었던 가지라는 것을 알고있다. 그러나 최신 CocoaPods 버전 (1.0.0)으로 마이그레이션하고 모든 포드를 다시 설치 한 후에도 동일한 문제가 발생했습니다. "armv64에 대한 누락 된 심볼"링커 오류가 발생했습니다. 이상하게도 다음 단계를 수행하여 해결했습니다.

  1. 모든 포드 제거 (포드 초기화, 포드 설치)

  2. pod 파일을 역순으로 다시 작성하십시오 (예 : "Mixpanel", "Intercom"포드, "Intercom"포드, "Mixpanel"포드 사용).

  3. 포드 설치

podfile의 종속성 순서를 바꾸고 포드를 재구성하면 문제가 해결됩니다.




이 솔루션이 저에게 도움이되는 유일한 해결책입니다 : CordovaLib 설정으로 가서 유효한 아키텍처에 arm64를 추가하십시오.




Valid Architecture 에서 arm64 만 제거하고 NOActive Architecture Only로 설정해야 합니다 . 이제는 깨끗하고, 구축하고, 실행하십시오. 이 오류는 다시 표시되지 않습니다.

:) KP




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

C++ Standard Library 를 선택하고 libc++ 가 선택되었는지 확인하십시오.




나는 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 프레임 워크 / 다른 프레임 워크를 추가하십시오.

다행히도 다른 사람이 비슷한 문제를 겪고있는 데 도움이되기를 바랍니다.




필자는 iOS 용 xcode 7.2에서 opencv 2.4.9를 사용하고 위의 오류가 발생했으며 오프라인 opencv 프레임 워크 대신 pod를 통해 opencv를 사용하여 오류를 해결했습니다.

아래 opencv pod 텍스트를 추가하고 오프라인 opencv 프레임 워크를 삭제 한 후 사용해보십시오.

pod 'OpenCV', '2.4.9'




아키텍처와 링커 설정이 좋으면 h 파일을 확인하십시오. 내 문제는 동일한 오류가 있었지만 h 파일을 재구성하고 extern 문을 제거했습니다. 다른 m 파일이 해당 변수를 사용하여 링커 오류가 발생했습니다.




"Security.framework"를 추가하면 나에게 트릭이 생겼다.




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




이 문제는 Podfile 및 pod install 를 통해 Pod를 설치 한 후에 발생합니다. 여러 가지 수정을 시도한 후에 마침내 수동으로 (프로젝트에 필요한 파일을 드래그하여) Pod를 가져 왔고 문제가 해결되었습니다.




  1. 타겟 빌드 설정으로 이동하십시오.
  2. 디버그 및 릴리스 모두에 대해 BUILD ACTIVE ARCHITECTURE ONLY = NO를 설정하십시오.
  3. 빌드 및 실행



빌드의 -ObjCOther Linker Flags 설정 타겟 설정에서 문제가 해결되었습니다.




이 문제를 극복하기 위해 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)   

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




이 문제를 다음과 같이 설정하여 해결했습니다.

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64




build_active_architecture가 NO로 설정된 이유에 대한 설명. 이제 Xcode는 연결된 장치를 감지하고 이에 따라 활성 아키텍처를 설정합니다. 따라서 2 세대 iPod Touch를 컴퓨터에 연결하면 Xcode에서 활성 아키텍처를 armv6으로 설정해야합니다. 위의 디버그 구성으로 타겟을 빌드하면 armv6 바이너리 만 빌드되어 시간을 절약 할 수 있습니다 (거대한 프로젝트가 없다면 차이점을 알지 못할 수도 있지만 시간이 지남에 따라 초가 합산됩니다).

App Store에 배포하기위한 배포 구성을 만들 때이 옵션이 설정되어 있지 않은지 확인하여 뚱뚱한 유니버설 바이너리를 빌드하십시오. http://useyourloaf.com/blog/2010/04/21/xcode-build-active-architecture-only.html




morisunshine 대답이 올바른 방향으로 지적되면서, 그의 대답에 약간의 비틀기는 iOS8.2에 대한 나의 문제를 해결했습니다. 그에게 감사드립니다.

이 문제를 다음과 같이 설정하여 해결했습니다.

ARCHS = armv7

VALID_ARCHS = armv6 armv7 armv7s arm64

BUILD ACTIVE ARCHITECTURE ONLY= NO



오른쪽의 대상 멤버십에서 선택한 구현 파일을 확인하여 광산을 수정했습니다. 특히 사용자 정의 키보드와 같은 확장 기능을 처리 할 때 특히 유용합니다.




이것은 나를 위해 일했다 :

이즈 SDK 9.3

유효한 아키텍처 : armv7 armv7s 빌드 활성 아키텍처 : 아니요

깨끗하고 지어서 나를 위해 일했습니다.




프로젝트에있는 모든 대상 ( 포드의 모든 대상 포함)에 대해 아키텍처armv7 armv7s로 설정하고 활성 아키텍처 만 NO로 빌드




어떤 경우에도 TesseractOCRiOS 사용하여이 오류를 해결할 수 없습니다 (Xcode 9). 몇 시간의 시행 착오 끝에 좋은 해결책을 찾았습니다. 나는 'pod 'TesseractOCRiOS', '~> 4.0.0'Podfile 에서 삭제하고 pod install 실행합니다. 그런 다음 pod 'TesseractOCRiOS', '~> 4.0.0'Podfile 다시 Podfile 하고 pod install 다시 실행하십시오.

쾅! 그것은 작동합니다!




DerivedData -> 빌드 -> 제품 -> 디버그 - iphoneos의 내용 삭제 후 해결




"OPN [Debug] 대상이 OTHER_LDFLAGS 빌드 설정을 무시합니다." 이것이 주요한 문제였습니다. $ (상속 된)을 다른 링커 플래그의 새 행에 추가 한 후 내 문제가 해결되었습니다.




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

그러나 이것은 64 비트 프로세서의 모든 기능을 사용할 수 없다는 것을 의미합니다. 5 대를 위해 건물을 짓고 있다고 했잖아. 그래서 너에게 필요한 이유가 있을지도 몰라. 어떤 이유로 (아마도 당신이 게임을 만들 때) 그 힘을 절대적으로 필요로하고 필사적으로 그 파일이 필요하다면 당겨서 파일을 arm64로 설정하여 pull 요청을 제출 한 다음 프로젝트를 arm64로 다시 컴파일 할 수 있습니다 오픈 소스 프로젝트. 하지만,이 파일들이 64 비트 호환이 필요하지 않다면, 지금은 조금 지나치게 과장된 것처럼 보입니다.

편집 : 어떤 사람들은 또한이 문제를 해결하기 위해 활성 아키텍처 용으로 빌드를 예로 설정해야한다고보고했습니다.

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