Как собрать универсальные двоичные файлы (ppc/i386), используя Xcode 3.2.2 для OSX?
Я пытаюсь создать универсальный двоичный файл для проекта на работе, но я не могу правильно настроить XCode для этого.
Я знаком с документацией Apple по этому поводу, но, видимо, я не правильно ее читаю.
Рассматриваемые параметры сборки Xcode:
- архитектуры
- Базовый SDK
- Версия компилятора C/C++
- Цель развертывания Mac OS X
В моих настройках у меня есть следующие действительные архитектуры: i386 ppc ppc64 ppc7400 ppc970 x86_64.
Если я использую следующие параметры, я получаю двоичный файл с i386 и ppc970:
- Архитектура: i386 PPC
- Базовый SDK: Mac OS X 10.5
- Версия компилятора C/C++: GCC 4.0
- Цель развертывания Mac OS X: Mac OS X 10.5
У меня есть несколько вопросов по этому поводу:
- Почему ppc970, а не ppc7400 (или просто ppc)?
- В чем разница между PCP (PPC, PPC64, PPC7400, PPC970)?
- Как получить двоичный файл для любого КПК?
По-видимому, мне нужен бинарный файл с ppc7400 для работы на Mac Mini, который у нас есть для тестирования. Mini имеет G4 и работает под управлением OSX 10.5.8. Из того, что я могу сказать, двоичный файл с ppc7400 работает, но не один только с ppc970.
Я испробовал несколько комбинаций описанных выше вариантов сборки, в том числе изменив базовый SDK на 10.4u. Приведенная выше конфигурация является единственной, которую можно собрать. Другие сборки терпят неудачу, часто из-за не распознавания заголовочных файлов или явно доступных #defines. Например, если я изменю свой компилятор на gcc 4.2, я получаю ошибки при поиске stdarg.h из-за директивы #include_next и отсутствия четкого пути к правильным заголовкам. Если я уроню базовый SDK до 4.0, #define FSIZE long long больше не будет распознаваться, несмотря на то, что он не изменяет какие-либо включения.
Буду очень признателен за любую информацию, которую вы можете мне дать.
РЕДАКТИРОВАТЬ ОБНОВЛЕНИЕ
Спасибо за информацию. Теперь я понимаю флаги. Но я получаю странный результат.
Вот мои флаги сборки:
GCC_VERSION = 4.0 MACOSX_DEPLOYMENT_TARGET = 10,4 SDKROOT = macosx10,5 GCC_MODEL_TUNING = G3
Это создает объектный файл (.o), имеющий арку 'ppc', как показано в lipo. Все включенные библиотеки и фреймворки являются либо "ppc", либо "ppc7400" (опять же, как показано на lipo). Но окончательная сборка - ppc970.
Я прошел через это очень тщательно, чтобы убедиться, что я все получил. Кто-нибудь может подумать о причине различий в архитектуре КПК?
Я даже зашел так далеко, что создал новый проект (Hello World) и связал его со всеми библиотеками и фреймворками первого проекта. Hello строится как 'ppc', а не 'ppc970'.
Это просто не имеет смысла для меня.
2 ответа
ppc970
== G5
, Если вам нужно поддержать еще в G4
затем просто построить для ppc7400
,
Вместо того, чтобы возиться с отдельными настройками архитектуры, вы можете просто выбрать 32-bit Universal
(или же Standard (32/64-bit Universal)
(при необходимости) из всплывающего меню, и это должно дать вам то, что вам нужно.
В настройках цели внесите изменения ниже.
GCC_MODEL_PPC64 = NO
т.е. снимите флажок "Использовать 64-битное целое число по математике".
Включение включит 64 бит. Так что это будет G5 и далее..