0Pricing
C Academy · درس

المكتبات الساكنة والمشتركة

بناء المكتبات وربطها

المكتبات الساكنة والمشتركة درس مجاني في C Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C Academy 4 دروس في المجموع.

ما هي المكتبة

المكتبة مجموعة من ملفات الكائنات المترجمة التي يمكنك إعادة استخدامها في برامج متعددة دون إعادة ترجمة المصدر في كل مرة.

يوجد في C نوعان:

  • المكتبات الساكنة (.a)، وتُنسخ داخل الملف التنفيذي وقت الربط
  • المكتبات المشتركة (.so)، وتُحمّل وقت التشغيل

بناء ملفات الكائنات

يبدأ كلا النوعين من ملفات الكائنات. ترجم ملفات المصدر باستخدام -c كالمعتاد.

تُعد ملفات .o هذه المادة الخام التي سيجمعها برنامج الأرشفة أو الرابط.

gcc -c mathlib.c -o mathlib.o
gcc -c strlib.c -o strlib.o

إنشاء مكتبة ساكنة

يجمع برنامج الأرشفة ar ملفات الكائنات في أرشيف .a. والاسم المتعارف عليه هو lib<name>.a.

تعني الرايات: r الإدراج، وc الإنشاء عند الحاجة، وs كتابة فهرس.

ar rcs libmymath.a mathlib.o strlib.o

ربط مكتبة ساكنة

استخدم -L لتحديد مجلد البحث، و-l لتحديد اسم المكتبة، مع حذف البادئة lib واللاحقة .a.

يُنسخ الكود المطلوب داخل الملف التنفيذي، الذي يعمل بعد ذلك بشكل مستقل.

gcc main.c -L. -lmymath -o app

مقايضات الربط الساكن

الربط الساكن بسيط ومكتفٍ ذاتيًا:

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

كود مستقل عن الموضع

يمكن تحميل المكتبات المشتركة في أي عنوان للذاكرة، لذا يجب أن يكون كودها مستقلًا عن الموضع. ترجم باستخدام -fPIC.

ينشئ هذا كودًا يستخدم العنونة النسبية بدلًا من العناوين الثابتة.

gcc -fPIC -c mathlib.c -o mathlib.o
gcc -fPIC -c strlib.c -o strlib.o

إنشاء مكتبة مشتركة

أنشئ ملف .so باستخدام -shared. والاسم المتعارف عليه هو lib<name>.so.

وعلى خلاف الأرشيف الساكن، فهذا كائن مربوط فعليًا يمكن للمحمّل تعيينه في الذاكرة وقت التشغيل.

gcc -shared mathlib.o strlib.o -o libmymath.so

ربط مكتبة مشتركة

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

يبقى الملف التنفيذي صغيرًا، لكنه يعتمد الآن على العثور على libmymath.so وقت التشغيل.

gcc main.c -L. -lmymath -o app

العثور على المكتبة وقت التشغيل

عند بدء التشغيل، يبحث المحمّل الديناميكي عن ملف .so في المسارات القياسية. ولا يكون الملف الموجود في المجلد الحالي ضمن تلك القائمة.

ولأغراض الاختبار، وجّه المحمّل إليه باستخدام LD_LIBRARY_PATH في Linux.

LD_LIBRARY_PATH=. ./app

مقايضات المكتبات المشتركة

تستبدل المكتبات المشتركة البساطة بالمرونة:

  • تُشارك نسخة واحدة في الذاكرة بين برامج متعددة، مما يوفر الذاكرة العشوائية ومساحة القرص
  • يستفيد كل برنامج من إصلاح الخطأ في ملف .so دون إعادة الربط
  • لكن يفشل البرنامج في بدء التشغيل إذا كان ملف .so مفقودًا أو غير متوافق

وهذا الخطر الأخير هو ما يُعرف تقليديًا باسم 'جحيم الاعتماديات'.

فحص الاعتماديات

تساعدك أداتان على معرفة الملفات الثنائية التي يرتبط بها برنامج ما:

  • يسرد ldd app المكتبات المشتركة التي سيحتاج إليها المحمّل وقت التشغيل
  • يسرد nm libmymath.a الرموز (الدوال) الموجودة داخل المكتبة

إذا عرض ldd العبارة 'not found'، فلن يتمكن المحمّل من العثور على ملف .so ضمن مسار البحث.

ldd app
nm libmymath.a

تحقق سريع

طابق الراية مع الهدف.

مراجعة

أصبح بإمكانك الآن بناء كلا نوعي المكتبات وربطهما:

  • ساكنة: ar rcs libX.a *.o، يُنسخ الكود داخل الملف الثنائي، وهي مكتفية ذاتيًا لكنها أكبر حجمًا
  • مشتركة: الترجمة باستخدام -fPIC، والبناء باستخدام -shared، وتحميل الكود وقت التشغيل
  • اربط كلا النوعين باستخدام -L و-l؛ وتحتاج المكتبات المشتركة إلى مسار بحث وقت التشغيل مثل LD_LIBRARY_PATH

أصبحت الآن تملك سلسلة الأدوات الكاملة من المعالجة الأولية إلى البناء.

الأسئلة الشائعة

هل درس «المكتبات الساكنة والمشتركة» مجاني؟

نعم — نص درس «المكتبات الساكنة والمشتركة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C Academy 4 دروس في المجموع.

ماذا ستتعلم في «المكتبات الساكنة والمشتركة»؟

بناء المكتبات وربطها تتمرن على C Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C Academy؟

لا تُشترط خبرة سابقة. C Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «المكتبات الساكنة والمشتركة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C Academy هذا؟

نعم. كل درس في C Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الترجمة الشرطية
  2. مشاريع متعددة الملفات
  3. Makefiles
  4. المكتبات الساكنة والمشتركة
← العودة إلى C Academy