Когда я передаю флаг компилятора -mmacosx-version-min=10.5
, что это значит? Я думаю, что это означает, что результат двоичный - это x86, а не ppc, но это 32 бита или 64 бит? Я компилирую на снежный барс, поэтому двоичный вывод по умолчанию - 64 бит. Я не прохожу -universal
, это не 32-битный 64-битный универсальный двоичный файл, я думаю.
Что подразумевается в macosx-version-min?
Ответ 1
Этот параметр будет использоваться различными макросами доступности, размещенными в заголовках. Это означает, что вы можете потребовать минимальную версию ОС, даже если у вас более свежий SDK (т.е. Целевой 10.5 с 10.6 SDK). Использование API 10.6 при настройке 10.5 приведет к предупреждению, и API будет связан со значением атрибута weak_import.
В большинстве заголовков API Apple содержатся макросы доступности для каждого класса, методов, функций или перечислений, чтобы объявить для каждого из них:
- Минимальная поддерживаемая ОС
- Отказ
- Недоступность
- ...
Макросы выглядят так:
-
AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER
-
AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED
- ...
Что касается архитектуры, она зависит только от доступных архитектур в двоичных файлах SDK. Например, с 10,5 SDK вы можете настроить таргетинг на четыре архитектуры (Intel/32bits, PowerPC/32bits, Intel/64bits, PowerPC 64bits), а с 10,6 SDK вы можете использовать только три архитектуры (Intel/32bits, PowerPC/32bits, Intel/64бит).
Как вы используете Snow Leopard, вы можете либо нацелить i386 (Intel/32bits), ppc (PowerPC/32bits), либо x86_64 (Intel/64bits) очень просто, передав такой вариант архитектуры:
gcc -arch i386
или как это (для проектов на основе конфигурации):
CFLAGS="-arch i386" LDFLAGS="-arch i386" ./configure
Ответ 2
-mmacosx-version-min=...
также влияет на выбор по умолчанию реализации С++ STL (GNU или LLVM), и в этом отношении он одинаково важен для компилятора и компоновщика.
Ответ 3
Из моего тестирования важно также, чтобы этот параметр передавался на этап ссылки (например, -arch); поэтому он больше влияет на макросы/предварительную обработку (как это можно сделать из других ответов).
Когда он передается на этап компиляции, но не передается на этап ссылки, я обнаружил, что общие библиотеки, построенные с 10.6, не будут загружаться под 10.5.
Ответ 4
Он запускает предупреждения компилятора для методов, появившихся после Mac OS X 10.5. Это не имеет ничего общего с архитектурой.