programing

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

elecom 2023. 5. 3. 20:48
반응형

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

이 문제 때문에 미치겠어요 어떻게 해결해야 할지 모르겠어요

    Undefined symbols for architecture armv7:
  "_deflateEnd", referenced from:
      -[ASIDataCompressor closeStream] in ASIDataCompressor.o
  "_OBJC_CLASS_$_ASIDataDecompressor", referenced from:
      objc-class-ref in ASIHTTPRequest.o
  "_deflate", referenced from:
      -[ASIDataCompressor compressBytes:length:error:shouldFinish:] in ASIDataCompressor.o
  "_deflateInit2_", referenced from:
      -[ASIDataCompressor setupStream] in ASIDataCompressor.o
ld: symbol(s) not found for architecture armv7
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

제 생각에 그것은 다음과 관련이 있습니다.

ld: symbol(s) not found for architecture armv7

하지만 다음과 같이 추가했습니다.libz.1.2.3.dylib도움이 안 돼요, 아이디어 있는 사람?

일반적인 원인

"Architecture armv7에 대한 정의되지 않은 기호"의 일반적인 원인은 다음과 같습니다.

  1. 헤더를 가져오지만 올바른 라이브러리에 대해 링크하지 않습니다.기본적으로 프로젝트에 포함되지 않기 때문에 특히 QuartzCore와 같은 라이브러리의 헤더에 일반적입니다.해결 방법:

    • 의 섹션에서 올바른 라이브러리를 추가합니다.

    • 기본 검색 경로 외부에 라이브러리를 추가하려면 빌드 설정의 값에 경로를 포함하고 다음을 추가할 수 있습니다.
      -l{library_name_without_lib_and_suffix} libz(예: libz.ause)-lz)의 섹션으로 이동합니다.

  2. 프로젝트에 파일을 복사했지만 파일을 추가할 대상을 확인하지 않았습니다.해결 방법:

    • 올바른 대상에 대한 를 열고 누락된 항목을 확장한 다음 추가합니다..m파일. 만약 이것이 당신의 문제라면 아래 Cortex의 답변에도 투표해주시기 바랍니다.

  3. 여기에는 호스트 시스템의 시뮬레이터인 i386과 같은 다른 아키텍처를 위해 구축된 정적 라이브러리가 포함됩니다.해결 방법:

    • 프로젝트에 포함할 라이브러리 공급업체의 라이브러리 파일이 여러 개 있는 경우 시뮬레이터용 파일(i386)과 장치용 파일(예: armv7)을 포함해야 합니다.

    • 선택적으로 두 아키텍처를 모두 포함하는 팻 스태틱 라이브러리를 생성할 수 있습니다.



원본 답변:

올바른 libz 파일에 대해 연결하지 않았습니다.파일을 마우스 오른쪽 버튼으로 클릭하고 검색기에 표시하면 해당 경로는 iOS sdk 폴더 어딘가에 있어야 합니다.예를 들어 여기 제 것이 있습니다.

/개발자/플랫폼/아이폰OS.플랫폼/개발자/SDKs/아이폰OS4.3.sdk/usr/lib

참조를 제거한 다음 대상의 빌드 단계를 포함한 이진 연결 섹션에 다시 추가하는 것이 좋습니다.

어젯밤에도 비슷한 문제가 있었는데, 그 문제는 제가 Finder에서 Xcode에 있는 제 프로젝트로 수업을 끌고 갔다는 사실과 관련이 있었습니다.

솔루션은 빌드 단계 탭에서 컴파일 소스로 이동하여 클래스를 목록으로 끌어다 놓는 것이었습니다.

비슷한 문제가 있어서 각 프로젝트 구성(디버그, 릴리스 및 배포)과 대상의 빌드 설정에서 "활성 아키텍처 구축만"을 확인해야 했습니다.

