Можно ли создавать 32-разрядные приложения на OSX 10.6, которые работают на других системах OSX 10.6? - PullRequest
1 голос
/ 17 июля 2011

При сборке проектов C ++ с использованием make в OSX 10.6 я определил, что определение препроцессора __LP64__, кажется, всегда автоматически устанавливается компилятором (то есть оно не определено ни в одном заголовке файл) (см. Где __LP64__ определен для стандартных сборок приложений C ++ на OSX 10.6? ). Это приводит к вопросу: возможно ли даже создать 32-разрядное приложение на OSX 10.6, которое предназначено (и работает) на другой системе OSX 10.6?

Я слышал, что OSX 10.6 - это , всегда - 64-битная ОС - что даже невозможно запустить OSX 10.6 в качестве 32-битной операционной системы. Если это так, то имеет смысл, что невозможно создать 32-разрядное приложение на OSX 10.6, которое будет работать на другой системе OSX 10.6.

Мне нужно знать это, чтобы я мог знать, собираю ли я 64-битное приложение или нет (я пытался построить свой текущий проект как 32-битное приложение, так как соответствующая версия Windows также создается как 32-битный - но, возможно, мне нужно включить все 64-битные флаги и собрать версию этого приложения для OSX 10.6 как полноценное 64-битное приложение).

Ответы [ 2 ]

3 голосов
/ 17 июля 2011

Да, это вполне возможно сделать. Одна ограниченная демонстрация:

$ 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. Вы можете сделать больше с предоставленными Apple версиями GCC, такими как кросс-компиляция и / или универсальные сборки.

3 голосов
/ 17 июля 2011

Mac OS X 10.6 отлично работает на 32-битных Intel Mac. Отказалась от поддержки PowerPC. В будущих версиях Mac OS X (кашель NDA от кашля) может отсутствовать поддержка 32-разрядных компьютеров Intel Mac, для которых требуется 64-разрядная система.

Однако даже 64-битный Mac имеет неявную поддержку для запуска 32-битных процессов, и GCC может выполнять кросс-компиляцию для целей i386 (или целей PPC / PPC64 / ARMv6 / ARMv7.) ​​Вы должны убедиться, что желаемые архитектуры однако, они указываются в ваших флагах сборки, или по умолчанию используется собственная архитектура (например, x86_64.)

Если вы используете утилиту командной строки xcodebuild и передадите ей путь к комплекту проекта Xcode, она будет автоматически использовать настройки сборки в проекте при вызове GCC. Редко возникает необходимость использовать GCC непосредственно в Mac OS X, если вы не компилируете из общих * NIX-источников.

Если вы сообщите нам, почему вы используете make в Mac OS X, мы можем дать вам более конкретные рекомендации, но предпочтительный метод компиляции из командной строки в Mac OS X по-прежнему xcodebuild.

...