Sự khác biệt giữa “Kiến trúc” và “Kiến trúc hợp lệ” trong Cài đặt bản dựng Xcode là gì?


112

Ý nghĩa của chúng là gì và tôi có thể đặt chúng ở các giá trị khác nhau không?

Câu trả lời:


113

Kiến trúc là những kiến ​​trúc bạn muốn xây dựng, những kiến ​​trúc hợp lệ là những kiến ​​trúc bạn có thể nghĩ về việc xây dựng bằng codebase của mình.

Vì vậy, có thể bạn chỉ muốn xây dựng tệp nhị phân của mình cho armv7s, nhưng cùng một mã nguồn sẽ biên dịch tốt cho armv7 và armv6. Vì vậy VALID_ARCHS = armv6 armv7 armv7s, nhưng bạn đặt ARCHS = armv7svì đó là tất cả những gì bạn thực sự muốn xây dựng với mã của mình.

Hoặc, trong Apple-ese:

ARCHS (Kiến trúc)

Danh sách số nhận dạng được phân tách bằng dấu cách. Chỉ định các kiến ​​trúc (ABI, mô hình bộ xử lý) mà tệp nhị phân được nhắm mục tiêu. Khi cài đặt xây dựng này chỉ định nhiều hơn một kiến ​​trúc, tệp nhị phân được tạo có thể chứa mã đối tượng cho mỗi kiến ​​trúc được chỉ định.

và:

VALID_ARCHS (Kiến trúc hợp lệ)

Danh sách số nhận dạng được phân tách bằng dấu cách. Chỉ định các kiến ​​trúc mà tệp nhị phân có thể được xây dựng. Trong quá trình xây dựng, danh sách này được giao với giá trị của cài đặt bản dựng ARCHS; danh sách kết quả chỉ định các kiến ​​trúc mà hệ nhị phân có thể chạy. Nếu danh sách kiến ​​trúc kết quả trống, mục tiêu không tạo ra tệp nhị phân.

Nguồn: Tham khảo cài đặt bản dựng Xcode

Trong thực tế, bạn để VALID_ARCHSmột mình và không lo lắng về việc thay đổi nó, và chỉ cần ARCHSmày mò để thiết lập các kiến ​​trúc bạn muốn xây dựng. Thông thường, bạn đặt bản dựng Gỡ lỗi thành chỉ NATIVE_ARCH, vì bạn chỉ muốn tạo phiên bản gỡ lỗi cho máy mà bạn sẽ thử nghiệm / chạy nó và Bản dựng phát hành cho toàn bộ kiến ​​trúc mà bạn định hỗ trợ.


1
@DanMoore "Danh sách kiến ​​trúc kết quả" được thực hiện trong bộ nhớ tại thời điểm xây dựng.
Saltymule

3
@ onmyway133 Thông thường, bạn không muốn VALID_ARCHS. Nếu bạn đang viết asm nội tuyến chỉ cho một số kiến ​​trúc nhất định, bạn có thể thay đổi VALID_ARCHS để phản ánh rằng mã của bạn không còn dành cho bất kỳ kiến ​​trúc nào khác ngoài những kiến ​​trúc đó. Tuy nhiên, hầu hết, nó chỉ là một gợi ý cho bạn từ Xcode cho biết nó có thể xây dựng kiến trúc nào và bạn chọn từ đó cho ARCHS của mình.
Jeremy W. Sherman

4

Từ tài liệu của Apple, chúng ta biết rằng Xcode nhị phân sẽ xây dựng là danh sách được Valid Architectures giao với Architectures.

Vì vậy, tôi không nghĩ câu trả lời của Jeremy là đúng, như anh ấy nói:

Vì vậy, có thể bạn chỉ muốn xây dựng tệp nhị phân của mình cho armv7s, nhưng cùng một mã nguồn sẽ
biên dịch tốt cho armv7 và armv6. Vì vậy VALID_ARCHS = armv6 armv7 armv7s, nhưng bạn đặt ARCHS = armv7s vì đó là tất cả những gì bạn thực sự muốn tạo bằng mã của mình.

Khi bạn đặt VALID_ARCHS = armv6 armv7 armv7svà đặt ARCHS = armv7s, kết quả của Xcode nhị phân sẽ tạo là armv7s , nó không thể tương thích với armv6 / armv7.

Và nếu bạn muốn tương thích với armv6 / armv7 / armv7s ,, bạn phải đặt VALID_ARCHS = armv6 armv7 armv7sARCHS = armv6. Bằng cách này, kết quả của Xcode nhị phân sẽ được tạo là armv6 và nó có thể chạy tốt trên cả armv6 / armv7 / armv7s vì bộ xử lý arm tương thích ngược .


1
Anh ấy đã đúng: "bởi vì đó là tất cả những gì bạn thực sự muốn xây dựng bằng mã của mình."
Laszlo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.