โมดูลไลบรารี Rust มี 2 ประเภท ได้แก่ โมดูลที่สร้างไลบรารี Rust และโมดูลที่สร้างไลบรารีที่เข้ากันได้กับ C นอกจากนี้ คุณยังพิจารณามาโครเชิงกระบวนการของ Rust (proc-macros
) เป็นไลบรารีประเภทพิเศษสำหรับวัตถุประสงค์ของระบบการสร้างได้
ห้องสมุดของรัสเซีย
โมดูล rust_library
จะสร้างไลบรารี Rust ไว้ให้โมดูล Rust อื่นๆ ใช้งาน
นอกจากตัวแปร _host
แล้ว ไลบรารี Rust ยังมีประเภทโมดูลที่ควบคุมการลิงก์ที่ใช้ได้
ประเภทโมดูลไลบรารี Rust | คำจำกัดความ |
---|---|
ห้องสมุดของรัสเซีย | ระบุตัวแปรไลบรารีทั้ง rlib และ dylib AOSP แนะนำโมดูลประเภทนี้สำหรับไลบรารี Rust เนื่องจากช่วยให้โมดูลทำงานได้อย่างถูกต้องเมื่อแสดงเป็นทรัพยากร Dependency ภายใต้พร็อพเพอร์ตี้ 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 โปรดดูหน้ารูปแบบสนิมของ Android
ดูข้อมูลเกี่ยวกับการใช้งานขั้นสูงได้ที่เอกสารประกอบอย่างเป็นทางการของ Rust
rust_proc_macro
มาโครขั้นตอนของสนิม (มาโครแบบโปร) มีประโยชน์สำหรับการขยายคอมไพเลอร์เพื่อเปลี่ยนรูปแบบซอร์สโค้ดหรือระบุแอตทริบิวต์ใหม่ ดูข้อมูลเพิ่มเติมได้ที่หน้ามาโครเชิงขั้นตอนของเอกสารประกอบอย่างเป็นทางการของ 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
ทั้งแบบไดนามิกและแบบคงที่เพื่อให้สร้างโมดูลทรัพยากร Dependency ของรูทที่ไม่ได้พึ่งพาไลบรารี Rust แบบไดนามิกใดๆ (เช่น ไฟล์ปฏิบัติการแบบคงที่) Soong จะลิงก์ตัวแปรที่ถูกต้องโดยอัตโนมัติ