"정의되지 않은 기호" 링커 오류의 또 다른 가능한 원인은 .mm 파일에서 C 함수를 호출하려고 시도하는 것입니다.이 경우 외부 "C" {...헤더 파일을 가져올 때 사용합니다.

Objective-C++에서 C-Function을 호출하는 링커 오류

저도 비슷한 문제가 있었습니다._OBJC_CLASS_$_ 뒤의 클래스 이름은 사실 제 클래스였습니다.소스 코드 파일을 탐색 목록으로 끌 때 "대상에 추가"를 선택하지 않았기 때문입니다.

해결책은 다음과 같습니다.

  1. 탐색 목록에서 클래스를 삭제하고 "참조만 제거"를 선택합니다.

  2. 소스 코드 파일을 다시 끌어 "대상에 추가" 확인란이 선택되었는지 확인합니다.확인란은 "필요한 경우 복사" 및 "그룹 만들기" 바로 아래에 있습니다.

일반적으로 현재 버전(이 경우 libz)에 연결된 버전 식별자가 없는 별칭이 있습니다.dylib는 libz.1.2.5.dylib에 연결되어 있습니다.버전이 지정된 별칭 대신 기본 별칭을 사용합니다.

라이브러리를 . "admob을 "Standard armv7했습니다. 빌드 설정

대상 -> 빌드 설정 -> Apple LLVM 컴파일러 언어: 'C++ 언어 방언' 및 'C++ 표준 라이브러리'를 컴파일러 기본값으로 설정하면 문제가 해결되었습니다.

저는 제 프로젝트에 libz.1.2.5.dylib만 추가했고 그것은 매력적으로 작동했습니다.

단계 -

  1. 빌드 단계로 이동합니다.
  2. 라이브러리와 이진 연결 - '+' 단추를 사용하여 추가할 프레임워크 및 라이브러리를 선택합니다.
  3. 목록에서 libz.1.2.5.dylib을 선택합니다.
  4. 빌드 및 실행.

비슷한 문제가 있었는데 "std:"와 관련된 오류를 보았습니다.:"

빌드 설정 변경 -> Apple LVM 5.0 - Language C++ -> C++ 표준 라이브러리

libc++(C++11 지원 LLVM C++ 표준 라이브러리)에서 libstdc++(GNU C++ 표준 라이브러리)로

만약 당신이 깃발을 가지고 있다면.-ObjC대상 > 빌드 설정 > 기타 링커 플래그에서 이 문제가 발생하면 제거하는 것을 고려하십시오.한 경우 .-force_load <path>-ObjC.

<path>Xcode 프로젝트 디렉토리에 상대적이어야 합니다.IE, 디렉토리 구조가 다음과 같은 경우:

iOSProject
  + iOSAPI.framework
      + iOSAPI
  + iOSAPI.xcodeproj

그럼 이 깃발은 다음과 같이 설정해야 합니다.Other Linker Flags:

-force_load iOSAPI.framework/iOSAPI

를 포함시키려면 .-force_load그들 각각의 줄.

-force_load iOSAPI.framework/iOSAPI
-force_load another.framework/another

대상에서 일부 클래스가 누락되었을 수 있습니다.이 문제는 일반적으로 프로젝트에 새 클래스 파일의 이름을 변경/제거/추가할 때 발생합니다.수정하려면 새로 추가된 클래스를 일부 대상에 추가합니다.

Project Navigator(오른쪽 사이드바)에서 클래스를 선택하고 Utilities 사이드바(오른쪽 사이드바)를 열고 Utilities에서 File Inspector(파일 유사 아이콘)를 선택한 다음 Target Membership(대상 구성원) 탭에서 대상을 선택합니다.이는 모두 "참조 제거"를 피하고 "대상에 추가" 트릭을 클릭하여 다시 추가하기 위한 것입니다.

So: Class -> Utilities (File Inspector) -> Target Membership -> 원하는 Target을 선택합니다.

.h 파일에 여러 개의 @인터페이스가 있으며 아직 해당 @ 구현 지시어를 모두 포함하지 않았습니다.모든 항목이 균형을 이루도록 합니다.

이 문제를 해결한 방법은 다음과 같습니다.

다른 프로젝트의 .h, .m 및 NIB를 프로젝트 탐색기로 끌어 추가했습니다.Xcode가 빌드 단계에 올바르게 추가하지 않았습니다.

몇 가지 단계를 수행하여 해결할 수 있었던 비슷한 문제가 있었기 때문에 제 답변을 확인하십시오.

만약 당신이 iOS5 업그레이드를 다루고 있다면, 저는 타겟 4.3에 작성된 프로젝트를 컴파일하기 위해 Project Navigator에서 libz.1.2.3.dynlib의 이름을 libz.1.2.5.dynlib로 변경하면 컴파일이 가능하다는 것을 알게 되었습니다.

iPhone OS50SDK/usr/lib 폴더에 libz.1.2.3.dynlib이 없습니다. 베타 버전인지 아니면 자연 업그레이드인지 알 수 없습니다.

프로젝트로 이동하여 빌드 단계, 소스 컴파일, 목록에 GameCenter Manager.m 추가를 클릭합니다.

이것이 제 문제를 해결했습니다.제가 사용하고 있는 종속성이 armv7을 지원하지 않습니다.그래서 저는 그것을 제거하는 것 외에 다른 방법이 없었습니다.암v7은 어쨌든 매우 오래된 아이폰에만 사용됩니다(아이폰 4처럼).

  • '빌드 설정 / 모두'로 이동
  • '유효한 아키텍처'를 'arm64 arm64e'로 설정합니다.

여기서 이 제안을 찾지 못했기 때문에 프로젝트에 두 개 이상의 대상(즉, OSX용과 iOS용)이 있는 경우 각 대상에 대한 관련 라이브러리를 연결해야 합니다.그래서 예를 들어 제 경우에는 Audio Toolbox가 필요했습니다.OSX용으로 한 번, iOS용으로 한 번 추가해야 했습니다(frameworks 폴더 아래에 각 대상에 대해 각 라이브러리의 복제본이 있어야 합니다.).만약 당신이 하나만 본다면..그렇다면 그건 빨간 깃발입니다)

