دو نوع ماژول کتابخانه Rust وجود دارد، یکی که کتابخانه های 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 ، کتابخانه های Rust FFI دارای انواع ماژول هایی هستند که پیوند موجود را کنترل می کنند، که در جدول زیر نشان داده شده است.
| نوع ماژول کتابخانه Rust FFI | تعریف |
|---|---|
| rust_ffi | هر دو نوع کتابخانه C را ارائه می دهد: ایستا و اشتراکی. |
| rust_ffi_shared | فقط نوع کتابخانه مشترک C را ارائه می دهد. |
| rust_ffi_static | فقط نوع کتابخانه ایستا C را ارائه می دهد. |
برای مثال اولیه استفاده از rust_ffi برای فراخوانی Rust از C، صفحه الگوهای زنگ اندروید را ببینید.
برای اطلاعات در مورد استفاده پیشرفته تر، از مستندات رسمی 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 گذاری می شود. کامپایلر Rust الزامات خاصی را بر روی نام فایل های کتابخانه اعمال می کند و در نتیجه سیستم ساخت این الزامات را برای جلوگیری از مشکلات کامپایل اعمال می کند. نام فایل خروجی باید با فرمت |
| crate_name | این یک ویژگی لازم برای ماژول های تولید کتابخانه است. علاوه بر این، با نام فایل خروجی رابطه دارد. (به تعریف stem مراجعه کنید.) |
| export_include_dirs | برای ماژولهای rust_ffi ، این ویژگی فهرستی از رشتهها را تعریف میکند که نشاندهنده مسیرهای نسبی شامل هستند: مسیرهایی که حاوی سرصفحههایی هستند که ماژولهای cc وابسته میتوانند استفاده کنند. |
پیوند rust_library یا rust_ffi
بهطور پیشفرض، ماژولهای کتابخانه Rust که دستگاههای هدف قرار میدهند، همیشه به صورت پویا با libstd مرتبط میشوند. با این حال، ماژول های میزبان همیشه به صورت ایستا با libstd مرتبط هستند.
پیوند مورد استفاده برای وابستگیهای rustlibs به ترجیحات پیوند ماژول ریشه بستگی دارد. (به عنوان مثال، یک rust_binary با prefer_rlib: true از انواع کتابخانه Rust استفاده می کند که rustlibs به عنوان rlibs پیوند می دهند.)
برای اجازه دادن به تولید ماژولهای وابستگی ریشه که به هیچ کتابخانه زنگ پویا (مانند فایلهای اجرایی استاتیک) متکی نیستند، rlibs انواع پیوندهای پویا و استاتیک libstd ارائه میکند. نوع صحیح به طور خودکار توسط Soong پیوند داده می شود.