2011-07-17 7 views
1

OSX 10.6에서 make을 사용하여 C++ 프로젝트를 빌드 할 때 전 처리기 정의 __LP64__이 컴파일러에서 자동으로 설정 (즉, 모든 헤더 파일에 정의되어 있지 않음)되어있는 것으로 나타났습니다 (Where is __LP64__ defined for default builds of C++ applications on OSX 10.6? 참조). 이는 질문 : 다른 OSX 10.6 시스템에서 대상 (및 실행) 인 OSX 10.6에서 32 비트 응용 프로그램을 빌드하는 것이 에서도 가능합니까?다른 OSX 10.6 시스템에서 실행되는 OSX 10.6에서 32 비트 응용 프로그램을 빌드 할 수 있습니까?

OSX 10.6이 64 비트 OS 인 은 항상이라고 들었습니다. OSX 10.6을 32 비트 운영 체제로 실행하는 것도 불가능합니다. 이 경우 다른 OSX 10.6 시스템에서 실행될 OSX 10.6에서 32 비트 응용 프로그램을 빌드하는 것은 불가능한이라는 것이 합리적입니다.

64 비트 응용 프로그램을 구축하고 있는지 여부를 알 수 있도록이 사실을 알아야합니다 (현재 Windows 버전도 32 비트 응용 프로그램으로 빌드하려고 시도하고 있습니다). 32 비트로 구축되었지만 모든 64 비트 플래그를 활성화하고이 응용 프로그램의 OSX 10.6 버전을 본격적인 64 비트 응용 프로그램으로 구축해야합니다.

답변

3

네, 그렇게 할 수 있습니다. 한 제한 데모 :

$ tar -xf Packages/range-1.14.tgz 
$ cd range-1.14 
$ ls 
COPYING Makefile README gpl-3.0.txt range.c range.mk stderr.c stderr.h 
$ rmk CC='gcc -m32' 
    gcc -m32 -g  -c stderr.c 
    gcc -m32 -g  -c range.c 
    gcc -m32 -o range -g  stderr.o range.o 
$ file range 
range: Mach-O executable i386 
$ rmk -u CC='gcc -m64' 
    gcc -m64 -g  -c stderr.c 
    gcc -m64 -g  -c range.c 
    gcc -m64 -o range -g  stderr.o range.o 
$ file range 
range: Mach-O 64-bit executable x86_64 
$ 

rmk -u (GNU) make -B에 해당합니다. 이 GCC는 집에서 만든 4.6.0입니다. GCC와 같은 크로스 컴파일 링 및/또는 유니버설 빌드와 같이 Apple에서 제공하는 버전으로 더 많은 것을 할 수 있습니다.

+0

고맙습니다. 그것은 내가 놓친 -m32 플래그였습니다. 실제로 필자는이를 알았거나'man make '를 보았지만, 32 비트 빌드를위한 자체 플래그가있는 제 3 자 프로젝트의'runConfigure' 파일을 처리한다고 가정했습니다. –

3

Mac OS X 10.6은 32 비트 Intel Mac에서 완벽하게 실행됩니다. PowerPC에 대한 지원이 중단되었습니다. Mac OS X의 향후 버전 (NDA 기침)은 64 비트 시스템을 필요로하는 32 비트 Intel Mac에 대한 지원을 중단시킬 수도,하지 않을 수도 있습니다.

그러나 64 비트 Mac조차도 32 비트 프로세스 실행에 대한 암시 적 지원이 있으며 GCC는 i386 대상 (또는 PPC/PPC64/ARMv6/ARMv7 대상)에 대해 크로스 컴파일 할 수 있습니다. 원하는 아키텍처가 빌드 플래그에 지정되어 있거나 기본 아키텍처 (예 : x86_64)로 기본 설정됩니다.

xcodebuild 명령 줄 유틸리티를 사용하고 Xcode 프로젝트 번들에 경로를 전달하면 자동으로 GCC에서 호출 할 때 프로젝트의 빌드 설정. 제네릭 * NIX 소스에서 컴파일하지 않으면 Mac OS X에서 GCC를 직접 사용할 필요가 거의 없습니다.

Mac OS X에서 make을 사용하는 이유를 알려 주시면보다 구체적인 조언을 드릴 수 있지만 Mac OS X의 기본 명령 줄 컴파일 방법은 여전히 ​​xcodebuild입니다.

+0

Linux와 OSX에서 크로스 플랫폼 빌드를 간소화하기 위해'make'를 사용하고 있습니다. 이것은 GUI가없고 매우 적은 수의 OS 전용 호출 (주로 Boost와 같은 확립 된 C++ 라이브러리에 내장되어 있음)이있는 서버 응용 프로그램입니다. 따라서 Linux와 OSX에서 모두 따라야하는 빌드 프로세스에 대해 단일 프로 시저를 정의하는 것이 가장 편리합니다. 그렇지 않으면, Xcode로 빌드한다면, 우리는 리눅스 빌드와 OSX 빌드를위한 완전히 다른 두 가지 명령어 세트가 필요합니다. 이것은 합리적으로 보입니까? –

+0

더 중요한 것은'runConfigure'와'make' (Xcode 제외)와 함께 사용하기위한 설정 파일을 수정하는 몇몇 써드 파티 라이브러리 (특히 Xerces)를 위해 작성된 패치 파일들이 있습니다. Xcode를 사용해야 만한다면 Xcode 프로젝트 설정을 손으로 직접 변경해야합니다. –

+0

더 정확히 말하면 10입니다.6은 PowerPC 컴퓨터에서 * 부팅 *을 지원하지 않지만 거의 모든 "최신"PPC 응용 프로그램 (예 : Classic 환경 외부에서 10.5 또는 10.4에서 실행되는 응용 프로그램)은 여전히 ​​10.6에서 로제타 덕분에 잘 돌아갑니다. 대부분의 경우'arch -i386/usr/bin/python2.6' 또는'arch -ppc/usr/bin/python2 '명령을 사용하여 명령 행에서 실행 환경을 강제 실행할 수 있습니다. .6'. 그것은 명백하게 10.7에서 바뀔 것이다. –

관련 문제