저는 PJSIP 도서관과 관련된 문제에 직면해 있었습니다.

프로젝트의 다른 링커 플래그에서 다음을 시도하여 오류를 해결했습니다. -framework Foundation -framework UIKit

위의 링커 플래그는 Github 위의 Siphone Project에서 사용됩니다.이러한 설정은 C++ 라이브러리의 연결과 관련된 문제를 해결하는 데 도움이 됩니다.

마침내 이해했습니다. 대상에 부재한 프레임워크를 추가하여 이 문제를 해결했습니다. ->빌드 단계 ->바이너리를 라이브러리와 연결

저는 이런 문제가 있었던 적이 있습니다.나는 수업을 옮기면서, 내가 그것을 덮어썼다는 것을 깨달았습니다..mm로 철하다.h파일을 저장합니다.

해당 문제를 수정하여 오류를 해결했습니다.

C++ 표준 라이브러리'의 목표 빌드 설정이 'libc++'로 설정된 프로젝트를 컴파일하려고 할 때 'Architecture arm7:' 오류가 발생했습니다(프로젝트에서 C++ 11의 일부 기능을 사용했기 때문에 필요).그리고 이 프로젝트에는 'libstdc++'(또는 현재와 같은 컴파일러 기본값)로 설정된 동일한 설정을 가진 하위 프로젝트가 포함되어 있습니다.

하위 프로젝트의 'C++ 표준 라이브러리' 설정을 libc++로 변경하여 수정했지만, 하위 프로젝트의 배포 대상을 5.0 이상으로 설정한 후에만 수정되었습니다(libc++의 경우 5.0 필요).

다른 일반적인 제안이 도움이 되지 않을 때 확인할 수 있는 제안을 더 드립니다.

다른 프로젝트(libxxx.a)와 링크하면 nm와 같은 도구로 기호를 찾을 수 있지만 ld에서 기호를 찾을 수 없는 이상한 문제가 발생할 수 있습니다.그런 다음 두 프로젝트가 동일한 플래그로 빌드되었는지 확인해야 합니다. 일부 프로젝트는 이진 형식에 영향을 줄 수 있습니다.

  1. c++ 컴파일러를 확인합니다.
  2. c++ 방언 설정을 확인합니다.
  3. c++ 런타임 유형 지원 확인. (-frti/-forti)
  4. 같은 이름의 .a가 다른 곳에 나타나는지 확인합니다. 링크 경로 목록에서 원하는 파일을 초과할 수 있습니다.그들을 제거합니다.

iphone5s에서 앱을 실행할 때 이 문제가 발생했는데 Architecturesarm64를 추가하여 해결되었습니다.

저도 같은 문제가 있었습니다.저는 방대한 답변 목록에서 모든 것을 시도했지만 결국 제 문제는 다음과 같습니다.저는 openCV로 작업하고 있어서 C++ 코드를 코드에 결합해야 합니다.이렇게 하려면 objective-c와 C++를 사용하는 파일을 .mm로 변경해야 합니다. 저는 한 파일을 변경하지 않았고 이 파일은 C++ 코드와 연결되지 않았지만 변경해야 했습니다.

shareKit을 설치할 때 이 문제가 발생했습니다.그것은 시뮬레이터에서는 작동했지만, 장치에서는 작동하지 않았습니다.나는 기타 링커 플래그에서 -all_load를 제거했고 시뮬레이터와 아이폰 장치 모두에서 잘 작동합니다.

저의 경우, 저는 목표 C++을 사용해야 하는 프레임워크를 추가했습니다.이 게시물을 찾았습니다.

XCode .m 대 .mm

이것은 목표-C++ 클래스도 컴파일할 수 있도록 main.m의 이름을 main.mm 로 변경하는 방법을 설명했습니다.

그것이 저를 위해 고쳐주었습니다.

저는 모듈(파일.m)이 제가 작업하는 대상에 없을 때 그 문제에 직면하곤 합니다.

저에게 문제는 .m(구현)에서 상수 값을 설정하는 것을 잊었다는 것입니다.

file const kFooKey = @"Foo";

드래그 앤 드롭을 통해 파일도 추가했습니다.제가 한 일은, 모든 파일의 참조를 제거했습니다(제외).frameworks그런 다음 Add Files To Project 옵션을 통해 문제를 다시 올바르게 추가했습니다.

언급URL : https://stackoverflow.com/questions/6429494/undefined-symbols-for-architecture-armv7

반응형