وحدات المكتبة

هناك نوعان من وحدات مكتبة 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 Patterns .

للحصول على معلومات حول الاستخدام الأكثر تقدمًا، تفضل بزيارة وثائق Rust الرسمية .

Rust_proc_macro

يمكن أن تكون وحدات الماكرو الإجرائية الصدأ (proc-macros) مفيدة لتوسيع المترجم لإجراء تحويلات التعليمات البرمجية المصدر أو توفير سمات جديدة. يمكن العثور على مزيد من المعلومات حول هذه الأمور في صفحة وحدات الماكرو الإجرائية في وثائق Rust الرسمية.

لأغراض نظام البناء، تعمل وحدة rust_proc_macro بشكل مشابه لوحدات rust_library . بالنسبة للوحدات التي تعتمد على rust_proc_macros ، قم بإضافة اسم الوحدة إلى خاصية proc_macros .

نظرًا لأن proc_macros عبارة عن مكونات إضافية للمترجم، فإنها تستهدف بالضرورة المضيف ولا تنتج أي تعليمات برمجية يمكن تشغيلها على الجهاز.

خصائص مكتبة الصدأ البارزة

الخصائص المحددة في الجدول أدناه هي بالإضافة إلى الخصائص العامة الهامة التي تنطبق على كافة الوحدات. تعتبر هذه إما ذات أهمية خاصة لوحدات مكتبة Rust، أو تعرض سلوكًا فريدًا خاصًا بنوع وحدة rust_library .

خصائص مكتبة الصدأ تعريف
الجذع / الاسم تتحكم الخاصية stem في اسم ملف مكتبة المخرجات، والذي يكون الاسم الافتراضي هو name .

يفرض مترجم Rust متطلبات معينة على أسماء ملفات المكتبة، ونتيجة لذلك يفرض نظام البناء هذه المتطلبات لتجنب مشكلات الترجمة. يجب أن يتوافق اسم ملف الإخراج مع التنسيق lib<crate_name><suffix> . (توجد تبعية هنا على الخاصية crate_name ).

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.