빌드 오류-파일에 필요한 아키텍처 i386 누락


105

iPhone 애플리케이션을 빌드 할 때이 오류가 발생합니다.

ld : 경고 : /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit, 파일에 필수 아키텍처 i386 누락

내 앱의 모든 프레임 워크에 대해 동일합니다. 이것은 더 일찍 일어나지 않았기 때문에 매우 이상합니다.


Snow Leopard와 새로운 iPhone SDK (Xcode 3.2)를 설치 한 후에 이런 일이 발생 했습니까?
avocade

8
내 대답은 문제를 해결합니다. 확인해주십시오.
Jordan

9
답변에서 논의되지 않은 또 다른 가능성은 비 범용 프레임 워크에 대한 참조를 추가 한 경우 (즉, armv6 / armv7 프레임 워크를 추가 한 다음 시뮬레이터 빌드를 시도한 경우)이 오류가 발생한다는 것입니다. 사용자 정의 프레임 워크를 구축 한 경우 주로 우려되는 사항입니다.
aroth

@aroth도 정확합니다.이 질문을
ArkReversed

답변:


131

이는 프로젝트에 프레임 워크를 추가하고 의도하지 않게 프레임 워크를 프로젝트 디렉토리에 복사 할 때 발생합니다.

수정은 모든 iphone SDK * .Framework 파일에 대한 프로젝트 디렉터리 (디스크에 프로젝트를 저장하는 위치)를 확인하고 삭제하는 것입니다.

프로젝트는 나중에 잘 구축됩니다.


4
또한 Simulator 대신 iOS 장치에서 테스트하십시오.
Raptor

다른 프레임 워크가있는 경우 프로젝트 파일을 수정하면 그에 대한 참조도 삭제되는 것 같습니다.이 작업이 더 쉬웠습니다. Jordan
texian 2013

나를 위해 작동하지 않습니다. 내 프로젝트 디렉토리에 .framework 파일이 없습니다. Fwiw, 나는 청소를 한 다음 빌드 하고이 문제가 시작되었습니다. 깨끗한 사람은 어떻게 든 깨졌을 것입니다.
Alyoshak

85

나는 똑같은 문제가 있었고 해결책은 쉬운 해결책으로 판명되었습니다. 백업 한 다음 TextMate 또는 TextEdit에서 project.pbxproj (프로젝트 파일 번들 내에 있음)를 열고 "/ * Begin XCBuildConfiguration section * /"섹션을 검색합니다. FRAMEWORK_SEARCH_PATHS라는 키를 찾아서 삭제하고 내용을 삭제합니다 (빌드 구성 당 한 번, 그래서 두 곳에서 제거했습니다). 다음은 내가 삭제 한 항목의 예입니다.

FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks\"",);

내 프로젝트는 이제 iPhone 장치와 iPhoneSimulator 모두에 대해 빌드됩니다.


2
설명대로 작동하는지 확인할 수 있습니다. Xcode는 서로 다른 컴퓨터간에 Xcode projs를 이동할 때 메타 데이터와 쉽게 접촉하지 않을 수 있습니다. 이 경우 하나는 3.0과 Leopard가 있고 다른 하나는 3.1과 Snow Leopard가 설치되어 있습니다. FRAMEWORK_SEARCH_PATHS 메타 데이터는 빌드 설정에서 공백으로 표시되지만 실제 project.pbxproj에는 내용이 있습니다.
avocade

1
동의 한 FRAMEWORK_SEARCH_PATHS도 빌드 설정에서 공백으로 표시되었습니다. 그러나 설명한대로 project.pbxproj 파일을 직접 편집하면 문제가 해결되었습니다.
Alasdair Allan

11
이것은 나를 위해 작동하지 않았습니다. 그러나 당신은 나를보기에 적합한 곳으로 인도합니다. 내 .pbxproj에는 FRAMEWORK_SEARCH_PATHS 키가 없지만 LIBRARY_SEARCH_PATHS라는 키가 있습니다.
반란

나는 두 번째 @rebellion. 최신 XCode 버전이 키 이름을 변경했을 수 있습니다.
Moshe

감사합니다. pbxproj 파일에 잘못된 LIBRARY_SEARCH_PATHS 키도 있습니다. 키는 Xcode 3의 프로젝트 설정에서 굵게 표시되었지만 값은 없습니다. 이로 인해 뭔가 잘못된 것이 있다고 믿게되었습니다. Xcode 4 Preview 5에서 프로젝트를 한 번 열었고 그 후에 이런 일이 발생했습니다.
mvexel 2011 년

43

여기서 일어난 일은 Xcode가 특정 iPhone 장치 SDK를 가리키는 "Framework Search Paths"항목을 신비스럽게 추가했다는 것입니다. 예를 들어, 광산은 최근 다음과 같이 설정되었습니다.

$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks

이로 인해 컴파일러는 잘못된 아키텍처의 프레임 워크를 찾습니다. 대상 빌드 설정에서 "Framework Search Paths"키 아래의 값을 제거하면 문제가 해결됩니다.


