2011-04-19 7 views
1

최신 Mac App이 Mac App Store에서 거부되었습니다.애플 리케이션 내의 코코아 32 비트 및 64 비트 바이너리

기본적으로 앱에 포함 된 자체적 인 유닉스 실행 파일로 인해 작동하지 않았습니다. 이전에 내 응용 프로그램에 이진 파일을 포함 시켰습니다. 그 응용 프로그램은 Mac App Store에 있지만이 유닉스 이진 파일은 문제가되고 있습니다.

저는이 바이너리의 2 가지 버전을 i386 컴퓨터에서 컴파일하고 다른 버전은 x86_64 컴퓨터에서 컴파일했습니다. "파일 APPNAME"를 사용 , 나는 바이너리 64 비트

마하-O 64 비트 실행 x86_64에

및 바이너리 32 비트

마하-O 실행 i386을 얻을

런타임시 정확한 바이너리를 실행하려고 시도하지만 문제가 아닌 것으로 보입니다. 어떤 바이너리를 사용하면 x86_64 on과 i386 컴퓨터를 실행할 수 있으며 문제가 해결됩니다.

내 응용 프로그램 빌드 설정은 기본 프로젝트 (표준 32/64 비트 인텔)와 함께 제공되는 설정입니다.

내가 애플 리케이션이 i386 컴퓨터에서 실행될 때 질문은 32 비트 바이너리를 실행해야합니까?
i386 시스템에서 x86_64 바이너리를 실행할 때 왜 작동합니까?

감사합니다.

+1

'i386 컴퓨터'가 i386 인 경우 어떻게 알 수 있습니까? 또한 보편적 인 빌드가 아닌 이유는 무엇입니까? –

+0

"uname -a"를 사용하여 i386 컴퓨터를 검사했지만 i386은 다른 아키텍처를 실행할 수 있음을 알지 못했습니까? –

+1

IIRC uname은 커널 아키텍처를 알려주며 64 비트 가능 머신은 32 비트 커널을 부트 할 수 있습니다. 이는 64 비트 가능하지만 EFI가 아닌 일부 코어 2 듀오 시스템에서는 필수입니다. 'sysctl hw.cpu64bit_capable'을 실행하십시오. - 기계가 64 비트를 사용할 수있는 경우 1을 표시하고 그렇지 않으면 0을 표시합니다. –

답변

4

왜 Unix 도구를 유니버설 바이너리로 빌드하지 않습니까? 그런 다음 운영 체제는 시스템의 아키텍처에 따라 실행할 바이너리의 올바른 버전을 선택합니다.

EDIT - 적절한 대답의 일부로 의견을 추가하십시오.

i386 및 x86_64 바이너리를 빌드해야합니다. 분명히, 두 아키텍처 모두에서 exe 및 모든 종속성을 빌드해야합니다. i386 아키텍처의 모든 곳에서 gcc 플래그 -arch = i386을 사용하면 충분할 수 있습니다. 그런 다음 lipo을 사용하여 두 바이너리를 결합 할 수 있습니다.

+0

간단한 대답은 내가 100 % 확신 할 수 없다는 것입니다. 이 도구는 httrack이며이 문제를 해결하는 데 어려움을 겪었습니다. 이 명령은 [./configure --prefix =/opt/local --with-zlib =/opt/local --enable-shared = no] 내가 필요로하는 큰 일은 다른 libs에 의존하지 않는 바이너리 였으므로 그것은 완전히 자체 포함 된 실행됩니다. i386 및 x86_64로 어떻게 컴파일합니까? –

+2

유니버설 바이너리를 연결하는 방법을보기 위해'man lipo '를 읽어라. – user57368

+1

i386 및 x86_64 바이너리를 빌드해야합니다. 분명히, 두 아키텍처 모두에서 exe 및 모든 종속성을 빌드해야합니다. i386 아키텍처의 모든 곳에서 gcc 플래그'-arch = i386'을 사용하면 충분할 수 있습니다. 그런 다음 lipo를 사용하여 두 바이너리를 결합 할 수 있습니다. – JeremyP

2

당신은 일을 너무 복잡하게 만들고 있습니다. 64 비트 바이너리를 빌드하는 데 64 비트 머신이 필요하지 않으며 64 비트 머신에 32 비트 바이너리를 빌드하는 데 문제가 없습니다.

GCC 및 따라서 XCode는 32 비트 범용 또는 32/64 비트 유니버설 이미지를 쉽게 지원하므로 올바른 이미지 실행에 대해 전혀 염려 할 필요가 없습니다.

+0

Xcode가 잘 작동하는 나를위한 범용 앱을 만들고 있습니다. 필자는 명령 줄에서 컴파일 할 수있는 유닉스 바이너리를 내 응용 프로그램에 포함 시켰습니다. 이 응용 프로그램의 x86_64 및 i386 버전을 가지고 있지만 다른 이유로이 이진 파일을 올바르게 가져 오는 데 문제가 있습니다. 이제 그들을 결합하기 위해 lipo를 사용했습니다. 도움을 주셔서 감사합니다. –