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
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
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.
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.
-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.
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. –
- 1. Lệnh tệp Linux: SYSV ngụ ý gì?
- 2. gì đang ngụ ý kiểu generic thông số
- 3. SQL: NULL như ColumnName ngụ ý
- 4. Ngụ ý và lệnh khai báo
- 5. hiện gần() ngụ ý flush() trong Python?
- 6. Ngụ ý so sánh chuỗi, 0 = '', nhưng 1 = '1'
- 7. Ngụ ý của việc sử dụng Facebook offline_access
- 8. Ngụ ý và liên kết rõ ràng với một DLL
- 9. C++ ngụ ý điều này, và chính xác cách nó được đẩy lên ngăn xếp
- 10. Ngụ ý bình đẳng trong kết hợp mẫu Haskell
- 11. Tại sao TreeNodeCollection không ngụ ý IEnumerable <TreeNode>?
- 12. Cú pháp PHP thú vị: một 'ngụ ý nếu'?
- 13. Nút Winforms: Hiển thị = false ngụ ý Bật = false?
- 14. Trạng thái xử lý sbwait ngụ ý trong đầu FreeBSD là gì?
- 15. PostgreSQL: UPDATE ngụ ý di chuyển trên phân vùng
- 16. Ngụ ý và triển khai rõ ràng giao diện
- 17. CHỌN DISTINCT ngụ ý một loại kết quả
- 18. Theo dõi gỡ lỗi Node.js dường như ngụ ý nhiều luồng thực thi - cách diễn giải chính xác điều này?
- 19. gì ~' ngụ ý rằng khi thêm vào như là một tiền tố cho một biến trong vĩ mô
- 20. Nếu `self` luôn là bộ nhận ngụ ý trong Ruby, tại sao` self.puts` không hoạt động?
- 21. Điều gì có ý nghĩa đối với một điều gì đó để "sáng tác tốt"?
- 22. Hành vi này của setInterval có ngụ ý hành vi đa luồng trong Javascript không?
- 23. Liệu [=] ngụ ý rằng tất cả các biến cục bộ sẽ được sao chép?
- 24. Việc làm tốt trong jQuery có ngụ ý là tốt trong JavaScript không?
- 25. Điều này có ý nghĩa gì trong ngôn ngữ Ruby?
- 26. Điều này thực sự có ý nghĩa gì> Codeigniter
- 27. Biểu tượng "Điều đó" có ý nghĩa gì trong Scala
- 28. Ý nghĩa của toán tử & điều hành là gì?
- 29. Điều gì có ý nghĩa với việc tăng trước mảng $ #?
- 30. LINQ to Entities Tham gia trên Nullable Dòng nơi Null Ngụ ý "Match All"
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 –
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