제 경우에는 이것이 문제였습니다. 새 라이브러리를 추가 할 때마다 많은 검색 디렉토리를 추가했습니다. 참조를 제거하더라도 문제를 일으킨 검색 디렉토리 항목이 있습니다.
darshansonde

제 경우에는 "프레임 워크 검색 경로"가 이미 비어 있습니다. 내가 얻는 정확한 오류는 ld : building for iOS Simulator이지만 아키텍처 i386 용 MacOSX 파일 '/usr/lib/libSystem.B.dylib'용으로 빌드 된 dylib에 대한 링크 clang : error : linker command failed with exit code 1 ( 호출을 보려면 -v 사용) Mavericks에서 SDK 7.0을 사용하고 있습니다.
Ans

동일한 오류가 발생하여 빌드 설정 아래의 프레임 워크 검색 경로에서 값을 제거했으며 이제 성공적으로 컴파일됩니다.
니 라브

10

XCode에서 "Edit Project Settings"로 이동하여 "Search Paths"를 찾으면 "Framework Search Paths"필드가 있습니다. 이것을 업데이트하면 프로젝트 파일을 해킹하지 않고도 문제가 해결됩니다!

건배!

제시


나는 나를 절대적으로 미치게 만드는 동일한 문제가 있습니다. 여러분이 해결책을 알고있는 것 같지만 "project.pbxproj"파일을 찾을 수없고 "Edit Project Settings"가있는 위치를 찾을 수 없습니다.
saman01 2011 년

2
XCode 4.2.1에서 다음과 같이 발견했습니다. 프로젝트 네비게이터에서 프로젝트 이름을 클릭합니다. 나타나는 속성 화면에서 '빌드 설정'탭을 선택합니다. 검색 경로는이 화면에 있습니다. 그들을 삭제하는 것이 저에게 효과적이었습니다.
dsteele

8

프레임 워크를 추가 할 때 프로젝트에 복사하지 않았는지 확인하십시오. 복사하면 원래 경로를 찾을 수 없습니다. 이 문제를 해결하려면. 프로젝트의 프레임 워크 폴더에서 AVFoundation 프레임 워크를 삭제 한 다음 다시 추가하되 이번에는 복사 확인 표시가 없는지 확인합니다.

이것은 나를 위해 그것을 고쳤습니다!


8

이 오류가 발생한 이유는 내 프로젝트에 security.framework를 두 번 추가했기 때문입니다. xcode에서 보안 프레임 워크를 볼 수 없었고, 파인더에서 프로젝트를 열고이 프레임 워크를 찾았습니다. 내가 삭제하고 문제가 해결되었습니다.


7

앱이 기기에서 실행되도록 의도 된 경우 시뮬레이터에서 실행하려고하지 않는지 확인하십시오. 당연하게 들릴 수 있지만 어쨌든 확인하십시오.


5

무언가가 삭제되었을 가능성이 있지만 프로젝트 파일에서 무언가가 망가진 것은 내 경험이었습니다. 나는 그 "무언가"가 무엇인지 아직 파악하지 못했다. SDK 설치가 정상일 때 비슷한 문제가 발생했습니다. 몇 가지 옵션이 있습니다.

먼저 모든 파일을 새 프로젝트에 추가하십시오. 이것은 일반적으로 작동하는 것 같습니다. 그래도 약간의 고통.

둘째, XCode / Get Info / Build / Library Search Paths에서 프로젝트를 마우스 오른쪽 버튼으로 클릭 할 수 있습니다. /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/lib와 유사한 새 경로를 추가합니다. 각 버전 (2.2.1 등) 및 플랫폼 (시뮬레이터 또는 iPhoneOS)에 대해 해당 문자열의 적절한 버전을 추가합니다. 프레임 워크가 문제인 경우 프레임 워크 검색 경로에 대해 유사한 작업을 수행합니다.

셋째, 작업이 더 많지만 더 신뢰할 수있는 것은 MyProject.xcodeproj 내에서 project.pbxproj를 여는 것입니다 (Textmate가 적합합니다). "/ * Begin XCBuildConfiguration 섹션 * /"을 찾은 다음 "LIBRARY_SEARCH_PATHS"및 "FRAMEWORK_SEARCH_PATHS"를 찾습니다. 경로를 적절하게 추가하거나 수정하고 파일을 저장하십시오.

어쨌든, 엉덩이에 통증이 있고, 저는 이런 일이 몇 번 일어났기 때문에 원인을 정확히 찾아 내고 싶습니다. 프로젝트가 잘 구축 된 다음, 그저 이유가 거의없는 것처럼 보이는 작업을 거부합니다.


새로운 프로젝트를 시작하겠습니다. 오 우물.
Gabe Shahbazian

대상의 정보 패널에서 "Frameworks Search Paths"빌드 설정을 수정할 수 있습니다.
John Cromartie

