что означает macosx-version-min? - PullRequest
24 голосов
/ 27 мая 2010

Когда я передаю флаг компилятора -mmacosx-version-min=10.5, что это значит?Я думаю, что это означает, что результатом является двоичный файл x86, а не ppc, но 32-битный или 64-битный?Я компилирую на снежном барсе, поэтому двоичный файл по умолчанию равен 64 битам.Я не передаю -universal, это не 32-битный 64-битный универсальный двоичный файл, я думаю.

Ответы [ 4 ]

19 голосов
/ 28 мая 2010

Эта опция будет использоваться различными макросами доступности, помещаемыми в заголовки. Это означает, что вам может потребоваться минимальная версия ОС, даже если у вас более поздний 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 / 32bit, PowerPC / 32bit, Intel / 64bit, PowerPC 64bit), в то время как с 10.6 SDK вы можете использовать только три архитектуры (Intel / 32bit, PowerPC / 32bit, Intel / 64бит).

Поскольку вы используете Snow Leopard, вы можете очень просто выбрать i386 (Intel / 32bit), ppc (PowerPC / 32bit) или x86_64 (Intel / 64bit), передав параметр архитектуры, подобный следующему:

gcc -arch i386

или как это (для проектов на основе конфигурации):

CFLAGS="-arch i386" LDFLAGS="-arch i386" ./configure
11 голосов
/ 06 ноября 2013

-mmacosx-version-min=... также влияет на выбор по умолчанию реализации C ++ STL (GNU или LLVM), и в этом отношении он одинаково важен для компилятора и компоновщика.

10 голосов
/ 10 октября 2010

Из моего тестирования также важно, чтобы эта опция была передана шагу ссылки (например, -arch); так что это больше, чем просто влияет на макросы / предварительную обработку (как можно понять из других ответов).

При передаче на шаг компиляции, но не на шаг компоновки, я обнаружил, что совместно используемые библиотеки, созданные с 10.6, не будут загружаться под 10.5.

4 голосов
/ 27 мая 2010

Это вызывает предупреждения компилятора для методов, которые появились после Mac OS X 10.5. Это не имеет ничего общего с архитектурой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...