2010-05-27 9 views
24

Kiedy przekazuję flagę kompilatora -mmacosx-version-min=10.5, co to oznacza? Myślę, że implikuje to wynik binarny to x86, a nie ppc, ale czy jest to 32 bity czy 64 bity? Kompiluję na lamparcie, więc domyślny plik wyjściowy to 64 bity. Nie przepuszczam -universal, to chyba nie 32bit-64-bitowy plik binarny.co oznacza macosx-version-min?

Odpowiedz

19

Ta opcja będzie używana przez różne makra dostępności umieszczone w nagłówkach. Oznacza to, że możesz wymagać minimalnej wersji systemu operacyjnego, nawet jeśli masz nowszy pakiet SDK (np. Cel 10.5 z pakietem SDK 10,6). Korzystanie z interfejsu API 10.6 podczas kierowania 10.5 spowoduje wyświetlenie ostrzeżenia, a interfejs API zostanie powiązany z atrybutem weak_import.

Większość nagłówki Apple API zawiera makra dostępności dla każdej z klas, metod, funkcji lub wyliczenia, aby zadeklarować dla każdego z nich:

  • Minimalna OS obsługiwane
  • Deprecation
  • Niedostępność
  • ...

makra wyglądać następująco:

  • AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER
  • AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED
  • ...

chodzi o architekturę, to zależy tylko od dostępnych architektur w plikach binarnych w SDK. Na przykład z pakietem SDK 10.5 możesz kierować reklamy na cztery architektury (Intel/32bits, PowerPC/32bit, Intel/64bits, PowerPC 64bits), natomiast z pakietem SDK 10,6 możesz wybrać tylko trzy architektury (Intel/32bits, PowerPC/32bits, Intel/64bit).

Jak używasz Snow Leopard, można albo cel i386 (Intel/32-bitowego), PPC (PowerPC/32-bitowego) lub x86_64 (Intel/64bits) w bardzo prosty sposób, przekazując opcję architektura tak:

gcc -arch i386 

lub tak (dla projektów Configure-based):

CFLAGS="-arch i386" LDFLAGS="-arch i386" ./configure 
+0

Musiałem # dołączyć , aby uzyskać te makra na zwykłym C. Ale dostępne.h jest również zawarte w stdlib.h –

+1

Zobacz także @ Odpowiedź Kristiana poniżej. Ponadto stwierdziłem, że minimalna wersja jest równa i wyższa niż 10.8 wygeneruje nieco inne symbole (zmieniło się powiązanie symbolu "_start", prawdopodobnie zgodnie z nową domyślną biblioteką C++). – Ephemera

4

Wywołuje ostrzeżenia kompilatora dla metod, które pojawiły się po systemie Mac OS X 10.5. Nie ma nic wspólnego z architekturą.

10

z moich testów, ważne jest też, że opcja ta jest przekazywana do kroku Link (jak -arch); więc ma więcej niż wpływ na makra/preprocessing (co można wywnioskować z innych odpowiedzi).

Po przekazaniu do etapu kompilacji, ale nie przekazanego do kroku łącza, stwierdziłem, że biblioteki współdzielone zbudowane z wersją 10.6 nie zostaną załadowane poniżej 10.5.

12

-mmacosx-version-min=... ma również wpływ na domyślny wybór implementacji C++ STL (GNU lub LLVM) iw związku z tym jest równie ważny dla kompilatora i łącznika.

+3

Rzeczywiście. Jest to szczególnie ważne w Mavericks, gdzie zmieniono domyślną bibliotekę C++ STL. –