โมดูลไลบรารี Rust มี 2 ประเภท ได้แก่ โมดูลที่สร้างไลบรารี Rust และโมดูลที่สร้างไลบรารีที่เข้ากันได้กับ C นอกจากนี้ คุณยังพิจารณามาโครเชิงกระบวนการของ Rust (proc-macros
) เป็นคลังประเภทพิเศษสำหรับวัตถุประสงค์ของระบบการสร้างได้
rust_library
โมดูล rust_library
จะสร้างไลบรารี Rust ไว้ให้โมดูล Rust อื่นๆ ใช้งาน
นอกจากตัวแปร _host
แล้ว ไลบรารี Rust ยังมีประเภทโมดูลที่ควบคุมการลิงก์ที่ใช้ได้
ประเภทโมดูลไลบรารี Rust | คำจำกัดความ |
---|---|
rust_library | มีทั้งตัวแปรไลบรารี rlib และ dylib AOSP แนะนำประเภทโมดูลนี้สำหรับไลบรารี Rust เนื่องจากช่วยให้โมดูลทำงานได้อย่างถูกต้องเมื่อแสดงเป็นข้อกำหนดในพร็อพเพอร์ตี้ rustlibs |
rust_library_rlib | มีเฉพาะตัวแปร rlib ของไลบรารี Rust เท่านั้น ไม่สามารถรับประกันได้ว่าโมดูลที่มีเฉพาะตัวแปร rlib จะทำงานร่วมกับพร็อพเพอร์ตี้ rustlibs ได้ |
rust_library_dylib | มีเฉพาะตัวแปร dylib ของไลบรารี Rust เท่านั้น ไม่สามารถรับประกันได้ว่าโมดูลที่มีเฉพาะตัวแปร dylib จะทำงานร่วมกับพร็อพเพอร์ตี้ rustlibs ได้ |
rust_ffi
โมดูล rust_ffi
จะสร้างไลบรารีที่เข้ากันได้กับ C เพื่อทำงานร่วมกับโมดูล CC
นอกจากตัวแปร _host
แล้ว ไลบรารี FFI ของ Rust ยังมีประเภทโมดูลที่ควบคุมการลิงก์ที่ใช้ได้ดังที่แสดงในตารางต่อไปนี้
ประเภทโมดูลไลบรารี FFI ของ Rust | คำจำกัดความ |
---|---|
rust_ffi | มีทั้งตัวแปรของไลบรารี C แบบคงที่และแบบแชร์ |
rust_ffi_shared | มีเฉพาะตัวแปรไลบรารีที่ใช้ร่วมกัน C เท่านั้น |
rust_ffi_static | มีเฉพาะตัวแปรไลบรารีแบบคงที่ C เท่านั้น |
ดูตัวอย่างพื้นฐานของการใช้ rust_ffi
สำหรับการเรียกใช้ Rust จาก C ได้ที่หน้ารูปแบบ Rust ของ Android
ดูข้อมูลเกี่ยวกับการใช้งานขั้นสูงได้ที่เอกสารประกอบอย่างเป็นทางการของ Rust
rust_proc_macro
มาโครเชิงกระบวนการของ Rust (proc-macros) อาจมีประโยชน์สำหรับการขยายคอมไพเลอร์เพื่อดำเนินการเปลี่ยนรูปแบบซอร์สโค้ดหรือระบุแอตทริบิวต์ใหม่ ดูข้อมูลเพิ่มเติมเกี่ยวกับสิ่งเหล่านี้ได้ในหน้ามาโครเชิงกระบวนงานของเอกสารประกอบอย่างเป็นทางการของ Rust
โมดูล rust_proc_macro
ทำงานคล้ายกับโมดูล rust_library
เพื่อวัตถุประสงค์ของระบบบิลด์ สําหรับโมดูลที่ขึ้นอยู่กับ rust_proc_macros
ให้เพิ่มชื่อโมดูลลงในพร็อพเพอร์ตี้ proc_macros
เนื่องจาก proc_macros
เป็นปลั๊กอินคอมไพเลอร์ จึงจำเป็นต้องกำหนดเป้าหมายไปยังโฮสต์และจะไม่สร้างโค้ดที่จะทำงานในอุปกรณ์
คุณสมบัติของไลบรารี Rust ที่โดดเด่น
พร็อพเพอร์ตี้ที่กําหนดไว้ในตารางด้านล่างนี้นอกเหนือจากพร็อพเพอร์ตี้ทั่วไปที่สําคัญที่ใช้กับข้อบังคับทั้งหมด โมดูลเหล่านี้มีความสำคัญอย่างยิ่งต่อโมดูลไลบรารี Rust หรือแสดงลักษณะการทำงานเฉพาะสำหรับประเภทโมดูล rust_library
พร็อพเพอร์ตี้คลัง Rust | คำจำกัดความ |
---|---|
stem / name | พร็อพเพอร์ตี้ stem จะควบคุมชื่อไฟล์ของไลบรารีเอาต์พุต ซึ่งค่าเริ่มต้นจะเป็น name
คอมไพเลอร์ Rust กำหนดข้อกำหนดบางอย่างเกี่ยวกับชื่อไฟล์ของไลบรารี และระบบบิลด์จึงบังคับใช้ข้อกำหนดเหล่านี้เพื่อหลีกเลี่ยงปัญหาการคอมไพล์
ชื่อไฟล์เอาต์พุตต้องเป็นไปตามรูปแบบ |
crate_name | นี่เป็นพร็อพเพอร์ตี้ที่จำเป็นสำหรับโมดูลที่สร้างคลัง และยังมีความสัมพันธ์กับชื่อไฟล์เอาต์พุตด้วย (ดูคำจำกัดความของ stem ) |
export_include_dirs | สําหรับโมดูล rust_ffi พร็อพเพอร์ตี้นี้จะกําหนดรายการสตริงที่แสดงถึงเส้นทางรวมแบบสัมพัทธ์ ซึ่งก็คือเส้นทางที่มีส่วนหัวที่โมดูล cc ที่ขึ้นต่อกันใช้ได้ |
การลิงก์ของ rust_library หรือ rust_ffi
โดยค่าเริ่มต้น โมดูลไลบรารี Rust ที่กําหนดเป้าหมายเป็นอุปกรณ์จะลิงก์กับ libstd
แบบไดนามิกเสมอ อย่างไรก็ตาม โมดูลโฮสต์จะลิงก์กับ libstd
แบบคงที่เสมอ
การลิงก์ที่ใช้สำหรับ rustlibs
Dependencies จะขึ้นอยู่กับค่ากําหนดการลิงก์ของโมดูลรูท (เช่น rust_binary
ที่มี prefer_rlib: true
จะต้องใช้ตัวแปรไลบรารี Rust ที่ลิงก์ rustlibs
เป็น rlibs
)
rlibs
มีตัวแปรการลิงก์ทั้งแบบไดนามิกและแบบคงที่ของ libstd
เพื่อให้สามารถผลิตโมดูลการพึ่งพารูทที่ไม่ใช้ไลบรารี Rust แบบไดนามิก (เช่น ไฟล์ปฏิบัติการแบบคงที่) โดย
Soong จะลิงก์ตัวแปรที่ถูกต้องโดยอัตโนมัติ