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


Answers

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

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

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

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

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




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




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




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




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




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

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

pod 'OpenCV', '2.4.9'




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




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

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




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




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

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

ARCHS = armv7

VALID_ARCHS = armv6 armv7 armv7s arm64

BUILD ACTIVE ARCHITECTURE ONLY= NO



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




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



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




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




다음은 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 아키텍처에서 확실히 작동합니다.




Related