2010-05-27 25 views
24

當我通過編譯器標誌-mmacosx-version-min=10.5,這是什麼意思?我認爲這意味着結果二進制是x86,而不是ppc,但它是32位還是64位?我正在編譯雪豹,所以默認輸出二進制是64位。我想不是通過-universal,它不是32位-64位通用二進制。macosx-version-min暗示什麼?

回答

19

該選項將被放置在標題中的各種可用性宏使用。這意味着即使您擁有更新的SDK(即使用10.6 SDK的目標10.5),也可以要求最低版本的操作系統。在10.5中使用10.6 API將觸發警告,API將與weak_import屬性鏈接。

大部分蘋果的API頭包含每個類,方法,函數或枚舉可用性宏,以宣佈爲他們每個人:

  • 最低OS支持
  • 棄用
  • 將不可用
  • ...

的宏看起來像:

  • 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/32位,PowerPC/32位,Intel/64位,PowerPC 64位),而對於10.6 SDK,則只能針對三種架構(Intel/32位,PowerPC/32位,英特爾/ 64位)。

當您使用雪豹,您可以定位I386(英特爾/ 32位),PPC(PowerPC的/ 32位)或x86_64(英特爾/ 64位),非常簡單地通過傳遞架構選項是這樣的:

gcc -arch i386 

或類似這樣(的配置爲基礎的項目):

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

我不得不#include 以獲得這些宏在普通C.但available.h也包含在stdlib.h – 2011-09-28 15:07:20

+1

請參閱@克里斯蒂安的答案在下面。此外,我發現最低版本等於或高於10。8會生成稍微不同的符號('_start'符號的鏈接已更改,可能符合新的默認C++庫)。 – Ephemera 2014-05-17 06:07:28

4

它會觸發Mac OS X 10.5之後出現的方法的編譯器警告。與建築無關。

10

從我的測試中,它也是重要的,這個選項被傳遞給鏈接步驟(如-arch);所以它不僅影響宏/預處理(可能從其他答案推斷出來)。

當傳遞給編譯步驟但未傳遞給鏈接步驟時,我發現用10.6構建的共享庫不會在10.5下加載。

12

-mmacosx-version-min=...也影響C++ STL實現(GNU或LLVM)的默認選擇,在這方面,它對編譯器和鏈接器同樣重要。

+3

確實。這對於小牛來說尤爲重要,因爲在這裏默認的C++ STL庫發生了變化。 – 2013-12-16 11:18:24

相關問題