source

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

ittop 2023. 4. 27. 22:46
반응형

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

코코아 포드에서 파일을 가져올 때마다 Apple Mach-O 링커 오류가 발생합니다.

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

저는 제가 사용하는 다양한 포드를 위해 이것들 중 12개 정도를 얻습니다.

저는 XCode 5를 사용하여 아이폰 5S용으로 제작하려고 합니다.

SO에 대한 다양한 솔루션을 시도해 보았지만 아직 작동하지 않았습니다.

이 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

아키텍처 유효한 아키텍처가 정상인 경우 추가했는지 여부를 확인할 수 있습니다.$(inherited)포드에서 생성된 링커 플래그를 아래와 같은 기타 링커 플래그에 추가합니다.여기에 이미지 설명 입력

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

그러나 이는 64비트 프로세서의 전체 성능을 얻을 수 없다는 것을 의미합니다.당신이 5s를 위해 건축한다고 했으니, 당신이 이것이 필요한 이유가 있을 것입니다.어떤 이유에서인지 그 힘이 절대적으로 필요한 경우(아마 게임을 빌드하는 중일 것입니다), 그리고 그 파일들이 절실히 필요하다면, 풀 요청을 제출한 다음 오픈 소스 프로젝트에서 가져온 파일에서 동일한 필드를 arm64로 설정하여 프로젝트를 arm64로 다시 컴파일할 수 있습니다.하지만 64비트 호환을 위해 이 파일들이 정말 필요하지 않다면, 현재로서는 좀 지나친 것 같습니다.

편집: 일부 사람들은 또한 이 문제를 해결하기 위해 활성 아키텍처에 대한 빌드를 YES로 설정해야 한다고 보고했습니다.

2014-04-28 기준 설정은 다음과 같습니다.

여기에 이미지 설명 입력

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

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64

구현 중인 동일/유사한 문제에 부딪혔습니다.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 프레임워크/다른 프레임워크를 추가합니다.

이것이 제가 겪었던 것과 비슷한 문제에 부딪히는 다른 누군가에게 도움이 되기를 바랍니다.

나도 같은 문제에 직면했는데, 위의 방법들은 작동하지 않을 것입니다. 나는 실수로 그것의 아래 디렉터리에 있는 파일들을 삭제했습니다.

폴더 배치:

~/도서관/개발자/Xcode/파생데이터/

여기에 이미지 설명 입력

Pod의 모든 대상을 포함하여 프로젝트의 모든 대상에 대해 Armv7 armv7s, Build Active Architecture Only to NO로 아키텍처 설정

우측 타겟 멤버십에서 선택한 구현 파일을 확인하여 내 것을 수정하였습니다.이 기능은 확장 기능(예: 사용자 지정 키보드)을 다룰 때 특히 유용합니다.

대상 구성원 자격

여기 몇 가지 이유가 있습니다.build_active_architecture는 NO로 설정됩니다. Xcode는 이제 연결된 장치를 감지하고 그에 따라 활성 아키텍처를 설정합니다.따라서 2세대 iPod Touch를 컴퓨터에 연결하면 Xcode는 활성 아키텍처를 armv6로 설정해야 합니다.위의 디버그 구성으로 대상을 구축하면 이제 시간을 절약하기 위해 암v6 바이너리만 구축됩니다(대규모 프로젝트가 없는 경우에는 차이를 알아차리지 못할 수 있지만 시간이 지남에 따라 몇 초가 추가되는 것 같습니다).

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

이는 다음과 관련이 있을 수 있습니다.libz.dylib또는libz.tbd링크 바이너리의 대상에 추가하고 다시 컴파일을 시도하면 됩니다.

Valid Architecture에서 arm64를 제거하고 Active Architecture Only로 설정하면 됩니다. 이제 Clean, Build, Run만 하면 됩니다.이 오류는 다시 표시되지 않습니다.

:) KP

Derived Data 내용 삭제 후 해결 -->Build-->Products-->Debug-iphoneos

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

다음은 저에게 도움이 되었습니다.

  1. 포드를 합니다.cd ios && pod deintegrate
  2. 에 대해 이줄주 달석기에로 설명합니다.ios/Podfile->use_flipper!()
  3. 포드를 설치합니다.arch -x86_64 pod install
  4. 당신의 앱을 실행하세요 :)npm run ios

환경:
버전: 버전: 14.17.1
RN 버전: 6.0.0
: macOS BigSurm1

아이폰 5s가 주어지고 아직 64비트 버전의 타사 라이브러리를 받지 못했기 때문에, 저는 최신 X 코드(5.1 이전에는 불만이 없었습니다)를 사용하여 32비트 모드로 돌아가야 했습니다.

Valid Architectures 목록에서 arm64를 삭제한 다음 Build Active Architecture Only를 NO로 설정하여 이 문제를 해결했습니다.위에 표시된 것과 같이 반대의 경우보다 이것이 더 타당한 것 같습니다.다른 사람들이 위의 해결책을 찾지 못했을 경우를 대비하여 글을 올립니다.

Xcode 5.1로 업그레이드한 후 동일한 문제가 발생하여 Architectures를 armv7 armv7s로 설정하여 수정하였습니다.

하루 종일 이 문제에 매달렸습니다.

나는 여러 개의 스킴이 있었고, 데모, 내부, 릴리스에 대해 잘 컴파일되고 있었지만 디버그 스킴은 컴파일되지 않았고 libPods.a 누락에 대해 불평하고 있었습니다.

