mô-đun thư viện

Có hai loại mô-đun thư viện Rust, một loại tạo thư viện Rust và một loại tạo thư viện tương thích với C. Ngoài ra, với mục đích xây dựng hệ thống, bạn có thể coi macro thủ tục Rust ( proc-macros ) là một loại thư viện đặc biệt.

thư viện rỉ sét

Mô-đun rust_library tạo ra các thư viện Rust để các mô-đun Rust khác sử dụng.

Ngoài các biến thể _host , thư viện Rust còn có các loại mô-đun kiểm soát liên kết có sẵn.

Loại mô-đun thư viện Rust Sự định nghĩa
thư viện rỉ sét Cung cấp cả hai biến thể thư viện, rlibdylib . AOSP khuyến nghị loại mô-đun này cho các thư viện Rust, vì nó cho phép các mô-đun hoạt động chính xác khi được liệt kê dưới dạng phần phụ thuộc trong thuộc tính rustlibs
rỉ sét_library_rlib Chỉ cung cấp biến thể rlib của thư viện Rust; các mô-đun chỉ cung cấp các biến thể rlib không thể được đảm bảo hoạt động với thuộc tính rustlibs .
rỉ sét_library_dylib Chỉ cung cấp biến thể dylib của thư viện Rust; không thể đảm bảo các mô-đun chỉ cung cấp các biến thể dylib sẽ hoạt động với thuộc tính rustlibs .

gỉ_ffi

Mô-đun rust_ffi tạo ra các thư viện tương thích với C để tương tác với các mô-đun CC.

Ngoài các biến thể _host , thư viện Rust FFI còn có các loại mô-đun kiểm soát liên kết có sẵn, được hiển thị trong bảng sau.

Loại mô-đun thư viện Rust FFI Sự định nghĩa
gỉ_ffi Cung cấp cả hai biến thể thư viện C: tĩnh và chia sẻ.
rỉ sét_ffi_shared Chỉ cung cấp biến thể thư viện chia sẻ C.
gỉ_ffi_static Chỉ cung cấp biến thể thư viện tĩnh C.

Để biết ví dụ cơ bản về cách sử dụng rust_ffi để gọi Rust từ C, hãy xem trang Android Rust Patterns .

Để biết thông tin về cách sử dụng nâng cao hơn, hãy truy cập tài liệu chính thức của Rust .

gỉ_proc_macro

Các macro thủ tục Rust (proc-macro) có thể hữu ích cho việc mở rộng trình biên dịch để thực hiện chuyển đổi mã nguồn hoặc cung cấp các thuộc tính mới. Bạn có thể tìm thêm thông tin về những điều này trong trang Macro thủ tục của tài liệu chính thức của Rust.

Với mục đích của hệ thống xây dựng, mô-đun rust_proc_macro hoạt động tương tự như mô-đun rust_library . Đối với các mô-đun phụ thuộc vào rust_proc_macros , hãy thêm tên mô-đun vào thuộc tính proc_macros .

proc_macros là các plugin trình biên dịch nên chúng nhất thiết nhắm mục tiêu vào máy chủ và không tạo ra bất kỳ mã nào có thể chạy trên thiết bị.

Thuộc tính thư viện Rust đáng chú ý

Các thuộc tính được xác định trong bảng bên dưới là phần bổ sung cho các thuộc tính chung quan trọng áp dụng cho tất cả các mô-đun. Đây là những điều đặc biệt quan trọng đối với các mô-đun thư viện Rust hoặc thể hiện hành vi độc đáo dành riêng cho loại mô-đun rust_library .

Thuộc tính thư viện Rust Sự định nghĩa
gốc / tên Thuộc tính stem kiểm soát tên tệp thư viện đầu ra, nếu không thì mặc định là name .

Trình biên dịch Rust áp đặt các yêu cầu nhất định đối với tên tệp thư viện và kết quả là hệ thống xây dựng thực thi các yêu cầu này để tránh các vấn đề biên dịch. Tên tệp đầu ra phải tuân theo định dạng lib<crate_name><suffix> . (Ở đây có sự phụ thuộc vào thuộc tính crate_name ).

tên thùng Đây là thuộc tính bắt buộc đối với các mô-đun tạo thư viện; nó cũng có mối quan hệ với tên tệp đầu ra. (Xem định nghĩa stem .)
xuất_include_dirs Đối với mô-đun rust_ffi , thuộc tính này xác định danh sách các chuỗi biểu thị các đường dẫn bao gồm tương đối: các đường dẫn chứa tiêu đề mà các mô-đun cc phụ thuộc có thể sử dụng.

Liên kết của Rust_library hoặc Rust_ffi

Theo mặc định, các thiết bị nhắm mục tiêu mô-đun thư viện Rust luôn được liên kết động với libstd . Tuy nhiên, các mô-đun máy chủ luôn được liên kết tĩnh với libstd .

Liên kết được sử dụng cho các phần phụ thuộc rustlibs phụ thuộc vào tùy chọn liên kết của mô-đun gốc. (Ví dụ: một rust_binary với prefer_rlib: true sẽ sử dụng các biến thể thư viện Rust liên kết rustlibs dưới dạng rlibs .)

Để cho phép sản xuất các mô-đun phụ thuộc gốc không dựa vào bất kỳ thư viện gỉ động nào (chẳng hạn như các tệp thực thi tĩnh), rlibs cung cấp cả biến thể liên kết libstd động và tĩnh. Biến thể chính xác được Soong tự động liên kết.