Mohssen A Mohssen نشر 19 نوفمبر 2021 أرسل تقرير نشر 19 نوفمبر 2021 قرأت أن كل برامج ++C يتم ترجمتها من خلال Compiler إلى لغة الآلة ومن ثم قرأت عن الـ linker لكن لم أفهم دورة أو ما هو بشكل محدد، هل يمكن إستخدام الـ linker مكان المترجم compiler؟ وما الفرق بينهما؟ 1 اقتباس
2 سامح أشرف نشر 19 نوفمبر 2021 أرسل تقرير نشر 19 نوفمبر 2021 عندما تقوم بعمل برنامج بلغة ++C أو C فإن هذا البرنامج يتحتوي على الأكواد مقسمة لأكثر من ملف، حتى وإن كان البرنامج موجود في ملف واحد مثل main.cpp فإنك تستعمل المكتبات القياسية الخاصة باللغة Standard Libraries لعميات الإدخال والطباعة مثل iostream ، ويقوم المترجم بترجمة أكواد كل ملف على حدى إلى لغة الآلة التي يفهمها المعالج ويكون الناتج عبارة عن ملف يسمى object file أو object code، ويكون هذا الملف بنفس اسم ملف ++C ولكن بصيغة مختلفة مثل main.o أو main.obj (أو بدون صيغة على الإطلاق في بعض الأحيان). عند الإنتهاء من الخطوة السابقة يكون لدينا مجموعة من الملفات object files ، وهنا يأتي دور الـ linker حيث يقوم بربط هذه الملفات معًا بالترتيب الذي يحتاجه البرنامج، فعلى سبيل المثال يقوم المُجمع linker بإضافة أكواد المكتبات القياسية المستخدمة في البداية، ثم يبدأ في إضافة الملفات حسب وقت إستدعائها من دالة main ومن ثم الدوال الفرعية، ويكون الناتج من هذه العملية ملف واحد قابل للتشغيل (مثل ملفات exe في ويندوز)، وبالتالي في كل برامج ++C يتم إستخدام كلًا من المصرف (المترجم) compiler وكذلك المجمع linker معًا، وتحتوي أغلب بيئات التطوير IDE على compiler و linker وتتم عملية التصريف والتجميع بشكل تلقائي بدون تدخل مباشر (في أغلب الأحيان) من المطور. ملاحظة: لا توجد صيغة extension للملفات القابلة للتنفيذ مثل exe في أنظمة Linux ويمكن أن تستخدم أي صيغة تريد. يوجد نوعين من المجمع linker الأول يسمى static linker (أو Linker كإختصار) وهو الذي يتم إستخدامه في ربط الملفات الناتجة عن عملية التصريف التي قام بها المترجم compiler، والنوع الثاني موجود في أغلب أنظمة التشغيل ويسمى dynamic linker ويقوم هذا المجمع بربط بعض المكتبات الموجودة في نظام التشغيل بشكل مسبق (ملفات تنتهي بالصيغة dll أو so .. إلخ) أثناء وقت التشغيل runtime. يمكنك الإطلاع على هذه المقالة هنا، حيث تشرح كيفية تصريف برامج ++C وكيفية القيام بذلك من خلال سطر الأوامر أو من خلال أشهر البرامج مثل Visual Studio و Code:Blocks: 3 1 اقتباس
1 Ali Haidar Ahmad نشر 20 نوفمبر 2021 أرسل تقرير نشر 20 نوفمبر 2021 إضافةً لما تم ذكره من خلال سامح، هنا تجد الفروق الرئيسية: 1. تتجلى الوظيفة الرئيسية ل Linker في توليد ملفات قابلة للتنفيذ (executable files). في حين أن الهدف الرئيسي من Loader هو تحميل الملفات القابلة للتنفيذ إلى الذاكرة الرئيسية. 2. يأخذ الرابط linker مدخلات كود الكائن الذي تم إنشاؤه بواسطة المترجم / المجمّع. ويقوم المُحمل loader بأخذ مدخلات الملفات القابلة للتنفيذ التي تم إنشاؤها بواسطة الرابط linker. 3. يمكن تعريف الارتباط Linking على أنه عملية دمج أجزاء مختلفة من الأكواد وكود المصدر للحصول على كود قابل للتنفيذ (executable code). ويمكن تعريف التحميل Loading على أنه عملية تحميل أكواد قابلة للتنفيذ إلى الذاكرة الرئيسية من أجل التنفيذ. 4. الروابط من نوعين: محرر الروابط والرابط الديناميكي. اللوادر من 4 أنواع: مطلق Absolute ، نقل Relocating، ربط مباشر Direct Linking، تمهيد Bootstrap. 5. استخدام آخر للرابط هو الجمع بين جميع وحدات الكائن. بينما الُمحمل يساعد في تخصيص العنوان address للأكواد/ الملفات القابلة للتنفيذ. 6. الرابط مسؤول أيضًا عن ترتيب الكائنات في مفضاء عنونةالبرنامج (address space). والمُحمل مسؤول أيضاً عن ضبط المراجع (references) المستخدمة داخل البرنامج. 2 اقتباس
0 Konteryako Stayzito نشر 4 يناير 2023 أرسل تقرير نشر 4 يناير 2023 ✨بعدالتحيه✨اولا:-لايمكن استخدام لينكر ⚙️مكان المترجم كومبيلر🏗ثانيآ:-الفرق بينهما ان الاول يساعدك في الربط بين تسويق منتجاتك بينك وبين التواصل الاجتماعي🏪اما الثاني فهو كما ذكرت وقلت عليه بأنه مترجم🔚✨وشكرآ⛩اتمني الافاده🆘♿️ اقتباس
السؤال
Mohssen A Mohssen
قرأت أن كل برامج ++C يتم ترجمتها من خلال Compiler إلى لغة الآلة ومن ثم قرأت عن الـ linker لكن لم أفهم دورة أو ما هو بشكل محدد، هل يمكن إستخدام الـ linker مكان المترجم compiler؟ وما الفرق بينهما؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.