programing

연결되는 아키텍처가 아닌 아카이브를 위해 파일이 만들어졌습니다(i386).

megabox 2023. 10. 11. 20:36
반응형

연결되는 아키텍처가 아닌 아카이브를 위해 파일이 만들어졌습니다(i386).

정적인 도서관을 지어야 합니다.저는 아이폰과 아이패드 앱에서 사용하고 싶습니다.시뮬레이터를 실행하려고 하면 연결 오류가 발생합니다.iOS 개발은 처음입니다. 도와주세요;

ld의 되지 않은 : : /Users/valueabs/DrubaProject/libraries/libnetUtils.a 를합니다. 연결되는 아키텍처가 아닌 아카이브를 위해 파일이 만들어졌습니다(i386) 아키텍처 i386에 대한 정의되지 않은 기호:
": 를 찾을 수 없음:: 코드 _OBJC_CLASS_$_netUtils", 참조: ViewController.old의 objc-class-ref: 아키텍처 i386 clang에 대한 기호를 찾을 수 없음: 오류: linker 명령이 종료 코드 1에서 실패했습니다( 호출을 보려면 -v 사용).

아키텍처에 i386을 추가해 보았습니다.운이 없소

이와 같은 문제로 어려움을 겪고 빌드 설정 업데이트, 링커 검색 경로 삭제 등의 모든 허용된 답변을 따라간 후..저는 마침내 저에게 맞는 답을 발견했습니다.

빌드하기 전에 iOS Device 대신 올바른 타입(iPhone Simulator)을 선택해야 합니다.그럼 리빌드.그렇지 않으면 mac(i386)의 시뮬레이터에서 iOS 장치(암 프로세서)용으로 만들어진 라이브러리를 사용하려고 하는 것입니다.당연한 일이었지만, 그렇지 않았습니다.

이전:

iOS Device Settings

이후:

iPhone 5.1 Simulator Settings

이제 네비게이터 > 정적 라이브러리(.a 파일) > Finder에서 Show in Finder에서 Products 그룹을 확인하면 Debug-iphone이 아닌 Debug-iphone 시뮬레이터 폴더에 있는 것을 알 수 있습니다.원래 폴더 이름에 신경을 안 썼거나, 더 빨리 생각해냈을 수도 있습니다.

도움이 되길 바랍니다.

가끔 이런 종류의 실수가 여러분을 짜증나게 합니다!

파생 데이터 제거 작업은 다음과 같습니다.

수정하는 단계

1) XCODE > Windows > Project > Project 선택하기 > 파생 데이터 삭제 > XCODE 종료 후 다시 열기 > MAC-O-Linker 빌드 실패 오류가 발생하면 이 링크 참조 > Clean and Build하기

당신의.libnetUtils.a목표와 다른 아키텍처를 위해 구축되고 있습니다.

libnetUtils 빌드 설정을 확인합니다.구축 중인 아키텍처와 지원되는 아키텍처 목록은 대상 아키텍처의 (약한) 수퍼셋이어야 합니다.여기서 복잡성은 결과적인 아키텍처가 "아키텍처", "액티브 아키텍처 구축 전용" 및 "유효한 아키텍처"와 같은 다양한 설정에 걸쳐 확산된다는 점입니다.

"활성 아키텍처만 구축" 설정은 특히 이를 혼란스럽게 만듭니다.예를 들어, 시뮬레이터용으로 빌드하고 있다고 가정합니다.디버그에 대한 "활성 아키텍처 구축 전용" 설정을 "아니오"로 설정하면 "아키텍처" 및 "유효한 아키텍처"(아마도 armv7 등)에 나열된 모든 아키텍처를 구축하게 됩니다.그러나 libnetUtils가 해당 설정을 Yes(디버그: 예)로 설정한 경우 i386용으로만 빌드됩니다.따라서 링커가 armv7과 i386을 연결하려고 하면 실패합니다.

- file warning - 합니다를(를) 실행합니다.lipo -info다 와 같은 찾기 .

lipo -info libnetUtils.a

그러면 i386, armv6, armv7, armv7, x86_64 등이 인쇄됩니다.일반적으로 이 아키텍처는 목표 빌드 플랫폼과 일치해야 합니다.예.

  • i386 = ios 시뮬레이터 또는 macos x에서 32비트 빌드
  • armv6 armv7 arm7s = ios 장치
  • x86_64 = macos x에서 64비트 빌드

불일치에 따라 대상 플랫폼에 대한 라이브러리를 재구성하거나 대상 플랫폼을 변경해야 합니다.

: fat 바이너리 의,lipo -info위 아키텍처의 조합을 인쇄합니다.

제 조언이 정확한지는 모르겠지만 이 내용을 확인해 보십시오.

  • 프로젝트를 선택합니다.
  • 빌드 설정을 선택합니다.
  • 아키텍처 확인:
    • 유효한 아키텍처는 "armv6 armv7"이어야 합니다.
    • 지원되는 플랫폼은 "iphone simulator iphoneos"여야 합니다(아마도 iPad, 잘 모르겠습니다).
    • 기본 SDK – iOS SDK(iOS 5.0이 있습니다).

내가 캡틴 티가 나면 나를 판단하지 마세요 :)

사용하려는 라이브러리가 iOS 시뮬레이터용으로 범용적으로 컴파일되지 않았음을 의미합니다(i386 기호는 Mac용).그러나 실제 장치에서 실행하는 것은 잘 작동할 것입니다.

또한 종속성과 종속성에 대해 빌드 설정 내 배포 대상이 동일한지 확인해야 합니다.iOS 10.0은 해당 라이브러리를 소비하는 프레임워크를 위해 정의된 반면 iOS 13은 정적 라이브러리 대상으로 설정되어 있음을 알게 되었습니다.둘 다 10.0으로 전환하면 문제가 해결되었습니다.

같은 문제를 가지고 있었고, 페이지부터 다양한 해결책을 시도했지만 소용이 없었습니다.나는 여전히 내 도서관이 arm64용으로 만들어지지 않았다는 메시지를 받았습니다.

마지막으로 해결 방법:

  • 텍스트 편집기에서 라이브러리에 대한 project.pbxproj를 열었습니다.
  • VALID_ARCHS를 검색했습니다.
  • 4건이 발생했는데, 그 중 2건은 arm64를 포함하지 않았습니다.
  • 수동으로 arm64를 체인에 추가했습니다(VALID_ARCHS = "arm64 i386 armv7s").
  • 리브를 다시 만들었을 때는 괜찮았습니다.

XCode에서 표시하는 빌드 설정이 불완전한 경우가 있으며 프로젝트 파일과 정확하게 일치하지 않는 경우가 있는 것 같습니다.

내게 그것은 고정된 설정이었습니다.Build Active Architecture Only로.Multiple values, 그러기 위해서는 확장해서 설정해야 합니다.Debug로.YES그리고.Release로.No. 이제 제 기기에 컴파일됩니다.

이 문제는 장치에서 응용 프로그램을 실행할 때 발생하지 않습니다.iOS 기기에서 코드를 실행하면 확인할 수 있습니다.

저는 armv7s의 아키텍처도 가지고 있었습니다.삭제하고 armv6와 armv7 두개만 기재했는지 확인했습니다.지금 됩니다.

언급URL : https://stackoverflow.com/questions/10803211/file-was-built-for-archive-which-is-not-the-architecture-being-linked-i386

반응형