Я пытаюсь создать универсальный двоичный файл для проекта на работе, но я не могу правильно настроить 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)?
- В чем разница между ppcs (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), который имеет arch 'ppc', как показано на lipo. Все включенные библиотеки и фреймворки являются либо «ppc», либо «ppc7400» (опять же, как показано на lipo). Но окончательная сборка - ppc970.
Я прошел через это очень осторожно, чтобы убедиться, что я все получил. Кто-нибудь может подумать о причине различий в архитектуре ppc?
Я даже зашел так далеко, что создал новый проект (Hello World) и связал его со всеми библиотеками и фреймворками первого проекта. Hello строится как 'ppc', а не 'ppc970'.
Это просто не имеет смысла для меня.