سؤال

يقول موطنه الأصلي ، أن الثلاثي هو ما يلي.

> gcc -dumpmachine
x86_64-suse-linux

حيث تكون CPU-Pendor-OS في المقابل X86_64 ، SUSE ، Linux. هذا الأخير يعني أن glibs قيد الاستخدام (؟). عندما أقوم بإجراء نظام التشغيل المتقاطع المستند إلى Busybux ، فإن Tripiler Tripled مثل AVR32-Linux-Uclibc ، حيث يكون نظام التشغيل "Linux-uclibc" ، مما يعني أنه يتم استخدام Uclibc.

الفرق بين "Linux-Glibc" و "Linux-uclibc" هو (AFAIU) في Collect2 سلوك ومحتوى libgcc.a. إما glibc أو uclibs مرتبطة بصمت بالثنائي المستهدف.

الأسئلة هي كيف يتم تجميع kernel Linux من قبل المترجمين نفسها؟ بمجرد أن يعمل kernel على المعدن العاري ، يجب ألا يتم ربطه بأي نوع من أنواع المساحة الخاصة بالمستخدم ، ويجب استخدام libgcc.a المناسبة

هل كانت مفيدة؟

المحلول

لدى GCC كل أنواع الخيارات للتحكم في كيفية عملها. إليكم بعض الأشياء ذات الصلة:

  • -nostdlib لحذف الارتباط بالمكتبات القياسية ورمز بدء التشغيل
  • -nostdinc لحذف البحث عن ملفات الرأس في المواقع القياسية.
  • -ffreestanding لتجميع بيئة قائمة بذاتها (مثل نواة)

أنت أيضًا لا تحتاج إلى استخدام GCC للربط. يمكنك استدعاء الرابط مباشرة ، وتزويده بخريطة الرابط الخاصة بك ، ورمز كائن بدء التشغيل ، وأي شيء آخر تحتاجه.

يبدو أن بناء Kernel Linux ، لأسباب تعسفية لعدم الاستخدام -ffreestanding ، يتحكم في مرحلة الارتباط ، ويضمن ربط kernel دون سحب أي رمز مساحة المستخدمين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top