[ios] 파일이 링크되는 아키텍처가 아닌 아카이브 용으로 빌드되었습니다 (i386).

정적 라이브러리를 만들어야합니다. iPhone 및 iPad 앱에서 사용하고 싶습니다. 시뮬레이터를 실행하려고하면 오류가 연결됩니다. iOS 개발이 처음입니다. 친절하게 도와주세요.

ld : 경고 : /Users/valuelabs/Desktop/DruvaProject/libraries/libnetUtils.a 파일을 무시하고 파일이 연결되는 아키텍처가 아닌 아카이브 용으로 빌드되었습니다 (i386) 아키텍처 i386의 정의되지 않은 기호 :
“_OBJC_CLASS _ $ _ netUtils”, 참조 : ViewController.o ld의 objc-class-ref : 아키텍처 i386에 대한 기호를 찾을 수 없음 clang : 오류 : 링커 명령이 종료 코드 1로 실패했습니다 (호출을 보려면 -v 사용).

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



답변

이 같은 문제로 고생하고 빌드 설정 업데이트, 링커 검색 경로 지우기 등의 모든 수락 된 답변을 따른 후. 마침내 저에게 도움이되는 답변을 발견했습니다.

빌드하기 전에 iOS 장치 대신 올바른 유형 (iPhone Simulator)을 선택했는지 확인하십시오. 그런 다음 재건하십시오. 그렇지 않으면 Mac (i386)의 시뮬레이터에서 iOS 장치 (arm 프로세서) 용으로 빌드 된 라이브러리를 사용하려고합니다. 분명 했어야했지만 그렇지 않았습니다.

전에:

iOS 기기 설정

후:

iPhone 5.1 시뮬레이터 설정

이제 Navigator의 Products 그룹에서 정적 라이브러리 (.a 파일)를 마우스 오른쪽 버튼으로 클릭> Finder에 표시를 클릭하면 Debug-iphoneos 대신 Debug-iphonesimulator 폴더에 있음을 알 수 있습니다. 원래 폴더 이름에 신경 쓰지 않았거나 더 일찍 생각했을 수도 있습니다.

도움이 되었기를 바랍니다.


답변

때때로 이러한 유형의 오류는 당신을 짜증나게합니다!

파생 데이터 제거는 저에게 효과적입니다.

해결 단계

1) XCODE에서> Windows> 프로젝트> 프로젝트 선택> 파생 데이터 삭제> XCODE를 종료하고 다시 엽니 다> MAC-O- 링커 빌드 실패 오류가 발생하는 경우> 링크 참조> 정리 및 빌드 다시.


답변

귀하 libnetUtils.a는 귀하의 대상과 다른 아키텍처를 위해 구축되고 있습니다.

libnetUtils 빌드 설정을 확인하십시오. 구축되는 아키텍처와 지원되는 아키텍처 목록은 대상 아키텍처의 (약한) 상위 집합이어야합니다. 여기서 복잡성은 결과 아키텍처가 “아키텍처”, “활성 아키텍처 만 구축”및 “유효한 아키텍처”와 같은 다양한 설정에 분산되어 있다는 것입니다.

“활성 아키텍처 만 빌드”설정은이 작업을 특히 혼란스럽게 만듭니다. 예를 들어 시뮬레이터 용으로 빌드한다고 가정합니다. Debug에 대한 “Build active architecture only”설정이 NO로 설정된 경우 “Architectures”및 “Valid architectures”(아마도 armv7 등)에 나열된 모든 아키텍처를 빌드합니다. 그러나 libnetUtils에서 해당 설정을 Yes (디버그 : Yes)로 설정하면 i386 용으로 만 빌드됩니다. 따라서 링커가 armv7을 i386과 연결하려고하면 실패합니다.


답변

무시 파일 경고가 표시되면 무시 된 파일에서 실행 lipo -info하여 아래와 같은 아키텍처를 찾습니다.

lipo -info libnetUtils.a

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

  • i386 = iOS 시뮬레이터 또는 Mac OS X에서 32 비트 빌드
  • armv6 armv7 arm7s = iOS 기기
  • x86_64 = Mac OS x에서 64 비트 빌드

불일치에 따라 대상 플랫폼에 맞게 라이브러리를 다시 빌드하거나 대상 플랫폼을 변경해야합니다.

참고 : 팻 바이너리 lipo -info의 경우 위의 아키텍처 조합을 인쇄합니다.


답변

내 조언이 정확한지 실제로는 모르지만 다음을 확인하십시오.

  • 프로젝트 선택
  • “Build Settings”를 선택합니다.
  • 아키텍처 확인 :
    • 유효한 아키텍처는 “armv6 armv7″이어야합니다.
    • 지원되는 플랫폼은 “iphonesimulator iphoneos”여야합니다 (아마도 iPad 일 수도 있지만 모르겠습니다).
    • Base SDK – iOS SDK (iOS 5.0이 있습니다).

내가 명백한 선장이라면 나를 판단하지 마십시오 🙂


답변

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


답변

같은 문제가 있었고 페이지에서 다양한 솔루션을 시도했습니다. 여전히 내 라이브러리가 arm64 용이 아니라는 메시지가 표시되었습니다.

마지막으로 해결 방법 :

  • 텍스트 편집기에서 라이브러리의 project.pbxproj를 열었습니다.
  • VALID_ARCHS 검색
  • 4 개의 발생이 있었는데 그 중 2 개는 arm64를 포함하지 않았습니다.
  • 수동으로 체인에 arm64를 추가했습니다 (VALID_ARCHS = “arm64 i386 armv7 armv7s”).
  • lib를 다시 빌드하면 괜찮 았습니다.

때때로 XCode에 의해 표시되는 빌드 설정이 불완전하고 프로젝트 파일과 정확하게 일치하지 않는 것 같습니다.