해결책은 프로젝트 -> 대상 -> 빌드 설정으로 이동하여 "활성 아키텍처만 빌드"를 "예"로 변경하는 것이었습니다.깨끗하고 튼튼합니다!마침내 몇 시간 동안의 머리 가려움이 해결되었습니다!

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

이것은 저에게 효과가 있었습니다.

ios sdk 9.3

app.xcodeproj 유효한 아키텍처의 빌드 설정으로: armv7 armv7s 액티브 아키텍처 구축: 아니요

깨끗하고 튼튼하고, 저를 위해 일했습니다.

릴리스 모드(또는 아카이브)에서 빌드하는 동안 Float 프로젝트에서 이 문제가 발생한 경우 다음 답변을 확인하십시오. https://stackoverflow.com/a/61446892/5502121 긴 이야기 요약:

  • 파일 > 프로젝트 설정에서 빌드 시스템을 새 빌드 시스템으로 설정합니다.
  • 거한제를 합니다.ios그리고.build_ios »
  • 려달을 flutter create . 로새를 ios 컨트롤 모듈
  • 려달을 pod install
  • 려달을 flutter pub get
  • Xcode 빌드 구성을 확인합니다(릴리스 모드 및 일반 iOS 장치여야 함).

그리고 당신은 가도 좋습니다.

다음은 64비트 성능 테스트를 위해 64비트 장치를 소유하려는 목적을 무시하는 유효 아키텍처 목록에서 암64를 제거할 필요 없이 Xcode 5.1에서 오류 없이 GPI 이미지를 컴파일할 수 있도록 도와줍니다.

GitHub 페이지에서 .zip 폴더를 다운로드합니다. https://github.com/BradLarson/GPUImage

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

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

프로젝트에 Source 폴더를 추가했으면 다음을 사용하여 GPUImage의 클래스/메소드를 사용하기 시작합니다.

#import "Source/GPUImage.h" 

몇 가지 짚고 넘어가야 할 사항:

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

위의 내용이 도움이 되길 바랍니다. 여러 번 질문을 받았음에도 불구하고 명확한 지침이 어디에도 없었던 것 같습니다. 하지만 걱정하지 마십시오. GPUImage는 arm64 아키텍처에서 확실히 작동합니다!

과 "Podfile"을 한 후 했습니다.pod install여러 가지 수정 사항을 시도한 후 마침내 필요한 파일을 프로젝트로 끌어와 수동으로 Pod를 가져오게 되었고 문제가 해결되었습니다.

morisunshine 답변이 올바른 방향을 가리켰기 때문에, 그의 답변에 약간의 수정이 iOS 8.2에 대한 저의 문제를 해결했습니다.그 덕분에.

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

ARCHS = armv7

VALID_ARCHS = armv6 armv7 armv7s arm64

BUILD ACTIVE ARCHITECTURE ONLY= NO
  1. 대상 빌드 설정으로 이동합니다.
  2. BUILD ACTIVE 아키텍처만 설정 = 디버그 및 릴리스 모두에 대해 NO
  3. 빌드 및 실행

저 같은 경우에는, 제가 찾아야만 했습니다.

C++ Standard Library그리고 반드시.libc++선택된 사람입니다.

저는 iOS용 xcode 7.2에서 opencv 2.4.9를 사용하고 있는데 위의 오류가 발생하여 오프라인 opencv 프레임워크가 아닌 pod install을 통해 opencv를 사용하여 오류를 해결합니다.

아래에 opencv pod 텍스트를 추가하고 사용한 적이 있다면 오프라인 opencv 프레임워크를 삭제하여 사용해 볼 수 있습니다.

포드 'OpenCV', '2.4.9'

내 경우(Xcode 9)에서 이 오류를 해결하는 솔루션은 없습니다.TesseractOCRiOS몇 시간의 시행착오 끝에, 저는 좋은 해결책을 생각해냈습니다.그냥 삭제합니다.'pod 'TesseractOCRiOS', '~> 4.0.0'에서Podfile,달려.pod install그런 다음, 추가pod 'TesseractOCRiOS', '~> 4.0.0'로 돌아가다.Podfile그리고 실행pod install다시.

빵! 효과가 있어요!

"OPN [Debug] 대상이 OTHER_LDFLAGS 빌드 설정을 재정의합니다."이것이 주요 쟁점이었습니다.다른 링커 플래그의 새 줄에 $( 상속됨)를 추가한 후 문제가 해결되었습니다.여기에 이미지 설명 입력

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

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

이 오류를 해결하려면:

1.in .m 파일, 각 인터페이스에 대한 구현을 제공합니다. 2.sys

저도 같은 문제에 직면했습니다.여기서 찾은 솔루션:링커 링크 정적 라이브러리에 오류가 있는 이유는 무엇입니까? iOS

라이브러리 검색 경로에 $(TOOLCHAIR_DIR)/usr/lib/swift/$(PLATFORM_NAME)를 추가하여 문제를 해결했습니다.

이 링커 오류 메시지는 이를 정의하는 원본 파일이 앱 대상의 일부로 표시되지 않았음을 나타냅니다.해당 소스 파일을 찾고 오른쪽에 있는 파일 속성 관리자를 사용하여 앱 대상의 대상 멤버 자격 항목을 확인합니다.

솔루션:파일 선택 -> openFileInspector -> Target Membership 참조 -> 실행 중인 대상 선택 취소 여부 확인

언급URL : https://stackoverflow.com/questions/19213782/undefined-symbols-for-architecture-arm64

반응형