مقدمة: أول لقاء مع "التنين الأحمر"
\n\nلقد بدأت للتو في تعلم Rust. قمت بتنزيل المترجم، وكتبت أول ملف hello.rs، وقمت بتشغيل cargo build... وفجأة ينفجر الطرفية برسالة حمراء: «linker 'cc' not found». هل هذا مألوف؟ إذا كنت تعمل على ويندوز 10 باستخدام نظام WSL مع Debian، فإن هذا الخطأ هو تحية كلاسيكية من عالم البرمجة النظامية.
لا داعي للذعر. هذا ليس خطأ في Rust، بل هو خصوصية في إعداد البيئة. في هذه المقالة، لن نحل هذه المشكلة مرة واحدة وإلى الأبد فحسب، بل سنتحدث أيضًا عن كيفية تحسين عملية البناء لجعل الكود الخاص بك يُترجم بشكل أسرع. فـ Rust تشتهر بأدائها، ويجب أن نعطي المترجم أفضل الأدوات للعمل.
\n\nلماذا يحدث خطأ «linker 'cc' not found»؟
\n\nلفهم العدو، يجب أن تعرفه جيدًا. Rust هي لغة مترجمة. عندما تكتب cargo build، يقوم المترجم rustc بتحويل الكود الخاص بك إلى كود آلي. لكن المرحلة النهائية هي الربط (تجميع الملفات الكائنية في ملف تنفيذي). هذا العمل يقوم به برنامج خارجي يسمى الرابط.
افتراضيًا في أنظمة لينكس (بما في ذلك WSL Debian)، يبحث Rust عن الرابط cc. هذا رابط رمزي، عادة ما يشير إلى gcc أو clang. إذا لم يكن مثبتًا في نظام WSL الخاص بك مترجم C (GCC أو Clang)، فإن الرابط cc غير موجود. لا يعرف Rust كيفية ربط مشروعك، ويصدر خطأ فادحًا.
جذر المشكلة: WSL Debian - تثبيت الحد الأدنى
\nعند تثبيت WSL Debian من متجر Microsoft، تحصل على نظام عاري. لا يحتوي على GCC ولا Make ولا أي أدوات مطور أخرى. لا يتضمن Rust رابط C - فهذه مسؤولية البيئة النظامية.
\n\nالطريقة رقم 1: حل سريع (تثبيت GCC)
\n\nأبسط وأصح طريقة هي تثبيت مجموعة الأدوات القياسية لتطوير C. افتح طرفية WSL Debian ونفذ:
\n\nsudo apt update\nsudo apt install build-essential\n\nحزمة build-essential هي حزمة شاملة تسحب معها gcc و g++ و make والأهم من ذلك، تنشئ الرابط /usr/bin/cc. بعد التثبيت، تحقق:
which cc\n# يجب أن يظهر: /usr/bin/cc\n\nالآن قم بتشغيل cargo build مرة أخرى - سيختفي الخطأ. وجد Rust الرابط.
لماذا هذا مهم للأداء؟
\nباستخدام GCC القياسي، تحصل على رابط مستقر ومحسّن. سيقوم Rust ببناء مشروعك بأقل تكاليف إضافية. يبدأ التحسين بالأدوات الصحيحة.
\n\nالطريقة رقم 2: ضبط دقيق (تثبيت Clang)
\n\nإذا كنت من محبي LLVM و Clang (و Rust يستخدم LLVM أيضًا تحت الغطاء)، يمكنك تثبيته بدلاً من GCC. قد يعطي هذا زيادة طفيفة في سرعة الربط في بعض المشاريع.
\n\nsudo apt install clang lld\n# إنشاء الرابط يدويًا إذا لم يكن موجودًا\nsudo ln -s /usr/bin/clang /usr/bin/cc\n\nالتحقق:
\ncc --version\n# يجب أن يظهر Clang\n\nهام: LLD (رابط LLVM) غالبًا ما يعمل أسرع من GNU ld التقليدي. بالنسبة لمشاريع Rust الكبيرة، يمكن أن يقلل وقت البناء بنسبة 10-20%. تثبيت Clang ليس مجرد إصلاح للخطأ، بل هو تحسين لأداء الترجمة.
\n\nالطريقة رقم 3: حل بديل (تحديد الرابط يدويًا)
\n\nتوجد حالات لا ترغب فيها في تثبيت GCC أو Clang (مثل خادم إنتاج بقيود). يمكنك تحديد الرابط الذي سيستخدمه Rust بشكل صريح. لكن ضع في اعتبارك: بدون تثبيت رابط، لن تعمل هذه الطريقة.
\n\nأنشئ ملف ~/.cargo/config.toml (أو /.cargo/config.toml للإعدادات العامة):
[target.x