2010-05-27 24 views
24

Khi tôi vượt qua cờ trình biên dịch -mmacosx-version-min=10.5, điều đó có nghĩa là gì? Tôi nghĩ rằng nó ngụ ý kết quả nhị phân là x86, không ppc, nhưng là nó 32 bit hoặc 64 bit? Tôi đang biên soạn trên báo tuyết, do đó, đầu ra mặc định nhị phân là 64 bit. Tôi không đi qua -universal, nó không phải là 32bit-64bit phổ nhị phân, tôi nghĩ.macosx-version-min ngụ ý điều gì?

Trả lời

19

Tùy chọn này sẽ được sử dụng bởi các macro sẵn có khác nhau được đặt vào tiêu đề. Điều này có nghĩa là bạn có thể yêu cầu phiên bản hệ điều hành tối thiểu, ngay cả khi bạn có SDK mới hơn (tức là mục tiêu 10.5 có SDK 10.6). Sử dụng API 10.6 trong khi nhắm mục tiêu 10.5 sẽ kích hoạt cảnh báo và API sẽ được liên kết với thuộc tính weak_import.

Hầu hết các tiêu đề API của Apple chứa macro sẵn có cho mỗi lớp học, phương pháp, chức năng, enumeration để tuyên bố cho mỗi người trong số họ:

  • Các hệ điều hành hỗ trợ tối thiểu
  • việc không dùng
  • Các unavailability
  • ...

Macro như sau:

  • AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER
  • AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED
  • ...

Đối với các kiến ​​trúc, nó chỉ phụ thuộc vào kiến ​​trúc có sẵn trong mã nhị phân của SDK. Ví dụ với SDK 10.5, bạn có thể nhắm mục tiêu bốn kiến ​​trúc (Intel/32bits, PowerPC/32bits, Intel/64bits, PowerPC 64bits), trong khi với một SDK 10.6, bạn chỉ có thể nhắm mục tiêu ba kiến ​​trúc (Intel/32bits, PowerPC/32bits, Intel/64bits).

Như bạn đang sử dụng Snow Leopard, bạn có thể mục tiêu i386 (Intel/32bits), PPC (PowerPC/32bits) hoặc x86_64 (Intel/64bits) rất đơn giản bằng cách thông qua một tùy chọn kiến ​​trúc như thế này:

gcc -arch i386 

hay như thế này (đối với dự án configure-based):

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

Tôi phải #include để nhận các macro này bằng C. Nhưng available.h cũng được bao gồm trong stdlib.h –

+1

Xem thêm câu trả lời của @ Kristian bên dưới. Ngoài ra tôi đã thấy rằng một phiên bản tối thiểu bằng và trên 10.8 sẽ tạo ra các ký hiệu hơi khác nhau (liên kết của biểu tượng '_start' đã thay đổi, có khả năng phù hợp với thư viện C++ mặc định mới). – Ephemera

4

Nó kích hoạt cảnh báo trình biên dịch cho các phương thức xuất hiện sau Mac OS X 10.5. Không có gì để làm với kiến ​​trúc.

10

Từ thử nghiệm của tôi, nó cũng quan trọng là tùy chọn này được chuyển sang bước liên kết (như -arch); do đó, nó ảnh hưởng nhiều hơn đến macro/tiền xử lý (có thể được suy ra từ các câu trả lời khác).

Khi được chuyển đến bước biên dịch nhưng không được chuyển sang bước liên kết, tôi nhận thấy rằng các thư viện được chia sẻ được xây dựng với 10.6 sẽ không tải dưới 10.5.

12

-mmacosx-version-min=... cũng ảnh hưởng đến lựa chọn mặc định của việc thực thi C++ STL (GNU hoặc LLVM), và trong vấn đề này, nó cũng quan trọng không kém đối với trình biên dịch và trình liên kết.

+3

Thật vậy. Điều này đặc biệt quan trọng đối với Mavericks, nơi thay đổi mặc định C++ STL lib. –

Các vấn đề liên quan