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
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
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ą.
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.
-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.
Rzeczywiście. Jest to szczególnie ważne w Mavericks, gdzie zmieniono domyślną bibliotekę C++ STL. –
Musiałem # dołączyć , aby uzyskać te makra na zwykłym C. Ale dostępne.h jest również zawarte w stdlib.h –
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