يرجى التحقق من المشروع المصغر لإعادة الإنتاج: https://github.com/skletsun/cargo_feature_dylib_issue.
توجد مساحة عمل تحتوي على مكتبة ديناميكية ومشروع يعتمد عليها. المكتبة لديها ميزة. تكمن المشكلة في أن نفس سيناريو البناء والاختبار لا يعمل مع سلاسل الأدوات الحديثة:
سيناريو العمل:
1) cargo +1.26.2 build --features feature
2) cargo +1.26.2 test --all -- --nocapture
لا يعمل:
1) cargo +1.28.0 build --features feature
2) cargo +1.28.0 test --all -- --nocapture
ملاحظاتي الحالية (تم اختبارها على OSX): سيناريو العمل - في الخطوة (1) يتم إنشاء المكتبة libcargo_check.dylib
داخل الدليل target/debug/deps
ثم نسخها إلى target/debug
. في الخطوة (2) يتم إعادة بنائه (بسبب الميزة المفقودة) ، يتم نسخه أيضًا (الكتابة فوق الميزة القديمة) إلى target/debug
ومن ثم يتم تنفيذ التطبيق التجريبي المرتبط بالمكتبة المشتركة في target/debug
. عندما أحاول فعل الشيء نفسه مع أحدث toolchain (سيناريو لا يعمل) ، فإنه يتصرف بنفس الطريقة تقريبًا باستثناء أنه في الخطوة (2) يتم إعادة بناء المكتبة إلى target/debug/deps
ولكن لم يتم نسخها إلى target/debug
و يتم تنفيذ التطبيق التجريبي على الإصدار القديم من المكتبة الديناميكية في target/debug
. وإذا حذفت يدويًا libcargo_check.dylib
القديم في target/debug
فإن cargo +1.28.0 test --all -- --nocapture
سيعمل كما هو متوقع لأن التطبيق التجريبي يتم تنفيذه على المكتبة الديناميكية الموجودة في target/debug/deps
.
يعد مشروع Rust الأصلي جزءًا من مشروع معقد يتضمن Java ، لذلك يتم بناء المشروع بالكامل باستخدام Maven ، والذي يقوم بدوره بتنفيذ البضائع للبناء والاختبار في بعض الترتيب. أتوقع أن يتصرف cargo test
بنفس الطريقة كما في الإصدارات السابقة من سلاسل الأدوات.
لقد اختبرته مقابل إصدارات قليلة من toolchain ويمكنني القول أنه يعمل مع 1.26.2 و 1.27.2 ، لكنه لا يعمل مع 1.28.0 و 1.29.1.
شكرا لك مقدما!
ccehuss ، أعتقد أننا كنا نناقش هذا مؤخرًا على خلاف ، أليس كذلك؟ في هذا هو السلوك المتوقع حاليًا ، لكنه سلوك يمكننا بالفعل إصلاحه! (وربما ينبغي لمخرجات dylib على الأقل)
أعتقد أنه كان في # 6131 حيث ناقشنا أنه تم تغيير الارتقاء.
هناك عدة أشياء هنا:
عندما غيّرنا الارتقاء ، كان هناك قلق من أنه قد يكون هناك مشاكل ، لكن في ذلك الوقت لم نتمكن من التفكير في أي شيء محدد. يبدو أننا وجدنا واحدة! 😄
أرى ثلاثة حلول ممكنة:
ليس لدي أي تفضيل. 2 سهل للغاية ، لكني لا أعرف الآثار المترتبة. 3 أصعب قليلاً ، لكنه ممكن.
شكرًا للتحقيق في هذاehuss! الخيار (2) يبدو أنه طريقة رائعة لإصلاح هذا الأمر بالنسبة لي ، لا أعتقد بالتأكيد أنه يجب أن يكون لدينا الكثير من التداعيات من تبديل الأسبقية هناك ويمكننا دائمًا المتابعة (3) بشكل مستقل لاحقًا إذا لزم الأمر
التعليق الأكثر فائدة
شكرًا للتحقيق في هذاehuss! الخيار (2) يبدو أنه طريقة رائعة لإصلاح هذا الأمر بالنسبة لي ، لا أعتقد بالتأكيد أنه يجب أن يكون لدينا الكثير من التداعيات من تبديل الأسبقية هناك ويمكننا دائمًا المتابعة (3) بشكل مستقل لاحقًا إذا لزم الأمر