โมดูลห้องสมุด

โมดูลไลบรารี Rust มีสองประเภท ประเภทแรกสร้างไลบรารี Rust และอีกประเภทหนึ่งสร้างไลบรารีที่เข้ากันได้กับ C นอกจากนี้ เพื่อวัตถุประสงค์ในการสร้างระบบ คุณสามารถพิจารณามาโครขั้นตอน Rust ( proc-macros ) เป็นไลบรารีประเภทพิเศษได้

rust_library

โมดูล rust_library สร้างไลบรารีRustสำหรับใช้งานโดยโมดูลRustอื่นๆ

นอกเหนือจากตัวแปร _host แล้ว ไลบรารี 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 แล้ว ไลบรารี Rust FFI ยังมีประเภทโมดูลที่ควบคุมการเชื่อมโยงที่มีอยู่ ดังแสดงในตารางต่อไปนี้

ประเภทโมดูลไลบรารี Rust FFI คำนิยาม
rust_ffi จัดเตรียมไลบรารี C ทั้งสองแบบ: แบบคงที่และแบบแชร์
rust_ffi_shared จัดเตรียมเฉพาะตัวแปรไลบรารีที่แบ่งใช้ C เท่านั้น
rust_ffi_static จัดเตรียมเฉพาะตัวแปรไลบรารี C แบบคงที่

สำหรับตัวอย่างพื้นฐานของการใช้ rust_ffi ในการเรียก Rust จาก C โปรดดูที่หน้า รูปแบบสนิมของ Android

สำหรับข้อมูลเกี่ยวกับการใช้งานขั้นสูง โปรดดู เอกสารประกอบของ Rust อย่างเป็นทางการ

rust_proc_macro

มาโครขั้นตอนสนิม (proc-มาโคร) อาจมีประโยชน์สำหรับการขยายคอมไพลเลอร์เพื่อทำการแปลงซอร์สโค้ดหรือจัดเตรียมคุณลักษณะใหม่ สามารถดูข้อมูลเพิ่มเติมได้จากหน้า Procedural Macros ของเอกสาร Rust อย่างเป็นทางการ

สำหรับวัตถุประสงค์ของระบบ build โมดูล rust_proc_macro ทำงานคล้ายกับโมดูล rust_library สำหรับโมดูลที่ขึ้นอยู่กับ rust_proc_macros ให้เพิ่มชื่อโมดูลให้กับคุณสมบัติ proc_macros

เนื่องจาก proc_macros เป็นปลั๊กอินคอมไพเลอร์ จึงจำเป็นต้องกำหนดเป้าหมายไปที่โฮสต์ และไม่สร้างโค้ดใดๆ ที่จะทำงานบนอุปกรณ์

คุณสมบัติไลบรารี Rust ที่โดดเด่น

คุณสมบัติที่กำหนดไว้ในตารางด้านล่างนี้เป็นส่วนเพิ่มเติมจาก คุณสมบัติทั่วไปที่สำคัญ ที่ใช้กับโมดูลทั้งหมด สิ่งเหล่านี้มีความสำคัญอย่างยิ่งต่อโมดูลไลบรารีของ Rust หรือแสดงลักษณะการทำงานเฉพาะของโมดูลประเภท rust_library โดยเฉพาะ

คุณสมบัติห้องสมุดสนิม คำนิยาม
ก้าน / ชื่อ คุณสมบัติ stem จะควบคุมชื่อไฟล์ไลบรารีเอาท์พุต ซึ่งมิฉะนั้นจะมีค่าเริ่มต้นเป็น name .

คอมไพเลอร์ Rust กำหนดข้อกำหนดบางประการเกี่ยวกับชื่อไฟล์ไลบรารี และด้วยเหตุนี้ระบบบิลด์จึงบังคับใช้ข้อกำหนดเหล่านี้เพื่อหลีกเลี่ยงปัญหาการคอมไพล์ ชื่อไฟล์เอาต์พุตต้องเป็นไปตามรูปแบบ lib<crate_name><suffix> (มีการพึ่งพาที่นี่ในคุณสมบัติ crate_name )

crate_name นี่เป็นคุณสมบัติที่จำเป็นสำหรับโมดูลที่ผลิตไลบรารี นอกจากนี้ยังมีความสัมพันธ์กับชื่อไฟล์เอาต์พุตอีกด้วย (ดูคำจำกัดความ stem )
ส่งออก_รวม_dirs สำหรับโมดูล rust_ffi คุณสมบัตินี้จะกำหนดรายการสตริงที่แสดงถึงพาธรวมแบบสัมพัทธ์: พาธซึ่งมีส่วนหัวที่โมดูล cc ที่ขึ้นต่อกันสามารถใช้ได้

การเชื่อมโยงของrust_libraryหรือrust_ffi

ตามค่าเริ่มต้น อุปกรณ์ที่กำหนดเป้าหมายโมดูลไลบรารี Rust จะถูกเชื่อมโยงแบบไดนามิกกับ libstd เสมอ อย่างไรก็ตาม โมดูลโฮสต์จะเชื่อมโยงแบบคงที่กับ libstd เสมอ

การเชื่อมโยงที่ใช้สำหรับการขึ้นต่อกันของ rustlibs ขึ้นอยู่กับการกำหนดค่าตามความชอบการเชื่อมโยงของโมดูลรูท (ตัวอย่างเช่น rust_binary ที่มี prefer_rlib: true จะใช้เวอร์ชันไลบรารีของ Rust ที่เชื่อมโยง rustlibs เป็น rlibs )

เพื่ออนุญาตการผลิตโมดูลการขึ้นต่อกันของรูทที่ไม่ต้องอาศัยไลบรารีสนิมแบบไดนามิกใดๆ (เช่น โปรแกรมปฏิบัติการแบบคงที่) rlibs จัดเตรียมตัวแปรการเชื่อมโยง libstd ทั้งแบบไดนามิกและแบบคงที่ ตัวแปรที่ถูกต้องจะถูกเชื่อมโยงโดยอัตโนมัติโดย Soong