2012-09-13 3 views
7

iPhone 5 및 기타 armv7 장치가 표시되면이 새로운 아키텍처가없는 Flurry와 같은 기존 (폐쇄 소스) 타사 프레임 워크와 호환성 문제가 있습니다. .armv7 아키텍처가 없음을 나타내는 컴파일러 플래그가 있습니까

하나의 옵션은 새 빌드를 릴리스 할 때까지 기다리는 것이지만 컴파일러 플래그 또는이 프레임 워크에서 armv7 아키텍처를 예상하지 않도록 링커에서 알 수있는 Xcode 프로젝트에서 사용할 수있는 것이 있으면 좋겠다. 대신 armv7을 사용하십시오. 이것과 같은 것이 존재합니까?

+10

** 스택 오버플로는 타사 간의 NDA 때문에 질문을 닫거나 삭제하지 않습니다 **. 중재자는 두 개의 별도 제 3 자간에 계약을 시행하기 위해 여기에 있지 않습니다. NDA인지 여부에 관계없이 실용적이고 답을 묻는 질문이며 스택 오버플로 품질 가이드 라인을 충족하는 경우 질문은 열린 상태로 유지되고 삭제되지 않습니다. – casperOne

+1

안녕 Matt. Flurry가 9 월 14 일 금요일에 armv7을 지원하여 4.0.3을 릴리스 한 빠른 업데이트를 제공하고자했습니다. 어제 컴파일러 경고를 제거하기 위해 9 월 17 일에 4.0.4의 후속 릴리스가있었습니다. –

+0

감사합니다. 출시 된 지 몇 분 만에 알았습니다. – coneybeare

답변

10

대상 아키텍처가 포함되지 않은 프레임 워크를로드 할 수 없습니다.

프레임 워크가 업데이트 될 때까지 armv7 앱만 출하 할 수 있습니다. 앱은 여전히 ​​iPhone 5에서 작동하지만 최신 성능 최적화 기능을 사용하지 마십시오.

또는 새로운 아키텍처에서 프레임 워크없이 살 수 있다면 약하게 연결할 수 있습니다. 그러나 프레임 워크의 물건을 사용하는 모든 곳에서로드되면 코드를 체크인해야합니다.

6

GCC의 링커 플래그는 allow_sub_type_mismatches 이었으므로 링크 된 라이브러리에서 ARM 아키텍처 버전을 혼합하고 일치시킬 수는 있지만 최신 버전의 Xcode에서는이를 제거한 것으로 보입니다.

그러나 실제로는 다른 방식으로 해킹 당할 수 있습니다. 프레임 워크, 16 진수 편집기에서 그 안에 실제 코드 라이브러리 파일을 열고, 그 내용을보고, 사본을하면 모두 교체 다음을 수행하십시오

CEFAEDFE 0C000000 09000000 

CEFAEDFE 0C000000 0B000000 

에 무슨 기본적으로 각 코드 객체의 헤더를 ARMv7 코드가 아닌 ARMv7로 식별하기 위해 변경합니다. 명령 세트는 하위 호환성 (또는 어쨌든) 인 것처럼 보이므로이 해킹으로도 잘 실행되어야합니다. 나는 우리가 실제로 아이폰 5에서 테스트 할 수있는 기회를 갖기 전에는 그 사실을 알 수 없다는 것을 인정해야한다.

어쨌든 프레임 워크를 수정 한 후에 두 버전을 프로젝트에 추가하고 각 아키텍처의 해당 버전에 링크하기 만하면됩니다. lipo을 사용하여 수정 된 라이브러리와 원본 라이브러리를 병합하여 새 단일 프레임 워크를 만들 수도 있습니다.

+2

이것은 정확하게 내가 한 일이고 여기서 어떻게 - http://www.galloway.me.uk/2012/09/hacking-up-an-armv7s-library/. – mattjgalloway

+0

차가워서 - 프로세스를 자동화하여 자동 스크립트를 만들 수 있습니다. 또한 Mach-O 헤더와 관련이없는 CEFAEDFE 0C000000 09000000을 우연히 변경하지 않아도됩니다. – Ertebolle

+1

"LLVM에서 빼앗 겼음"이란 무엇을 의미합니까? 위대한 선지자 자퀸 (Zarquon)의 술꾼 인 링커 깃발입니다! 컴파일러와 관련이 없으며 실제로 작동합니다.하지만 아마도이 문제를 해결할 수있는 최악의 방법 일 수 있습니다. 힌트 : 적절한 방법은 아키텍처 빌드 설정에서 ARMv7을 제거하여 옵트 아웃하는 것입니다. –

관련 문제