오류가 발생했지만 위에서 설명한 프레임 워크 문제가 없습니다. 흥미롭게도 한 컴퓨터에서는 프로젝트가 SVN에서 체크 아웃되어 제대로 빌드 될 수있는 반면 다른 두 대에서는 모든 빌드에서 갑자기이 오류가 발생했습니다. 모든 종류의 다른 솔루션을 시도한 후 유일한 (그리고 다소 간단한) 수정은 새 빈 프로젝트를 만들고 모든 파일을 여기로 이동하는 것입니다.
mmattke 2011 년

이 방법은 저에게 효과적이었습니다. 하루에 정확히 하나의 구성에 대해 갑자기 구축을 중단 한 작업 프로젝트 세트가 있습니다. 이유없이. 위의 textmate 기술을 사용하고 "$ (SDKROOT) / Developer / Library / Frameworks"가 해당 구성에서 누락되었음을 발견했습니다. 이유를 모르고 Xcode를 사용하여 이것을 볼 수 없었습니다.
Rob

4

"프로젝트 설정 편집"및 "검색 경로"찾기 "프레임 워크 검색 경로"필드가 있습니다. 모두 삭제!!


4

나에게도 여기에서 일어난 일입니다. 훌륭한 파트너 덕분에 우리는 답을 찾았습니다. Xcode가 시뮬레이터를 가리키고있을 수 있습니다. 대신 IOS 장치로 변경하십시오.


1

터미널에서 프레임 워크에서 파일 명령을 실행합니다 .

file /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit

UIKit 바이너리가 호환되는 아키텍처를 알려주는 메시지를 받아야합니다. "i386"이 표시되지 않으면 어떻게 든 UIKit의 i386 버전을 제거한 것입니다. 이는 시뮬레이터 용으로 빌드 할 수 없음을 의미합니다.이 문제를 해결하려면 다시 설치해야합니다. SDK.

다른 오류가 발생하면 실제 문제가 무엇인지 파악하는 데 도움이되기를 바랍니다.


sdk를 다시 설치했는데 여전히 동일한 빌드 오류가 발생합니다.
Gabe Shahbazian

이 문제가 있습니다. 이미 프레임 워크와 라이브러리 경로를 확인했으며 깨끗합니다. /Developer/Platforms.../UIKit.framework/UIKit 명령 파일에는 "Mach-O 동적으로 연결된 공유 라이브러리 암"만 표시됩니다. 전체 SDK를 설치해야하나요? 아니면 전체 버전의 프레임 워크를 복사 할 수 있나요?
Alexander Fradiani

배우기 좋습니다! 제 경우에는 armv7과 i386이 있지만 armv6은 없습니다!
Nianliang

1

제 경우에는 동일한 문제가 발생했습니다. Xcode3.1.3이라는 이전 Xcode 폴더가 있다는 것을 깨달았습니다. 이전 버전이기 때문에 이름을 변경했습니다.


1

대상 설정에서 라이브러리 검색 경로를 확인하십시오. 때로는 구피 라이브러리가 입력되어 비슷한 오류가 발생합니다.

이 섹션의 모든 항목을 제거 할 수 있습니다.


0

내 라이브러리 (WM_GSRecognizerLib)에서 작업하기 때문에 약간 다른 경험이 있었지만 오류는 동일합니다.

무슨 일이 일어날까요? 일부 업데이트로 인해 포함 할 lib (.a)를 대상으로하는 경로는 "Debug-iphoneos"폴더 (생성 된 위치)에서 왔습니다. 일반 iOS 장치 용 컴파일은 잘 작동했지만 시뮬레이터에서는 작동하지 않았으며 누락 된 i386 아키텍처에 대해 불평했습니다.

이 문제에 대해 제가 한 일은 "Debug-iphonesimulator"폴더의 바이너리도 포함하는 것입니다.

여기에 설명이 있기 때문에이 주제에 도움이 될 수 있습니다. 장치에는 arm64 / armv7 / armv7s 용 바이너리가 필요하지만 시뮬레이터에는 i386이 필요합니다.


0

내 솔루션은 시뮬레이터 대상 디버그 예를 설정하는 것이 었습니다. .project에서만 아키텍처로 추가 된 새 줄을 보려면 git 상태를 확인하십시오. 이것을 설정하지 않으면 빌드가 모든 아키텍처에서 실행되고 i386 또는 기타와 같은 일부 누락 된 아키텍처가 표시됩니다. 주된 문제는 특정 아키텍처를 구현하는 프레임 워크를 사용하는 것입니다.


-1

나도 xcode 버전 4.0.2를 사용하고 있으므로 동일한 오류가 발생하여 xcode 프로젝트 파일을 선택하고 대상 옵션을 선택하여 내 프로젝트의 앱을 볼 수 있으므로 클릭하고 빌드로 이동했습니다. 설정 옵션.

검색 옵션에서 Framework 검색 경로를 입력했습니다. 하고 모든 설정을 삭제 한 다음 빌드 버튼을 클릭하면 잘 작동했습니다.

감사합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.