دليل برمجة C في أوبونتو: أوامر cc وخيارات البناء

نظرة عامة

يستعرض هذا الدليل التطبيقي خطوات كتابة برامج لغة C وتحويلها إلى برمجيات تنفيذية على بيئة لينكس عبر واجهة الأداة المعيارية cc. سنتناول بالتفصيل كيفية تهيئة حزمة أدوات التطوير، وبناء المصادر البرمجية البسيطة، واستخدام معلمات التصريف الأساسية مثل -o و-Wall، فضلاً عن تطبيق منهجية البناء المجزأ وربط الوحدات البرمجية بصورة منظمة تلائم المبتدئين.

تهيئة بيئة العمل والتحقق من وجود المترجم cc

لتجهيز نظام أوبونتو بكافة الأدوات والمكتبات اللازمة لترجمة شيفرات لغة C، نبدأ بتحديث مستودعات النظام وتثبيت حزمة التطوير عبر الأمر sudo apt-get update -qq && sudo apt-get install -y build-essential.

تثبيت حزمة أدوات البناء الأساسية في أوبونتو

لمعرفة المسار الفعلي الذي يشير إليه المترجم الافتراضي داخل النظام، نقوم بتنفيذ الأمر which cc.

الاستعلام عن مسار الأداة cc

يقوم الأمر cc بمعالجة ملفات لغة C وترجمتها مباشرة إلى ملفات ثنائية صالحة للتشغيل.
ولمعاينة تفاصيل الإصدار المثبت وسجل الدعم، يُستخدم الأمر cc --version.
⚙️ [أهم خيارات ومحددات البناء]

-o : تعيين اسم مخصص للملف التنفيذي الناتج بعد انتهاء الترجمة.
-c : إيقاف العملية بعد توليد ملف الكائن الوسيط (.o) وتجاوز مرحلة الربط.
-Wall : تفعيل مختلف رسائل التنبيه والتحذير لاكتشاف أي ثغرات برمجية مبكراً.
-g : حقن رموز تتبع الأخطاء داخل الملف التنفيذي لتسهيل الفحص والتنقيح.
-O2 : تطبيق تقنيات تحسين الكود المتقدمة لتحقيق أفضل أداء وسرعة تشغيلية.

استعراض إصدار المترجم cc وخياراته

إنشاء أول برنامج بلغة C وتصريفه بالوضع الافتراضي

نخصص مسار عمل جديد لتجارب البرمجة والتصريف وننتقل إليه مباشرة عبر الأمر mkdir -p ~/c_practice && cd ~/c_practice.

تجهيز مجلد تدريبي والانتقال إليه

ننشئ أول ملف شيفرة مصدرية باسم hello.c لاختبار وظائف الطباعة القياسية باستخدام الأمر cat.

كتابة كود البرنامج الأولي hello.c

لبدء تصريف الشيفرة المكتوبة في hello.c وفق الإعدادات المسبقة، ننفذ الأمر cc hello.c.
عند غياب محددات تسمية المخرج، يضع المترجم الملف التنفيذي الناتج باسم افتراضي هو a.out داخل المسار الحالي.

تصريف ملف C دون وسائط إضافية

للتحقق من سلامة الملف الثنائي الناتج ومطابقته للوظيفة المطلوبة، نشغله عبر الأمر ./a.out.
ستظهر العبارة النصية المحددة مسبقاً في الكود “Hello, Linux cc!” على نافذة الطرفية.

تشغيل الملف الثنائي الناتج a.out

تعيين اسم المخرج (-o) وتفعيل خيارات التحسين (-Wall, -O2)

ننشئ برنامجاً إضافياً لإجراء العمليات الحسابية في ملف يُدعى calc.c عبر الأمر cat.

إنشاء ملف الحساب البرمجي calc.c

لإجراء عملية تصريف محكمة، ندمج خيار إظهار التحذيرات -Wall مع تحسين الأداء -O2 ونحدد اسماً صريحاً للبرنامج التنفيذي وهو calc_app باستخدام الأمر cc -Wall -O2 -o calc_app calc.c.
اكتمال هذا الأمر دون إشعارات يبرهن على خلو الملف من الأخطاء وتوليد البرنامج بالاسم المحدد.

بناء التطبيق بتعيين الاسم وتفعيل التحسينات

للتأكد من توليد الملف calc_app ومطالعة خصائصه وأذوناته التشغيلية، ننفذ الأمر ls -l calc_app.
تُظهر المخرجات بوضوح حجم الملف وصلاحية التنفيذ (x) الممنوحة له في النظام.

التحقق من خصائص الملف التنفيذي calc_app

نقوم بتشغيل البرنامج للتحقق من دقته الحسابية عن طريق الأمر ./calc_app.
تطبع الشاشة نتيجة الجمع الصحيحة المنصوص عليها في الشيفرة “Result: 40”.

تشغيل التطبيق الحسابي ومعاينة النتيجة

تقنيات التصريف المجزأ (-c) وربط ملفات الكائنات المستقلة

لبدء العمل بنظام الوحدات المقسمة، ننشئ ملف الترويسة message.h الذي يحتوي على التصريح المبدئي للدالة باستخدام الأمر cat.

كتابة ملف الترويسة التعريفي message.h

ننتقل لصياغة متن الدالة وتنفيذها الفعلي في ملف مستقل باسم message.c باستخدام الأمر cat.

تنفيذ الدالة المنفصلة في message.c

نجهز الملف التشغيلي الأساسي main.c الذي يستورد الترويسة ويدير نقطة الانطلاق في الدالة الرئيسية عبر الأمر cat.

إنشاء نقطة الدخول الرئيسية main.c

نقوم بتصريف كل من message.c وmain.c على حدة لإنشاء ملفات الكائنات المقابلة دون المرور بمرحلة الربط النهائي عبر الأمر cc -c message.c main.c.
ينتج عن إدراج المحدد -c إنشاء ملفات كائنات ثنائية بامتداد .o لكل ملف مصدري.

توليد ملفات الكائنات دون إجراء الربط

لمعاينة ملفات الكائنات التي تم إنشاؤها في دليل العمل، ننفذ الأمر ls -l *.o.
توضح النتائج ظهور الملفين message.o وmain.o بصورة سليمة.

فحص ملفات الكائنات الثنائية الناتجة

لدمج ملفات الكائنات المنفصلة (message.o وmain.o) في تطبيق موحد، ننفذ عملية الربط وتسمية الناتج modular_app عبر الأمر cc -o modular_app message.o main.o.
تقوم هذه الخطوة بحل الارتباطات بين الدوال وتوليد الملف الثنائي المتكامل النهائي.

ربط الوحدات المترجمة في ملف تنفيذي نهائي

لاختبار مدى كفاءة النظام المجزأ ونجاح مرحلة الربط، نشغل البرنامج النهائي بواسطة الأمر ./modular_app.
ينجح البرنامج في استدعاء الدالة الخارجية وعرض العبارة التوضيحية “Modular Build Complete!”.

اختبار عمل البرنامج المقسم بعد الربط

تناولنا خلال هذا الدليل المهارات الأساسية لتصريف تطبيقات C داخل أوبونتو باستخدام الأمر cc، إلى جانب إتقان خيارات البناء وفصل الكود المعياري. تمنحك هذه الأسس القدرة على بناء مشاريع برمجية أكثر قوة وموثوقية في بيئات لينكس المختلفة.