Scroll to navigation

LD(1) أدوات تطوير جنو LD(1)

الاسم

ld - رابط GNU

موجز

ld [options] objfile ...

الوصف

ld يجمع عدداً من ملفات الكائنات والأرشيف، ويعيد توطين بياناتها ويربط مراجع الرموز. عادة ما تكون الخطوة الأخيرة في ترجمة البرنامج هي تشغيل ld.

يقبل ld ملفات لغة أوامر الرابط (Linker Command Language) المكتوبة بمجموعة عليا من بنية لغة أوامر محرر الروابط الخاصة بـ AT&T's، لتوفير تحكم صريح وكامل في عملية الربط.

لا تصف صفحة الدليل هذه لغة الأوامر؛ انظر مدخلة ld في "info" لمزيد من التفاصيل حول لغة الأوامر والجوانب الأخرى لموصل GNU.

يستخدم هذا الإصدار من ld مكتبات BFD العامة للعمل على ملفات الكائنات. يسمح هذا لـ ld بقراءة ملفات الكائنات وجمعها وكتابتها بتنسيقات عديدة مختلفة --- على سبيل المثال، COFF أو "a.out". يمكن وصل تنسيقات مختلفة معًا لإنتاج أي نوع متاح من ملفات الكائنات.

إلى جانب مرونته، يعد واصل GNU أكثر نفعاً من الواصلات الأخرى في تقديم معلومات التشخيص. العديد من الواصلات تتخلى عن التنفيذ مباشرة عند مواجهة خطأ؛ بينما يستمر ld في التنفيذ كلما أمكن ذلك، مما يتيح لك تحديد أخطاء أخرى (أو في بعض الحالات، الحصول على ملف مخرج رغم وجود الخطأ).

رابط غنو (GNU linker) ld مخصص لتغطية مجموعة واسعة من الحالات، وليكون متوافقًا قدر الإمكان مع الروابط الأخرى. نتيجة لذلك، لديك العديد من الخيارات للتحكم في سلوكه.

الخيارات

يدعم الرابط وفرة من خيارات سطر الأوامر، ولكن في الممارسة الفعلية يُستخدم القليل منها في أي سياق معين. على سبيل المثال، الاستخدام الشائع لـ ld هو ربط ملفات الكائنات القياسية في يونكس على نظام يونكس قياسي ومدعوم. في مثل هذا النظام، لربط ملف "hello.o":

        ld -o <output> /lib/crt0.o hello.o -lc

يخبر هذا ld بإنتاج ملف يسمى output كنتيجة لوصل الملف "/lib/crt0.o" بـ "hello.o" والمكتبة "libc.a"، والتي ستأتي من أدلة البحث القياسية. (انظر نقاش خيار -l أدناه).

يمكن تحديد بعض خيارات سطر الأوامر لـ ld في أي نقطة من سطر الأوامر. ومع ذلك، فإن الخيارات التي تشير إلى ملفات، مثل -l أو -T، تتسبب في قراءة الملف في النقطة التي يظهر فيها الخيار في سطر الأوامر، بالنسبة إلى ملفات الكائنات وخيارات الملفات الأخرى. إن تكرار الخيارات التي لا تتعلق بالملفات بوسيط مختلف لن يكون له تأثير إضافي، أو سيتجاوز التكرارات السابقة (تلك الموجودة في أقصى اليسار في سطر الأوامر) لهذا الخيار. الخيارات التي يمكن تحديدها أكثر من مرة بشكل مفيد مذكورة في الأوصاف أدناه.

الوسائط التي ليست خيارات هي ملفات كائنية أو أرشيفات سيجري ربطها معًا. قد تتبع خيارات سطر الأمر، أو تسبقها، أو تختلط بها، باستثناء أنه لا يجوز وضع وسيط ملف كائني بين خيار ووسيطه.

عادة ما يُستدعى الموصل بملف كائن واحد على الأقل، ولكن يمكنك تحديد أشكال أخرى من ملفات المدخلات الثنائية باستخدام -l و -R ولغة أوامر المخطط. إذا لم يُحدد أي ملف مدخلات ثنائي على الإطلاق، فلن ينتج الموصل أي مخرجات، ويُصدر الرسالة No input files.

إذا لم يتمكن الرابط من التعرف على تنسيق ملف الكائن، فسيفترض أنه نص رابط (linker script). النص البرمجي المحدد بهذه الطريقة يعزز نص الرابط الرئيسي المستخدم للربط (إما نص الرابط الافتراضي أو النص المحدد باستخدام -T). تسمح هذه الميزة للرابط بالربط مع ملف يبدو وكأنه كائن أو أرشيف، ولكنه في الواقع يحدد فقط بعض قيم الرموز، أو يستخدم "INPUT" أو "GROUP" لتحميل كائنات أخرى. تحديد نص برمجي بهذه الطريقة يعزز فقط نص الرابط الرئيسي، مع وضع الأوامر الإضافية بعد النص الرئيسي؛ استخدم الخيار -T لاستبدال نص الرابط الافتراضي بالكامل، ولكن لاحظ تأثير أمر "INSERT".

للخيارات التي تتكون أسماؤها من حرف واحد، يجب أن تتبع وسائط الخيار حرف الخيار دون مسافة بيضاء، أو تُعطى كوسائط منفصلة مباشرة بعد الخيار الذي يتطلبها.

بالنسبة للخيارات التي تتكون أسماؤها من أحرف متعددة، يمكن أن تسبق اسم الخيار إما شرطة واحدة أو شرطتان؛ على سبيل المثال، -trace-symbol و --trace-symbol متكافئان. ملاحظة---هناك استثناء واحد لهذه القاعدة. الخيارات متعددة الأحرف التي تبدأ بحرف 'o' صغير لا يمكن أن تسبقها إلا شرطتان. هذا لتقليل الالتباس مع خيار -o. فعلى سبيل المثال، يضبط -omagic اسم ملف المخرج إلى magic بينما يضبط --omagic علامة NMAGIC على المخرج.

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

ملاحظة---إذا كان يتم استدعاء الرابط بشكل غير مباشر، عبر مشغل مصرّف (مثل gcc) فيجب أن تُسبق جميع خيارات سطر أوامر الرابط بـ -Wl, (أو ما هو مناسب لمشغل مصرّف معين) بهذا الشكل:

          gcc -Wl,--start-group foo.o bar.o -Wl,--end-group

هذا أمر مهم، لأنه بخلاف ذلك قد يسقط برنامج مشغل المترجم خيارات الرابط بصمت، مما يؤدي إلى ربط سيئ. قد يحدث ارتباك أيضًا عند تمرير خيارات تتطلب قيمًا عبر المشغل، حيث يعمل استخدام مسافة بين الخيار والمعامل كفاصل، ويؤدي بالمشغل إلى تمرير الخيار فقط إلى الرابط والمعامل إلى المترجم. في هذه الحالة، من الأبسط استخدام الأشكال المتصلة لكل من الخيارات ذات الحرف الواحد والمتعددة الأحرف، مثل:

          gcc foo.o bar.o -Wl,-eENTRY -Wl,-Map=a.map

إليك جدول بمفاتيح سطر الأوامر العامة التي يقبلها رابط GNU:

@الملف
اقرأ خيارات سطر الأوامر من file. تُدرج الخيارات المقروءة مكان خيار @file الأصلي. إذا كان file غير موجود، أو لا يمكن قراءته، فسيُعامل الخيار حرفيًا ولن يُزال.

تُفصل الخيارات في file بمسافات فارغة. يمكن تضمين حرف مسافة فارغة في خيار ما عن طريق إحاطة الخيار بالكامل إما بعلامات اقتباس مفردة أو مزدوجة. يمكن تضمين أي حرف (بما في ذلك الشرطة المائلة العكسية) عن طريق سبق الحرف المراد تضمينه بشرطة مائلة عكسية. يمكن لـ file نفسه أن يحتوي على خيارات @file إضافية؛ وتُعالج أي خيارات من هذا القبيل بشكل متكرر (recursively).

هذا الخيار مدعوم من أجل التوافقية مع HP/UX. يجب أن يكون معطى keyword أحد السلاسل archive أو shared أو default. خيار -aarchive يكافئ وظيفيًا -Bstatic، والكلمتان المفتاحيتان الأخريان تكافئان وظيفيًا -Bdynamic. يمكن استخدام هذا الخيار أي عدد من المرات.
أضف AUDITLIB إلى مدخل "DT_AUDIT" في القسم الديناميكي. لا يُتحقق من وجود AUDITLIB، ولن يستخدم DT_SONAME المحدد في المكتبة. إذا حُدد عدة مرات سيحتوي "DT_AUDIT" على قائمة مفصولة بنقطتين لواجهات التدقيق المراد استخدامها. إذا وجد الرابط كائناً به مدخل تدقيق أثناء البحث عن المكتبات المشتركة، فسيضيف مدخل "DT_DEPAUDIT" مطابقاً في ملف المخرجات. هذا الخيار مفيد فقط على منصات ELF التي تدعم واجهة rtld-audit.
قد يُضبط ld لدعم أكثر من نوع من ملفات الكائنات. إذا ضُبط ld الخاص بك بهذه الطريقة، فيمكنك استخدام الخيار -b لتحديد التنسيق الثنائي لملفات كائنات المدخلات التي تلي هذا الخيار في سطر الأوامر. حتى عندما يُضبط ld لدعم تنسيقات كائنات بديلة، فلا تحتاج عادةً لتحديد هذا، حيث ينبغي ضبط ld ليتوقع كتنسيق مدخلات مبدئي التنسيق الأكثر شيوعاً على كل حاسوب. input-format هو سلسلة نصية، وهي اسم تنسيق معين تدعمه مكتبات BFD. (يمكنك سرد التنسيقات الثنائية المتاحة باستخدام objdump -i.)

قد ترغب في استخدام هذا الخيار إذا كنت تربط ملفات بتنسيق ثنائي غير معتاد. يمكنك أيضًا استخدام -b لتبديل التنسيقات صراحةً (عند ربط ملفات كائنية ذات تنسيقات مختلفة)، وذلك بتضمين -b input-format قبل كل مجموعة من الملفات الكائنية في تنسيق معين.

يؤخذ التنسيق الافتراضي من متغير البيئة "GNUTARGET".

يمكنك أيضًا تحديد تنسيق الإدخال من نص برمجي، باستخدام الأمر "TARGET"؛

للتوافق مع الروابط الناتجة عن MRI، يقبل ld ملفات البرامج النصية المكتوبة بلغة أوامر بديلة ومقيدة، مشروحة في قسم ملفات البرامج النصية المتوافقة مع MRI في وثائق GNU ld. قدم ملفات نصوص MRI بالخيار -c؛ استخدم الخيار -T لتشغيل نصوص الرابط المكتوبة بلغة البرمجة النصية ld العامة. إذا كان MRI-cmdfile غير موجود، يبحث ld عنه في المجلدات المحددة بأي من خيارات -L.
هذه الخيارات الثلاثة متكافئة؛ وتُدعم أشكال متعددة للتوافق مع الروابط الأخرى. وهي تخصص مساحة للرموز المشتركة حتى إذا حُدد ملف خرج قابل لإعادة التوطين (باستخدام -r). أمر السكريبت "FORCE_COMMON_ALLOCATION" له نفس التأثير.
أضف AUDITLIB إلى مدخل "DT_DEPAUDIT" في القسم الديناميكي. لا يُتحقق من وجود AUDITLIB، ولن يستخدم DT_SONAME المحدد في المكتبة. إذا حُدد عدة مرات سيحتوي "DT_DEPAUDIT" على قائمة مفصولة بنقطتين لواجهات التدقيق المراد استخدامها. هذا الخيار مفيد فقط على منصات ELF التي تدعم واجهة rtld-audit. خيار -P مقدم للتوافق مع Solaris.
يفعل توجيه نص الرابط "LINKER_VERSION"، الموصوف في Output Section Data. إذا تم استخدام هذا التوجيه في نص رابط وتم تفعيل هذا الخيار، فسيتم إدراج سلسلة نصية تحتوي على إصدار الرابط في النقطة الحالية.

ملاحظة - موقع هذا الخيار في سطر أوامر الرابط مهم. سيؤثر فقط على سكريبتات الرابط التي تأتي بعده في سطر الأوامر، أو تلك المدمجة في الرابط.

يعطّل توجيه سكريبت الرابط "LINKER_VERSION"، بحيث لا يدرج سلسلة نصية للإصدار. هذا هو الوضع المبدئي.
يتجنب هذا الخيار توليد خطأ إذا لم يتناسب قسم المدخلات مع قسم مخرجات مطابق. يحاول الموصل تخصيص قسم المدخلات لأقسام مخرجات مطابقة لاحقة، ولا يولد خطأ إلا إذا لم يكن هناك قسم مخرجات كبير بما يكفي. هذا مفيد عندما تتوفر عدة مناطق ذاكرة غير متجاورة ولا يتطلب قسم المدخلات منطقة محددة. الترتيب الذي تُقيم به أقسام المدخلات لا يتغير، على سبيل المثال:

          MEMORY {
            MEM1 (rwx) : ORIGIN = 0x1000, LENGTH = 0x14
            MEM2 (rwx) : ORIGIN = 0x1000, LENGTH = 0x40
            MEM3 (rwx) : ORIGIN = 0x2000, LENGTH = 0x40
          }
          SECTIONS {
            mem1 : { *(.data.*); } > MEM1
            mem2 : { *(.data.*); } > MEM2
            mem3 : { *(.data.*); } > MEM3
          }
       
          بأقسام المدخلات:
          .data.1: size 8
          .data.2: size 0x10
          .data.3: size 4
       
          ينتج عنها تأثر .data.1 بـ mem1، وتأثر .data.2 و .data.3
          بـ mem2، على الرغم من أن .data.3 ستناسب mem3.
    

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

يُمكّن هذا الخيار التحذيرات عندما يسمح "--enable-non-contiguous-regions" بمطابقات غير متوقعة محتملة في تعيين الأقسام، مما قد يؤدي إلى تجاهل قسم بصمت بدلاً من الفشل لعدم ملاءمته لأي منطقة مخرجات.
استخدم entry كرمز صريح لبدء تنفيذ برنامجك، بدلًا من نقطة الدخول المبدئية. إذا لم يكن هناك رمز باسم entry، سيحاول الرابط تحليل entry كرقم، واستخدامه كعنوان دخول (سيُفسر الرقم بالأساس 10؛ يمكنك استخدام بادئة 0x للأساس 16، أو بادئة 0 للأساس 8). بالنسبة لـ i386 PE، يمكن أن يكون entry أيضًا اسم الوظيفة الأصلي (بدون الشرطة السفلية البادئة و/أو stdcall اللاحق @number عند الاقتضاء).
يحدد قائمة بمكتبات الأرشيف التي ينبغي عدم تصدير رموزها تلقائياً. يمكن فصل أسماء المكتبات بفواصل أو نقطتين رأسيين. يؤدي تحديد "--exclude-libs ALL" إلى استبعاد الرموز في جميع مكتبات الأرشيف من التصدير التلقائي. هذا الخيار متاح فقط لإصدار الرابط المستهدف لـ i386 PE وللإصدارات المستهدفة لـ ELF. بالنسبة لـ i386 PE، تظل الرموز المدرجة صراحة في ملف .def مُصدرة بغض النظر عن هذا الخيار. بالنسبة للإصدارات المستهدفة لـ ELF، سيتم التعامل مع الرموز المتأثرة بهذا الخيار على أنها مخفية.
يحدد قائمة بملفات الكائنات أو أعضاء الأرشيف، والتي لا ينبغي تصدير رموزها آلياً، ولكن ينبغي نسخها بالجملة إلى مكتبة الاستيراد التي تُولد أثناء الربط. قد تُفصل أسماء الوحدات بفاصلات أو نقطتين رأسيتين، ويجب أن تطابق تماماً أسماء الملفات المستخدمة بواسطة ld لفتح الملفات؛ بالنسبة لأعضاء الأرشيف، هذا مجرد اسم العضو، ولكن بالنسبة لملفات الكائنات، يجب أن يتضمن الاسم المدرج ويطابق بدقة أي مسار استُخدم لتحديد ملف المدخلات في سطر أوامر الرابط. يتوفر هذا الخيار فقط لمنفذ i386 PE المستهدف للرابط. الرموز المدرجة صراحة في ملف .def ستُصدر بالرغم من هذا الخيار.
عند إنشاء ملف تنفيذي مربوط ديناميكيًا، يؤدي استخدام خيار -E أو خيار --export-dynamic إلى قيام المرابط بإضافة كافة الرموز إلى جدول الرموز الديناميكي. جدول الرموز الديناميكي هو مجموعة الرموز التي يمكن رؤيتها من الكائنات الديناميكية في وقت التشغيل.

إذا لم تستخدم أيًا من هذين الخيارين (أو استخدمت الخيار --no-export-dynamic لاستعادة السلوك الافتراضي)، فسيحتوي جدول الرموز الديناميكي عادةً فقط على تلك الرموز التي يشار إليها بواسطة كائن ديناميكي مذكور في عملية الربط.

إذا كنت تستخدم "dlopen" لتحميل كائن ديناميكي يحتاج إلى الإشارة إلى الرموز المعرفة بواسطة البرنامج نفسه، بدلاً من كائن ديناميكي آخر، فمن المحتمل أنك ستحتاج إلى استخدام هذا الخيار عند ربط البرنامج نفسه.

يمكنك أيضًا استخدام القائمة الديناميكية للتحكم في الرموز التي يجب إضافتها إلى جدول الرموز الديناميكي إذا كان تنسيق المخرجات يدعم ذلك. انظر وصف --dynamic-list.

لاحظ أن هذا الخيار خاص بالمنافذ التي تستهدف ELF. تدعم أهداف PE وظيفة مماثلة لتصدير جميع الرموز من DLL أو EXE؛ راجع وصف --export-all-symbols أدناه.

عند إنشاء ملف تنفيذي مربوط ديناميكيًا، ستُضاف الرموز المطابقة لـ glob إلى جدول الرموز الديناميكي. عند إنشاء مكتبة مشتركة، لن تُربط الإشارات إلى الرموز المطابقة لـ glob بالتعريفات داخل المكتبة المشتركة. لا يؤدي هذا الخيار أي وظيفة عند إنشاء مكتبة مشتركة ما لم يُحدد -Bsymbolic أو --dynamic-list. هذا الخيار ذو معنى فقط على منصات ELF التي تدعم المكتبات المشتركة.
تحديد --export-dynamic-symbol لكل نمط في الملف. تنسيق الملف هو نفسه عقدة الإصدار بدون النطاق واسم العقدة. انظر VERSION لمزيد من المعلومات.
ربط كائنات big-endian. يؤثر هذا على تنسيق المخرجات المبدئي.
ربط كائنات little-endian. يؤثر هذا على تنسيق المخرجات المبدئي.
عند إنشاء كائن ELF مشترك، اضبط حقل DT_AUXILIARY الداخلي على الاسم المحدد. يخبر هذا المرابط الديناميكي بوجوب استخدام جدول رموز الكائن المشترك كمرشح مساعد على جدول رموز الكائن المشترك name.

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

قد يُحدد هذا الخيار أكثر من مرة. ستُنشأ مدخلات DT_AUXILIARY بالترتيب الذي تظهر به في سطر الأوامر.

عند إنشاء كائن ELF مشترك، اضبط حقل DT_FILTER الداخلي على الاسم المحدد. يخبر هذا المرابط الديناميكي بوجوب استخدام جدول رموز الكائن المشترك الذي يجري إنشاؤه كمرشح على جدول رموز الكائن المشترك name.

إذا قمت لاحقاً بربط برنامج مقابل كائن الفلتر هذا، فعند تشغيل البرنامج، سيرى الرابط الديناميكي حقل DT_FILTER. سيقوم الرابط الديناميكي بحل الرموز وفقاً لجدول رموز كائن الفلتر كالمعتاد، ولكنه سيرتبط فعلياً بالتعاريف الموجودة في الكائن المشترك name. وبالتالي يمكن استخدام كائن الفلتر لتحديد مجموعة فرعية من الرموز التي يوفرها الكائن name.

استخدمت بعض الروابط القديمة الخيار -F عبر سلسلة أدوات الترجمة لتحديد تنسيق ملف الكائنات لكل من ملفات الكائنات المدخلة والمخرجة. يستخدم رابط GNU آليات أخرى لهذا الغرض: الخيارات -b و --format و --oformat، والأمر "TARGET" في سكربتات الرابط، ومتغير البيئة "GNUTARGET". سيتجاهل رابط GNU الخيار -F عندما لا يقوم بإنشاء كائن ELF مشترك.

عند إنشاء ملف تنفيذي ELF أو كائن مشترك، استدعِ NAME عند تفريغ الملف التنفيذي أو الكائن المشترك، وذلك بضبط DT_FINI على عنوان الوظيفة. مبدئيًا، يستخدم المرابط "_fini" كالوظيفة المطلوب استدعاؤها.
مُتجاهَل. متوفر للتوافق مع الأدوات الأخرى.
اضبط الحد الأقصى لحجم الكائنات المراد تحسينها باستخدام سجل GP لتكون size. هذا ذو معنى فقط لتنسيقات ملفات الكائنات مثل MIPS ELF التي تدعم وضع الكائنات الكبيرة والصغيرة في أقسام مختلفة. يُتجاهل هذا في تنسيقات ملفات الكائنات الأخرى.
عند إنشاء كائن ELF مشترك، اضبط حقل DT_SONAME الداخلي على الاسم المحدد. عندما يربط ملف تنفيذي بكائن مشترك له حقل DT_SONAME، فعند تشغيل الملف التنفيذي سيحاول المرابط الديناميكي تحميل الكائن المشترك المحدد بحقل DT_SONAME بدلاً من استخدام اسم الملف المعطى للمرابط.
أجرِ ربطاً تزايدياً (مثل الخيار -r).
عند إنشاء ملف تنفيذي ELF أو كائن مشترك، استدعِ NAME عند تحميل الملف التنفيذي أو الكائن المشترك، وذلك بضبط DT_INIT على عنوان الوظيفة. مبدئيًا، يستخدم المرابط "_init" كالوظيفة المطلوب استدعاؤها.
أضف الأرشيف أو ملف الكائن المحدد بواسطة namespec إلى قائمة الملفات المطلوب ربطها. يمكن استخدام هذا الخيار أي عدد من المرات. إذا كان namespec على شكل :filename، سيبحث ld في مسار المكتبة عن ملف يسمى filename، وإلا سيبحث في مسار المكتبة عن ملف يسمى libnamespec.a.

في الأنظمة التي تدعم المكتبات المشتركة، قد يبحث ld أيضًا عن ملفات بخلاف libnamespec.a. تحديدًا، في أنظمة ELF و SunOS، سيبحث ld في دليل عن مكتبة تسمى libnamespec.so قبل البحث عن واحدة تسمى libnamespec.a. (اصطلاحًا، تشير اللاحقة ".so" إلى مكتبة مشتركة). لاحظ أن هذا السلوك لا ينطبق على :filename، الذي يحدد دائمًا ملفًا يسمى filename.

سيبحث الرابط في الأرشيف مرة واحدة فقط، في الموقع الذي حُدد فيه على سطر الأوامر. إذا كان الأرشيف يعرف رمزاً كان غير محدد في كائن ظهر قبل الأرشيف على سطر الأوامر، فسيقوم الرابط بتضمين الملف (أو الملفات) المناسبة من الأرشيف. ومع ذلك، فإن الرمز غير المحدد في كائن يظهر لاحقاً على سطر الأوامر لن يجعل الرابط يبحث في الأرشيف مرة أخرى.

انظر الخيار -( لأسلوب يجبر الموصل على البحث في الأرشيفات عدة مرات.

يمكنك إدراج الأرشيف ذاته عدة مرات في سطر الأوامر.

هذا النوع من البحث في الأرشيفات قياسي لموصلات Unix. ومع ذلك، إذا كنت تستخدم ld على AIX، فلاحظ أنه يختلف عن سلوك موصل AIX.

أضف مسار searchdir إلى قائمة المسارات التي سيبحث فيها ld عن مكتبات الأرشيف وسكربتات التحكم ld. يمكنك استخدام هذا الخيار أي عدد من المرات. تُبحث الأدلة بالترتيب الذي حُددت به في سطر الأوامر. تُبحث الأدلة المحددة في سطر الأوامر قبل الأدلة المبدئية. تنطبق جميع خيارات -L على جميع خيارات -l، بغض النظر عن الترتيب الذي تظهر به الخيارات. لا تؤثر خيارات -L على كيفية بحث ld عن سكربت الرابط ما لم يُحدد خيار -T.

إذا بدأ searchdir بـ "=" أو $SYSROOT، فسيُستبدل هذا البادئة بـ sysroot prefix، المتحكم فيه عبر خيار --sysroot، أو المحدد عند ضبط الرابط.

تعتمد مجموعة المسارات الافتراضية التي يتم البحث فيها (دون تحديدها باستخدام -L) على وضع المحاكاة الذي يستخدمه ld، وفي بعض الحالات تعتمد أيضًا على كيفية إعداده.

يمكن أيضاً تحديد المسارات في سكريبت ربط باستخدام أمر "SEARCH_DIR". الدلائل المحددة بهذه الطريقة يُبحث فيها عند النقطة التي يظهر فيها سكريبت الرابط في سطر الأوامر.

حاكي رابط emulation. يمكنك سرد المحاكيات المتاحة باستخدام خياري --verbose أو -V.

إذا لم يتم استخدام الخيار -m، يتم أخذ المحاكاة من متغير البيئة "LDEMULATION"، إذا كان معرفًا.

وإلا، تعتمد المحاكاة المبدئية على كيفية ضبط الرابط.

تسمح هذه الخيارات بتغيير أسماء ملفات الإدخال قبل أن يحاول الرابط فتحها. سيؤدي الخيار --remap-inputs=foo.o=bar.o إلى أن تحاول أي محاولة لتحميل ملف يسمى foo.o بدلاً من ذلك تحميل ملف يسمى bar.o. يُسمح بأنماط البدل في اسم الملف الأول، لذا فإن --remap-inputs=foo*.o=bar.o سيعيد تسمية أي ملف إدخال يطابق foo*.o إلى bar.o.

يسمح شكل بديل للخيار --remap-inputs-file=filename بقراءة عمليات إعادة التعيين من ملف. يمكن أن يحتوي كل سطر في الملف على عملية إعادة تعيين واحدة. تُتجاهل الأسطر الفارغة. يُعتبر أي شيء من محرف الهاش (#) حتى نهاية السطر تعليقاً ويُتجاهل أيضاً. يمكن فصل نمط التعيين عن اسم الملف بمسافة بيضاء أو بمحرف التساوي (=).

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

إذا كان اسم ملف الاستبدال هو /dev/null أو مجرد NUL، فإن إعادة التعيين ستؤدي فعلياً إلى تجاهل ملف الدخل. يمكن أن تكون هذه طريقة ملائمة لتجربة إزالة ملفات الدخل من بيئة بناء معقدة.

لاحظ أن هذا الخيار يعتمد على الموضع ويؤثر فقط على أسماء الملفات التي تأتي بعده في سطر الأوامر. هكذا:

          ld foo.o --remap-inputs=foo.o=bar.o
    

لن يكون له أي تأثير، بينما:

          ld --remap-inputs=foo.o=bar.o foo.o
    

سيُغير اسم ملف المدخل foo.o إلى bar.o.

ملاحظة - تؤثر هذه الخيارات أيضًا على الملفات المشار إليها ببيانات INPUT في سكريبتات الرابط. ولكن بما أن سكريبتات الرابط تُعالج بعد قراءة سطر الأوامر بالكامل، فإن موقع خيارات إعادة التعيين (remap) على سطر الأوامر ليس له أهمية.

إذا تم تفعيل خيار verbose، فسيتم الإبلاغ عن أي تعيينات متطابقة، مع العلم أنه يجب تفعيل خيار verbose في سطر الأوامر قبل ظهور أسماء الملفات المعاد تعيينها.

إذا تم تفعيل خياري -Map أو --print-map، فسيتم تضمين قائمة إعادة التعيين في مخرجات الخريطة.

اطبع خريطة ربط في المخرج القياسي. توفر خريطة الربط معلومات حول الربط، بما في ذلك ما يلي:
  • حيث تُمثل ملفات الكائنات في الذاكرة.
  • كيفية تخصيص الرموز المشتركة.
  • كافة أعضاء الأرشيف المضمنين في الارتباط، مع ذكر الرمز الذي تسبب في جلب عضو الأرشيف.
  • القيم المسندة للرموز.

    ملاحظة - الرموز التي تُحسب قيمها بواسطة تعبير يتضمن إشارة إلى قيمة سابقة لنفس الرمز قد لا تظهر لها نتيجة صحيحة في خريطة الربط. هذا لأن الرابط يتجاهل النتائج المتوسطة ويحتفظ فقط بالقيمة النهائية للتعبير. في مثل هذه الظروف، سيعرض الرابط القيمة النهائية محاطة بأقواس مربعة. هكذا على سبيل المثال سكريبت رابط يحتوي على:

               foo = 1
               foo = foo * 4
               foo = foo + 8
        

    سينتج المخرجات التالية في خريطة الارتباط إذا استُخدم الخيار -M:

               0x00000001                foo = 0x1
               [0x0000000c]                foo = (foo * 0x4)
               [0x0000000c]                foo = (foo + 0x8)
        

    انظر Expressions لمزيد من المعلومات حول التعبيرات في سكربتات الموصل (linker).

  • كيفية دمج خصائص GNU.

    عندما يدمج المرابط أقسام note.gnu.property. للمدخلات في قسم note.gnu.property. واحد للمخرج، تُزال بعض الخصائص أو تُحدث. يُبلغ عن هذه الإجراءات في خريطة الربط. على سبيل المثال:

            أُزيلت الخاصية 0xc0000002 لدمج foo.o (0x1) و bar.o (لم يُعثر عليه)
        

    يشير هذا إلى أن الخاصية 0xc0000002 أُزيلت من المخرج عند دمج الخصائص في foo.o، الذي قيمة خاصيته 0xc0000002 هي 0x1، و bar.o، الذي لا يملك الخاصية 0xc0000002.

            حُدثت الخاصية 0xc0010001 (0x1) لدمج foo.o (0x1) و bar.o (0x1)
        

    يشير هذا إلى أن قيمة الخاصية 0xc0010001 تُحدث إلى 0x1 في الخرج عند دمج الخصائص في foo.o، التي قيمة خاصيتها 0xc0010001 هي 0x1، و bar.o، التي قيمة خاصيتها 0xc0010001 هي 0x1.

  • في بعض أهداف ELF، قائمة بالتحسينات (fixups) التي أدخلها --relax

            foo.o: Adjusting branch at 0x00000008 towards "far" in section .text
        

    يشير هذا إلى أن الفرع عند 0x00000008 في foo.o، والذي يستهدف الرمز "far" في القسم .text، قد استُبدل بـ trampoline.

اطبع (أو لا تطبع) قائمة الأقسام المهملة والتي جُمعت نفاياتها في خريطة الربط. ممكّن مبدئياً.
اطبع (أو لا تطبع) الرموز المحلية في خريطة الربط. ستتم طباعة نص (local) قبل أسماء الرموز المحلية، وسيتم إدراجها بعد جميع الرموز العالمية في قسم معين. لن يتم تضمين الرموز المحلية المؤقتة (عادةً تلك التي تبدأ بـ .L) في المخرج. معطل مبدئياً.
أوقف محاذاة الصفحات للأقسام، وعطل الربط بالمكتبات المشتركة. إذا كان تنسيق المخرجات يدعم الأرقام السحرية بأسلوب يونكس، فضع علامة على المخرجات بأنها "NMAGIC".
اجعل قسمي النص والبيانات قابلين للقراءة والكتابة. وأيضًا، لا توازن شريحة البيانات بالصفحات، وعطل الربط مع المكتبات المشتركة. إذا كان تنسيق المخرجات يدعم الأرقام السحرية بأسلوب يونكس، فميز المخرجات كـ "OMAGIC". ملاحظة: رغم أن قسم النص القابل للكتابة مسموح به لأهداف PE-COFF، إلا أنه لا يتوافق مع مواصفات التنسيق المنشورة من قبل مايكروسوفت.
ينفي هذا الخيار معظم تأثيرات الخيار -N. يضبط قسم النص ليكون للقراءة فقط، ويفرض محاذاة مقطع البيانات مع الصفحات. ملاحظة - لا يُمكّن هذا الخيار الوصل مع المكتبات المشتركة. استخدم -Bdynamic لهذا الغرض.
استخدم output كاسم للبرنامج الناتج عن ld؛ إذا لم يُحدد هذا الخيار، يُستخدم الاسم a.out مبدئيًا. يمكن لأمر السكربت "OUTPUT" أيضًا تحديد اسم ملف المخرجات.

ملاحظة - سيقوم الرابط بحذف ملف المخرجات قبل أن يبدأ في الكتابة إليه. سيفعل ذلك حتى لو تبين أنه لا يمكن إكمال الربط بسبب وجود أخطاء.

ملاحظة - سيتحقق الرابط للتأكد من أن اسم ملف المخرجات لا يطابق اسم أي من ملفات المدخلات، ولكن هذا كل شيء. وبوجه الخصوص لن يشتكي إذا كان ملف المخرجات قد يكتب فوق ملف مصدر أو ملف مهم آخر. لذلك في أنظمة البناء يوصى باستخدام الخيار -o كآخر خيار في سطر أوامر الرابط. على سبيل المثال لننظر في:

          ld -o $(EXE) $(OBJS)
          ld $(OBJS) -o $(EXE)
    

إذا لم يكن المتغير EXE معرفًا لسبب ما، فإن الإصدار الأول من أمر الرابط قد ينتهي به الأمر بحذف أحد ملفات الكائنات (الأول في قائمة OBJS) بينما سيصدر الإصدار الثاني من أمر الرابط رسالة خطأ ولن يحذف أي شيء.

يكتب dependency file إلى depfile. يحتوي هذا الملف على قاعدة مناسبة لـ "make" تصف ملف المخرج وجميع ملفات المدخلات التي قُرئت لإنتاجه. المخرج مشابه لمخرج المترجم مع -M -MP. لاحظ أنه لا يوجد خيار مثل -MM الخاص بالمترجم لاستبعاد "system files" (وهو مفهوم غير محدد بدقة في الرابط، على عكس "system headers" في المترجم). لذا فإن المخرج من --dependency-file يكون دائماً خاصاً بالحالة الدقيقة للتثبيت الذي أُنتج فيه، ولا ينبغي نسخه إلى ملفات makefile الموزعة دون تحرير دقيق.
إذا كان level قيمة عددية أكبر من الصفر، فسيقوم ld بتحسين المخرج. قد يستغرق هذا وقتاً أطول بكثير، ولذلك ربما ينبغي تمكينه فقط للثنائي النهائي. في الوقت الحالي، يؤثر هذا الخيار فقط على توليد مكتبة ELF المشتركة. قد تستفيد الإصدارات المستقبلية من الرابط أكثر من هذا الخيار. كما أنه لا يوجد حالياً فرق في سلوك الرابط لقيم مختلفة غير صفرية لهذا الخيار. ومرة أخرى، قد يتغير هذا مع الإصدارات المستقبلية.
إشراك ملحق (plugin) في عملية الربط. المعامل name هو اسم الملف المطلق للملحق. عادة ما يضاف هذا المعامل تلقائياً بواسطة المترجم (compiler) عند استخدام تحسين وقت الربط (link time optimization)، ولكن يمكن للمستخدمين أيضاً إضافة ملحقاتهم الخاصة إذا رغبوا في ذلك.

لاحظ أن موقع الملحقات الصادرة عن المصرّف يختلف عن المكان الذي تبحث فيه برامج ar و nm و ranlib عن ملحقاتها. لكي تتمكن هذه الأوامر من استخدام ملحق مستند إلى المصرّف يجب أولاً نسخه إلى دليل ${libdir}/bfd-plugins. جميع ملحقات الرابط المستندة إلى gcc متوافقة مع الإصدارات السابقة، لذا يكفي نسخ الأحدث منها فقط.

يسمح --push-state بحفظ الحالة الحالية للأعلام التي تحكم التعامل مع ملف المدخلات بحيث يمكن استعادتها جميعًا بخيار --pop-state واحد مطابق.

الخيارات المغطاة هي: -Bdynamic، و -Bstatic، و -dn، و -dy، و -call_shared، و -non_shared، و -static، و -N، و -n، و --whole-archive، و --no-whole-archive، و -r، و -Ur، و --copy-dt-needed-entries، و --no-copy-dt-needed-entries، و --as-needed، و --no-as-needed، و -a.

أحد الأهداف لهذا الخيار هو مواصفات pkg-config. عند استخدامه مع الخيار --libs، يجري سرد جميع المكتبات التي قد تكون مطلوبة ثم ربطها طوال الوقت. من الأفضل إرجاع شيء كما يلي:

        -Wl,--push-state,--as-needed -libone -libtwo -Wl,--pop-state
    
يلغي أثر --push-state، ويستعيد القيم السابقة للأعلام التي تحكم معالجة ملفات المدخلات.
تُترك أقسام ومحتويات إعادة التعيين في الملفات التنفيذية المترابطة كلياً. قد تحتاج أدوات التحليل وتحسين ما بعد الترابط إلى هذه المعلومات لإجراء تعديلات صحيحة على الملفات التنفيذية. يؤدي هذا إلى ملفات تنفيذية أكبر حجماً.

هذا الخيار مدعوم حاليًا على منصات ELF فقط.

اجبر ملف المخرجات على احتواء أقسام ديناميكية. هذا الخيار خاص بأهداف VxWorks.
يولد مخرجاً قابلاً لإعادة التوطين---أي يولد ملف مخرج يمكن بدوره أن يعمل كمدخل لـ ld. يسمى هذا غالباً partial linking. كأثر جانبي، في البيئات التي تدعم أرقام يونكس السحرية القياسية، يضبط هذا الخيار أيضاً الرقم السحري لملف المخرج إلى "OMAGIC". إذا لم يُحدد هذا الخيار، سيُنتج ملف مطلق. عند ربط برامج ++C، فإن هذا الخيار لن يحل المراجع للمنشئات (constructors)؛ للقيام بذلك، استخدم -Ur.

عندما لا يكون لملف مدخل نفس تنسيق ملف المخرج، يكون الربط الجزئي مدعومًا فقط إذا كان ملف المدخل ذاك لا يحتوي على أي عمليات إعادة توطين. يمكن أن يكون لتنسيقات المخرجات المختلفة قيود إضافية؛ على سبيل المثال، بعض التنسيقات المعتمدة على "a.out" لا تدعم الربط الجزئي مع ملفات مدخلات بتنسيقات أخرى على الإطلاق.

عندما يحتوي المخرج القابل لإعادة التوطين على محتويات تتطلب تحسين وقت الربط (LTO) ومحتويات لا تتطلبه، سيُنشأ قسم .gnu_object_only ليحتوي على ملف كائن قابل لإعادة التوطين، كما لو طُبق -r على جميع المدخلات القابلة لإعادة التوطين التي لا تتطلب LTO. عند معالجة مدخل قابل لإعادة التوطين يحتوي على قسم .gnu_object_only، سيستخرج الرابط قسم .gnu_object_only كمدخل منفصل.

لاحظ أنه بما أن -r يجمع بعض الأجزاء من ملفات مدخلات مختلفة معًا، فقد تكون هناك تأثيرات سلبية على حجم الكود ومحليته في الملف التنفيذي النهائي أو المكتبة المشتركة.

يفعل هذا الخيار نفس ما يفعله -i.

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

للتوافق مع روابط ELF الأخرى، إذا تبع الخيار -R اسم مجلد بدلاً من اسم ملف، فسيتم التعامل معه كخيار -rpath.

حاول ضمان إنشاء قطعة واحدة فقط للقراءة فقط وغير مخصصة للكود. لا يفيد ذلك إلا عند استخدامه مع خيار -z separate-code. يجب أن تكون الثنائيات الناتجة أصغر مما لو استخدم -z separate-code بمفرده. بدون هذا الخيار، أو إذا حُدد --no-rosegment، سينشئ الخيار -z separate-code قطعتين للقراءة فقط، واحدة قبل قطعة الكود والأخرى بعدها.

أسماء الخيارات مضللة، لكنها اختيرت لكي يكون الرابط متوافقاً مع رابطي LLD و GOLD.

هذه الخيارات مدعومة فقط من قبل أهداف ELF.

حذف جميع معلومات الرموز من ملف المخرجات.
حذف معلومات رموز المنقح (ولكن ليس كل الرموز) من ملف المخرجات.
حذف (أو عدم حذف) الرموز العامة المعرفة في الأجزاء المهملة. ممكن افتراضيًا.
تخزين الملفات الوسيطة "المؤقتة" للملحق بشكل دائم.
اطبع أسماء ملفات الإدخال بينما يعالجها ld. إذا أُعطي -t مرتين، فتُطبع أيضاً الأعضاء داخل الأرشيفات. مخرج -t مفيد لتوليد قائمة بجميع ملفات الكائنات والسكربتات المشاركة في الربط، على سبيل المثال، عند تجميع الملفات لتقرير خطأ في الرابط.
يستخدم scriptfile كسكربت للرابط. يحل هذا السكربت محل سكربت الرابط المبدئي لـ ld (بدلاً من الإضافة إليه)، ما لم يحتوِ السكربت على "INSERT"، لذا يجب أن يحدد commandfile كل شيء ضروري لوصف ملف المخرج.

إذا لم يوجد scriptfile في الدليل الحالي، يبحث "ld" عنه في الأدلة المحددة بأي خيارات -L سابقة.

خيارات سطر الأوامر التي تظهر قبل الخيار -T يمكن أن تؤثر على النص البرمجي، لكن خيارات سطر الأوامر التي تظهر بعده لا تؤثر.

ستتراكم خيارات -T المتعددة إذا كانت تعزز السكربت الحالي، وإلا فسيتم استخدام خيار -T الأخير غير المعزز.

هناك طرق أخرى لتحديد سكريبتات الرابط. انظر

استخدم scriptfile كسكربت الرابط المبدئي.

يشبه هذا الخيار خيار --script باستثناء أن معالجة السيناريو تتأخر إلى ما بعد معالجة بقية سطر الأوامر. يسمح هذا للخيارات الموضوعة بعد خيار --default-script في سطر الأوامر بالتأثير على سلوك سيناريو الموصل، وهو ما يمكن أن يكون مهمًا عندما لا يمكن للمستخدم التحكم مباشرة في سطر أوامر الموصل (على سبيل المثال لأن سطر الأوامر يجري إنشاؤه بواسطة أداة أخرى، مثل gcc).

اجبر الرمز على الدخول في ملف المخرجات كرمز غير معرف. القيام بذلك قد يؤدي، على سبيل المثال، إلى إطلاق ربط وحدات إضافية من المكتبات القياسية. يمكن تكرار -u مع وسائط خيارات مختلفة لإدخال رموز غير معرفة إضافية. هذا الخيار يكافئ أمر نص الرابط "EXTERN".

إذا كان هذا الخيار مستخدماً لإجبار سحب وحدات إضافية إلى عملية الربط، وكان بقاء الرمز غير معرف يعتبر خطأ، فيجب استخدام الخيار --require-defined بدلاً من ذلك.

اشتراط تعريف symbol في ملف المخرجات. هذا الخيار هو نفسه الخيار --undefined باستثناء أنه إذا لم يُعرّف symbol في ملف المخرجات فإن الرابط سيصدر خطأ ويخرج. يمكن تحقيق نفس التأثير في سكربت الرابط باستخدام "EXTERN" و "ASSERT" و "DEFINED" معًا. يمكن استخدام هذا الخيار عدة مرات لاشتراط رموز إضافية.
للبرامج التي لا تستخدم المنشئات أو المدمرات، أو للأنظمة القائمة على ELF، يكافئ هذا الخيار -r: فهو يولد مخرجات قابلة لإعادة التوطين؛ أي ملف مخرجات يمكن استخدامه بدوره كمدخل لـ ld. أما بالنسبة للثنائيات الأخرى، فإن الخيار -Ur مشابه لـ -r ولكنه يحل أيضًا المراجع إلى المنشئات والمدمرات.

بالنسبة للأنظمة التي يختلف فيها سلوك -r و -Ur، لا ينجح استخدام -Ur على ملفات رُبطت هي نفسها باستخدام -Ur؛ بمجرد بناء جدول المنشئات، لا يمكن الإضافة إليه. استخدم -Ur فقط لآخر ربط جزئي، و -r للبقية.

تحكم في كيفية التعامل مع الأقسام اليتيمة. القسم اليتيم هو قسم لم يُذكر صراحة في نص الموصل البرمجي.

MODE يمكن أن يأخذ أي من القيم التالية:

"place"
يتم وضع الأجزاء اليتيمة (Orphan sections) في جزء مخرجات مناسب باتباع الاستراتيجية الموصوفة في Orphan Sections. يؤثر الخيار --unique أيضًا على كيفية وضع الأجزاء.
"discard"
يتم تجاهل جميع الأقسام اليتيمة (orphan sections) عبر وضعها في قسم /DISCARD/.
"warn"
سيضع الرابط القسم اليتيم كما هو الحال في "place" وسيصدر أيضاً تحذيراً.
"error"
سيخرج الرابط بخطأ إذا وُجد أي قسم يتيم.

الافتراضي إذا لم يُعطَ --orphan-handling هو "place".

ينشئ قسم خرج منفصلاً لكل قسم دخل يطابق SECTION، أو إذا غابت وسيطة النمط الاختيارية SECTION، لكل قسم دخل يتيم. القسم اليتيم هو قسم لم يُذكر صراحة في نص الموصل البرمجي. يمكنك استخدام هذا الخيار عدة مرات في سطر الأوامر؛ حيث يمنع الدمج العادي لأقسام الدخل التي تحمل نفس الاسم، متجاوزًا تعيينات قسم الخرج في نص الموصل البرمجي.
اعرض رقم إصدار ld. يسرد الخيار -V أيضاً المحاكيات المدعومة. انظر أيضاً وصف --enable-linker-version في خيارات سطر الأوامر، والذي يمكن استخدامه لإدراج سلسلة إصدار الرابط في ملف ثنائي.
احذف كافة الرموز المحلية.
احذف كافة الرموز المحلية المؤقتة. (تبدأ هذه الرموز ببادئات لصائق محلية خاصة بالنظام، عادة .L لأنظمة ELF أو L لأنظمة a.out التقليدية.)
اطبع اسم كل ملف مرتبط يظهر فيه الرمز symbol. قد يُعطى هذا الخيار أي عدد من المرات. في العديد من الأنظمة، من الضروري إضافة شرطة سفلية في البداية.

هذا الخيار مفيد عندما يكون لديك رمز غير معرف في عملية الربط لكنك لا تعرف من أين يأتي المرجع.

أضف path إلى مسار بحث المكتبة المبدئي. هذا الخيار موجود للتوافق مع سولاريس.
الكلمات المفتاحية المعترف بها هي:
تحديد حشو "NOP" بطول 1 بايت عند تحويل استدعاء غير مباشر إلى دالة معرفة محلياً، foo، عبر فتحة GOT الخاصة بها. call-nop=prefix-addr يولد "0x67 call foo". call-nop=suffix-nop يولد "call foo 0x90". call-nop=prefix-byte يولد "byte call foo". call-nop=suffix-byte يولد "call foo byte". مدعوم لمعالجات i386 و x86_64.
تحديد كيفية الإبلاغ عن خصائص GNU_PROPERTY_X86_FEATURE_1_IBT و GNU_PROPERTY_X86_FEATURE_1_SHSTK المفقودة في قسم .note.gnu.property المدخل. cet-report=none، وهو الافتراضي، سيجعل الرابط لا يبلغ عن الخصائص المفقودة في ملفات الإدخال. cet-report=warning سيجعل الرابط يصدر تحذيراً للخصائص المفقودة في ملفات الإدخال. cet-report=error سيجعل الرابط يصدر خطأ للخصائص المفقودة في ملفات الإدخال. لاحظ أن ibt سيوقف التقرير عن خاصية GNU_PROPERTY_X86_FEATURE_1_IBT المفقودة و shstk سيوقف التقرير عن خاصية GNU_PROPERTY_X86_FEATURE_1_SHSTK المفقودة. مدعوم لأنظمة Linux/i386 و Linux/x86_64.
اجمع بين أقسام إعادة التوطين الديناميكية المتعددة ورتبها لتحسين تخبئة البحث عن الرموز الديناميكية. لا تفعل هذا إذا استُخدم nocombreloc.
ولد رموزًا مشتركة بنوع STT_COMMON أثناء ربط قابل لإعادة التوطين. استخدم نوع STT_OBJECT في حال nocommon.
اضبط حجم الصفحة الأكثر شيوعًا على value. سيُحسن تخطيط صورة الذاكرة لتقليل صفحات الذاكرة إذا كان النظام يستخدم صفحات بهذا الحجم.
الإبلاغ عن مراجع الرموز غير المحلولة من ملفات الكائنات العادية. يتم ذلك حتى لو كان الرابط ينشئ مكتبة مشتركة غير رمزية. هذا الخيار هو عكس -z undefs.
جعل الرموز الضعيفة غير المعرفة ديناميكية عند بناء كائن ديناميكي، إذا تمت الإشارة إليها من ملف كائن عادي ولم تُفرض كمحلية بواسطة رؤية الرموز أو الإصدارات. لا تجعلها ديناميكية إذا استُخدم nodynamic-undefined-weak. إذا لم يُعطَ أي من الخيارين، فقد يعتمد الهدف مبدئياً على أي من الخيارين، أو يختار رموزاً ضعيفة غير معرفة أخرى لجعلها ديناميكية. لا تدعم جميع الأهداف هذه الخيارات.
يعلم الكائن كونه يتطلب مكدساً قابلاً للتنفيذ.
يكون هذا الخيار ذا معنى فقط عند بناء كائن مشترك. يجعل الرموز المعرفة بواسطة هذا الكائن المشترك متاحة لحل الرموز للمكتبات المحملة لاحقًا.
يكون هذا الخيار ذا معنى فقط عند بناء ملف تنفيذي حيوي. يميز هذا الخيار الملف التنفيذي على أنه يتطلب تدقيقًا عامًا عن طريق ضبط بت "DF_1_GLOBAUDIT" في الوسم الحيوي "DT_FLAGS_1". يتطلب التدقيق العام تشغيل أي مكتبة تدقيق محددة عبر خيارات سطر الأوامر --depaudit أو -P لجميع الكائنات الحيوية المحملة بواسطة التطبيق.
ولد مدخلات PLT مُمكّنة لـ Intel Indirect Branch Tracking (IBT). مدعوم لأنظمة Linux/i386 و Linux/x86_64.
ولد GNU_PROPERTY_X86_FEATURE_1_IBT في قسم .note.gnu.property للإشارة إلى التوافق مع IBT. يتضمن هذا أيضًا ibtplt. مدعوم لأنظمة Linux/i386 و Linux/x86_64.
ولد GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS في قسم .note.gnu.property للإشارة إلى أن ملف الكائن يتطلب مؤشرات دالة قانونية ولا يمكن استخدامه مع إعادة توطين النسخ. يتضمن هذا الخيار أيضًا noextern-protected-data و nocopyreloc. مدعوم لمنصات i386 و x86-64.

noindirect-extern-access يزيل GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS من قسم .note.gnu.property.

يكون هذا الخيار ذا معنى فقط عند بناء كائن مشترك. فإنه يميز الكائن بحيث يحدث تهيئته وقت التشغيل قبل تهيئة أي كائنات أخرى جُلبت إلى العملية في نفس الوقت. وبالمثل، سيحدث إنهاء الكائن وقت التشغيل بعد الإنهاء وقت التشغيل لأي كائنات أخرى.
تحديد أن المحمل الديناميكي يجب أن يعدل ترتيب بحث الرموز لديه بحيث تتداخل الرموز في هذه المكتبة المشتركة مع جميع المكتبات المشتركة الأخرى غير المميزة بهذه السمة.
عند توليد مكتبة مشتركة أو كائن ELF آخر قابل للتحميل ديناميكيًا، سمه ككائن ينبغي (مبدئيًا) ألا يُحمل إلا مرة واحدة فقط، وفقط في مساحة الأسماء الرئيسة (عند استخدام "dlmopen"). يستخدم هذا أساسًا لوسم المكتبات الأساسية مثل libc و libpthread وغيرها التي لا تعمل عادةً بشكل صحيح ما لم تكن هي النسخة الوحيدة من نفسها. يمكن للمستدعي "dlmopen" تجاوز هذا السلوك، كما أنه لا ينطبق على بعض آليات التحميل (مثل مكتبات التدقيق).
ولد GNU_PROPERTY_X86_FEATURE_1_LAM_U48 في قسم .note.gnu.property للإشارة إلى التوافق مع Intel LAM_U48. مدعوم لنظام Linux/x86_64.
ولد GNU_PROPERTY_X86_FEATURE_1_LAM_U57 في قسم .note.gnu.property للإشارة إلى التوافق مع Intel LAM_U57. مدعوم لنظام Linux/x86_64.
تحديد كيفية الإبلاغ عن خاصية GNU_PROPERTY_X86_FEATURE_1_LAM_U48 المفقودة في قسم .note.gnu.property المدخل. lam-u48-report=none، وهو الافتراضي، سيجعل الرابط لا يبلغ عن الخصائص المفقودة في ملفات الإدخال. lam-u48-report=warning سيجعل الرابط يصدر تحذيراً للخصائص المفقودة في ملفات الإدخال. lam-u48-report=error سيجعل الرابط يصدر خطأ للخصائص المفقودة في ملفات الإدخال. مدعوم لأنظمة Linux/x86_64.
تحديد كيفية الإبلاغ عن خاصية GNU_PROPERTY_X86_FEATURE_1_LAM_U57 المفقودة في قسم .note.gnu.property المدخل. lam-u57-report=none، وهو الافتراضي، سيجعل الرابط لا يبلغ عن الخصائص المفقودة في ملفات الإدخال. lam-u57-report=warning سيجعل الرابط يصدر تحذيراً للخصائص المفقودة في ملفات الإدخال. lam-u57-report=error سيجعل الرابط يصدر خطأ للخصائص المفقودة في ملفات الإدخال. مدعوم لأنظمة Linux/x86_64.
تحديد كيفية الإبلاغ عن خصائص GNU_PROPERTY_X86_FEATURE_1_LAM_U48 و GNU_PROPERTY_X86_FEATURE_1_LAM_U57 المفقودة في قسم .note.gnu.property المدخل. lam-report=none، وهو الافتراضي، سيجعل الرابط لا يبلغ عن الخصائص المفقودة في ملفات الإدخال. lam-report=warning سيجعل الرابط يصدر تحذيراً للخصائص المفقودة في ملفات الإدخال. lam-report=error سيجعل الرابط يصدر خطأ للخصائص المفقودة في ملفات الإدخال. مدعوم لأنظمة Linux/x86_64.
عند توليد ملف تنفيذي أو مكتبة مشتركة، سمه لإخبار المرابط الديناميكي بتأجيل حل استدعاء الوظيفة إلى اللحظة التي تُستدعى فيها الوظيفة (الربط الكسول)، بدلاً من وقت التحميل. الربط الكسول هو السلوك المبدئي.
يحدد وجوب معالجة مرشحات الكائن فوراً في وقت التشغيل.
اضبط الحد الأقصى لحجم صفحة الذاكرة المدعوم على value.
يميز مدخلات PLT بوسوم ديناميكية، DT_X86_64_PLT و DT_X86_64_PLTSZ و DT_X86_64_PLTENT. بما أن هذا الخيار يخزن قيمة غير صفرية في حقل r_addend لإعادة توطين R_X86_64_JUMP_SLOT، فإن الملفات التنفيذية والمكتبات المشتركة الناتجة تكون غير متوافقة مع الروابط الديناميكية، مثل تلك الموجودة في الإصدارات القديمة من glibc بدون التغيير لتجاهل r_addend في إعادة توطين R_X86_64_GLOB_DAT و R_X86_64_JUMP_SLOT، والتي لا تتجاهل حقل r_addend الخاص بإعادة توطين R_X86_64_JUMP_SLOT. مدعوم لـ x86_64.
السماح بتعريفات متعددة.
عطّل متغيرات .dynbss التي يولدها الرابط والمستخدمة بدلاً من المتغيرات المعرفة في المكتبات المشتركة. قد يؤدي ذلك إلى عمليات إعادة توطين نصية حركية.
تحديد أن بحث المحمل الديناميكي عن اعتماديات هذا الكائن يجب أن يتجاهل أي مسارات بحث افتراضية للمكتبات.
يحدد وجوب عدم إلغاء تحميل الكائن في وقت التشغيل.
تحديد أن الكائن غير متاح لـ "dlopen".
تحديد أنه لا يمكن تفريغ الكائن بواسطة "dldump".
يعلم الكائن كونه لا يتطلب مكدساً قابلاً للتنفيذ.
لا يعامل رموز البيانات المحمية كخارجية عند بناء مكتبة مشتكة. يتجاوز هذا الخيار الإعداد المبدئي لخلفية الرابط. يمكن استخدامه للالتفاف على عمليات إعادة التوطين غير الصحيحة ضد رموز البيانات المحمية التي يولدها المترجم. التحديثات على رموز البيانات المحمية بواسطة وحدة أخرى ليست مرئية للمكتبة المشتركة الناتجة. مدعوم لـ i386 و x86-64.
عطّل فحص تجاوز سعة إعادة التوطين. يمكن استخدام هذا لتعطيل فحص تجاوز السعة إذا لم يكن هناك تجاوز سعة لإعادة توطين حركي وقت التشغيل. مدعوم لمعمارية x86_64.
ختم_الذاكرة
إصدار تعليمات للملف التنفيذي أو المكتبة المشتركة بوجوب ختم (seal) جميع أجزاء PT_LOAD لتجنب التلاعب اللاحق بها (مثل تغيير أعلام الحماية، أو حجم الجزء، أو إزالة التعيين). هذا إجراء لتقوية الأمن يتطلب دعماً من النظام. يولد هذا GNU_PROPERTY_MEMORY_SEAL في قسم .note.gnu.property.
عند توليد ملف تنفيذي أو مكتبة مشتركة، سمه لإخبار المرابط الديناميكي بحل كافة الرموز عند بدء البرنامج، أو عند تحميل المكتبة المشتركة بواسطة dlopen، بدلاً من تأجيل حل استدعاء الوظيفة إلى اللحظة التي تُستدعى فيها للمرة الأولى.
تحديد أن الكائن يتطلب معالجة $ORIGIN في المسارات.
ولد إعادة توطين نسبية مدمجة في الملفات التنفيذية المستقلة عن الموقع والمكتبات المشتركة. يضيف مدخلات "DT_RELR"، "DT_RELRSZ" و "DT_RELRENT" إلى القسم الديناميكي. يتم تجاهله عند بناء مخرجات تنفيذية معتمدة على الموقع أو قابلة لإعادة التوطين. nopack-relative-relocs هو المبدئي، الذي يعطل إعادة التوطين النسبية المدمجة. عند الربط بمكتبة GNU C، تُضاف تبعية إصدار رمز GLIBC_ABI_DT_RELR على مكتبة C المشتركة إلى المخرجات. مدعوم لمنصات i386 و x86-64.
ينشئ ترويسة قطعة ELF من نوع "PT_GNU_RELRO" في الكائن. يحدد هذا قطعة ذاكرة ينبغي جعلها للقراءة فقط بعد إعادة التوطين، إذا كان ذلك مدعوماً. تحديد common-page-size أصغر من حجم صفحة النظام سيجعل هذه الحماية غير فعالة. لا تنشئ قطعة ELF من نوع "PT_GNU_RELRO" إذا استُخدم norelro.
الإبلاغ عن عمليات إعادة التوطين النسبية الديناميكية المولدة بواسطة الرابط. مدعوم لـ Linux/i386 و Linux/x86_64.
يولد ترويسة القسم. لا تولد ترويسة القسم إذا استُخدم nosectionheader. يعد sectionheader هو المبدئي.
ينشئ ترويسة قطعة كود "PT_LOAD" منفصلة في الكائن. يحدد هذا قطعة ذاكرة ينبغي أن تحتوي على تعليمات فقط و يجب أن تكون في صفحات منفصلة تماماً عن أي بيانات أخرى. لا تنشئ قطعة كود "PT_LOAD" منفصلة إذا استُخدم noseparate-code.
ولد GNU_PROPERTY_X86_FEATURE_1_SHSTK في قسم .note.gnu.property للإشارة إلى التوافق مع Intel Shadow Stack. مدعوم لأنظمة Linux/i386 و Linux/x86_64.
تحديد حجم المكدس (stack size) لقطاع ELF من نوع "PT_GNU_STACK". تحديد القيمة صفر سيؤدي إلى تجاوز أي إنشاء افتراضي لقطاع "PT_GNU_STACK" بحجم غير صفري.
عندما يكون --gc-sections قيد التنفيذ، فإن الإشارة من قسم مُحتفظ به إلى "__start_SECNAME" أو "__stop_SECNAME" تؤدي إلى الاحتفاظ بكافة أقسام المدخلات المسماة "SECNAME" أيضًا، إذا كان "SECNAME" قابلاً للتمثيل كمعرف C وكان أي من "__start_SECNAME" أو "__stop_SECNAME" قد صُنّع بواسطة المرابط. يُعطل -z start-stop-gc هذا التأثير، مما يسمح بجمع الأقسام كمهملات كما لو أن الرموز المصنعة الخاصة لم تُعرف. ليس لـ -z start-stop-gc أي تأثير على تعريف "__start_SECNAME" أو "__stop_SECNAME" في ملف كائن أو نص برمج للمرابط. سيمنع مثل هذا التعريف المرابط من تقديم "__start_SECNAME" أو "__stop_SECNAME" مصنعين على التوالي، وبالتالي يمنع المعاملة الخاصة بواسطة جمع المهملات لتلك الإشارات.
ابدأ-أوقف-الظهور=قيمة
يحدد ظهور رمز ELF لرموز "__start_SECNAME" و "__stop_SECNAME" المصنعة. يجب أن تكون value بالضبط default، أو internal، أو hidden، أو protected. إذا لم يُعطَ خيار -z start-stop-visibility، تُستخدم protected للتوافق مع الممارسة التاريخية. ومع ذلك، يوصى بشدة باستخدام -z start-stop-visibility=hidden في البرامج الجديدة والمكتبات المشتركة بحيث لا تُصَدر هذه الرموز بين الكائنات المشتركة، وهو ما لا يكون مقصوداً في العادة.
يُبلغ عن خطأ إذا ضُبط DT_TEXTREL، أي إذا كان الكائن المستقل عن الموقع أو المشترك يحتوي على عمليات إعادة توطين ديناميكية في أقسام للقراءة فقط. لا يُبلغ عن خطأ إذا استُخدم notext أو textoff.
لا تبلغ عن مراجع الرموز غير المحلولة من ملفات الكائنات العادية، سواء عند إنشاء ملف تنفيذي أو عند إنشاء مكتبة مشتركة. هذا الخيار هو عكس -z defs.
تجنب أسماء الرموز المحلية المكررة في جدول سلاسل الرموز. ألحق "."number"" بأسماء الرموز المحلية المكررة إذا استُخدِم unique-symbol. السلوك المبدئي هو nounique-symbol.
تحديد مستوى x86-64 ISA المطلوب في قسم .note.gnu.property. x86-64-baseline يولد "GNU_PROPERTY_X86_ISA_1_BASELINE". x86-64-v2 يولد "GNU_PROPERTY_X86_ISA_1_V2". x86-64-v3 يولد "GNU_PROPERTY_X86_ISA_1_V3". x86-64-v4 يولد "GNU_PROPERTY_X86_ISA_1_V4". مدعوم لأنظمة Linux/i386 و Linux/x86_64.
تحديد كيفية الإبلاغ عن مستويات x86-64 ISA في ملفات الإدخال القابلة لإعادة التوطين. isa-level-report=none، وهو الافتراضي، سيجعل الرابط لا يبلغ عن مستويات x86-64 ISA في ملفات الإدخال. isa-level-report=all سيجعل الرابط يبلغ عن مستويات x86-64 ISA المطلوبة والمستخدمة في ملفات الإدخال. isa-level-report=needed سيجعل الرابط يبلغ عن مستويات x86-64 ISA المطلوبة في ملفات الإدخال. isa-level-report=used سيجعل الرابط يبلغ عن مستويات x86-64 ISA المستخدمة في ملفات الإدخال. مدعوم لأنظمة Linux/i386 و Linux/x86_64.

تُتجاهل الكلمات المفتاحية الأخرى للتوافق مع Solaris.

يضيف تبعية وسم إصدار "GLIBC_ABI_GNU_TLS" في برامج المخرج والمكتبات المشتركة عند الربط ضد glibc إذا كانت ملفات كائنات المدخلات القابلة لإعادة التوطين تستدعي "___tls_get_addr". سيفشل المخرج في التحميل والتشغيل في وقت التشغيل ضد glibc التي لا تعرف وسم إصدار "GLIBC_ABI_GNU_TLS". ما لم يُعطل بواسطة خيار الضبط --disable-gnu-tls-tag في وقت بناء الرابط، عندما لا تُحدد أي خيارات، سيضيف الرابط تبعية وسم إصدار "GLIBC_ABI_GNU_TLS" إذا كانت المدخلات تحتوي على استدعاء "___tls_get_addr" و libc.so تعرف وسم إصدار "GLIBC_ABI_GNU_TLS". مدعوم لـ Linux/i386.
يضيف تبعية وسم إصدار "GLIBC_ABI_GNU2_TLS" في برامج المخرج والمكتبات المشتركة عند الربط ضد glibc إذا كانت ملفات كائنات المدخلات القابلة لإعادة التوطين تحتوي على إعادة توطين "R_386_TLS_DESC_CALL" أو "R_X86_64_TLSDESC_CALL". سيفشل المخرج في التحميل والتشغيل في وقت التشغيل ضد glibc التي لا تعرف وسم إصدار "GLIBC_ABI_GNU2_TLS". ما لم يُعطل بواسطة خيار --disable-gnu2-tls-tag عند وقت بناء الرابط، عندما لا تُحدد أي خيارات، سيضيف الرابط تبعية وسم إصدار "GLIBC_ABI_GNU2_TLS" إذا كانت المدخلات تحتوي على إعادة توطين "R_386_TLS_DESC_CALL" أو "R_X86_64_TLSDESC_CALL" و libc.so تعرف وسم إصدار "GLIBC_ABI_GNU2_TLS". مدعوم لـ Linux/i386 و Linux/x86_64.
-( archives -)
يجب أن تكون الـ أرشيفات قائمة بملفات الأرشيف. قد تكون إما أسماء ملفات صريحة، أو خيارات -l.

يُبحث في الأرشيفات المحددة بشكل متكرر حتى لا تُنشأ مراجع جديدة غير محددة. عادةً، يُبحث في الأرشيف مرة واحدة فقط بالترتيب الذي حُدد به على سطر الأوامر. إذا لزم رمز في ذلك الأرشيف لحل رمز غير محدد يشير إليه كائن في أرشيف يظهر لاحقاً على سطر الأوامر، فلن يتمكن الرابط من حل ذلك المرجع. وعن طريق تجميع الأرشيفات، سيُبحث فيها جميعاً بشكل متكرر حتى تُحل جميع المراجع الممكنة.

استخدام هذا الخيار له تكلفة أداء كبيرة. من الأفضل استخدامه فقط عندما تكون هناك مراجع دائرية لا يمكن تجنبها بين أرشيفين أو أكثر.

يخبر الرابط بقبول ملفات الإدخال التي لا يمكن التعرف على معماريتها. الافتراض هو أن المستخدم يعرف ما يفعله ويريد عمداً ربط ملفات الإدخال المجهولة هذه. كان هذا هو السلوك الافتراضي للرابط قبل الإصدار 2.14. السلوك الافتراضي من الإصدار 2.14 فصاعداً هو رفض مثل هذه الملفات، لذا تمت إضافة الخيار --accept-unknown-input-arch لاستعادة السلوك القديم.
يؤثر هذا الخيار على وسوم ELF DT_NEEDED للمكتبات الحيوية المذكورة في سطر الأوامر بعد الخيار --as-needed. عادةً ما يضيف الموصل وسم DT_NEEDED لكل مكتبة حيوية مذكورة في سطر الأوامر، بغض النظر عما إذا كانت المكتبة مطلوبة بالفعل أم لا. يؤدي --as-needed إلى إصدار وسم DT_NEEDED فقط للمكتبة التي عند تلك النقطة في الوصل تستوفي مرجع رمز غير معرف وغير ضعيف من ملف كائن عادي أو، إذا لم تكن المكتبة موجودة في قوائم DT_NEEDED للمكتبات الأخرى المطلوبة، مرجع رمز غير معرف وغير ضعيف من مكتبة حيوية أخرى مطلوبة. لا تؤثر ملفات الكائنات أو المكتبات التي تظهر في سطر الأوامر بعد المكتبة المعنية على ما إذا كانت المكتبة تُرى كمطلوبة. هذا مشابه لقواعد استخراج ملفات الكائنات من الأرشيفات. يستعيد --no-as-needed السلوك المبدئي.

ملاحظة: في الأنظمة القائمة على لينكس، يؤثر خيار --as-needed أيضًا على سلوك الخيارين --rpath و --rpath-link. راجع وصف --rpath-link لمزيد من التفاصيل.

هُجر هذان الخياران بسبب تشابه أسمائهما مع الخيارين --as-needed و --no-as-needed. وقد استُبدلا بـ --copy-dt-needed-entries و --no-copy-dt-needed-entries.
يُتجاهل هذا الخيار من أجل التوافقية مع SunOS.
الربط مع المكتبات الديناميكية. هذا ذو معنى فقط على المنصات التي تدعم المكتبات المشتركة. هذا الخيار هو المبدئي عادةً على هذه المنصات. المتغيرات المختلفة لهذا الخيار هي للتوافق مع الأنظمة المختلفة. يمكنك استخدام هذا الخيار عدة مرات في سطر الأوامر: فهو يؤثر على البحث عن المكتبات لخيارات -l التي تليه.
اضبط علم "DF_1_GROUP" في مدخلة "DT_FLAGS_1" في القسم الديناميكي. يؤدي هذا إلى جعل موصل وقت التشغيل يعالج عمليات البحث في هذا الكائن وتوابعه بحيث تُنفذ فقط داخل المجموعة. يُفترض استخدام --unresolved-symbols=report-all. هذا الخيار ذو معنى فقط على منصات ELF التي تدعم المكتبات المشتركة.
لا يربط ضد المكتبات المشتركة. هذا ذو معنى فقط على المنصات التي تدعم المكتبات المشتركة. المتغيرات المختلفة لهذا الخيار هي للتوافق مع الأنظمة المتنوعة. يمكنك استخدام هذا الخيار مرات متعددة في سطر الأوامر: فهو يؤثر على البحث عن المكتبات لخيارات -l التي تليها. يتضمن هذا الخيار أيضاً --unresolved-symbols=report-all. يمكن استخدام هذا الخيار مع -shared. القيام بذلك يعني أنه يجري إنشاء مكتبة مشتركة ولكن يجب حل جميع المراجع الخارجية للمكتبة من خلال سحب المدخلات من المكتبات الساكنة.
عند إنشاء مكتبة مشتركة، اربط الإشارات إلى الرموز العامة بالتعريف داخل المكتبة المشتركة، إن وجد. عادةً، يمكن للبرنامج المربوط بمكتبة مشتركة أن يتجاوز التعريف الموجود داخل المكتبة المشتركة. هذا الخيار ذو معنى فقط على منصات ELF التي تدعم المكتبات المشتركة.
عند إنشاء مكتبة مشتركة، اربط الإشارات إلى رموز الوظائف العامة بالتعريف داخل المكتبة المشتركة، إن وجد. هذا الخيار ذو معنى فقط على منصات ELF التي تدعم المكتبات المشتركة.
يمكن لهذا الخيار إلغاء -Bsymbolic و -Bsymbolic-functions المحددين مسبقًا.
يحدد اسم ملف قائمة ديناميكية للرابط. يستخدم هذا عادةً عند إنشاء مكتبات مشتركة لتحديد قائمة بالرموز العامة التي لا ينبغي ربط مراجعها بالتعريف الموجود داخل المكتبة المشتركة، أو إنشاء ملفات تنفيذية مرتبطة ديناميكياً لتحديد قائمة بالرموز التي ينبغي إضافتها إلى جدول الرموز في الملف التنفيذي. هذا الخيار ذو معنى فقط على منصات ELF التي تدعم المكتبات المشتركة.

تنسيق القائمة الديناميكية هو نفسه عقدة الإصدار بدون نطاق واسم عقدة. انظر VERSION لمزيد من المعلومات.

تضمين جميع رموز البيانات العامة في القائمة الديناميكية.
توفير القائمة الديناميكية المدمجة لعامل C++ الجديد (new) والحذف (delete). مفيد بشكل رئيس لبناء libstdc++ المشتركة.
توفير القائمة الديناميكية المدمجة لتعريف نوع وقت التشغيل في C++.
يطلب من الواصل عدم فحص عناوين الأقسام بعد تعيينها لمعرفة ما إذا كان هناك أي تداخلات. عادةً ما يقوم الواصل بهذا الفحص، وإذا وجد أي تداخلات فإنه ينتج رسائل خطأ مناسبة. يعرف الواصل بشأن الأقسام في التراكبات ويراعيها. يمكن استعادة السلوك المبدئي باستخدام مفتاح سطر الأوامر --check-sections. لا يُفحص تداخل الأقسام عادةً في الوصلات القابلة لإعادة التوطين. يمكنك فرض الفحص في تلك الحالة باستخدام خيار --check-sections.
يؤثر هذا الخيار على معالجة المكتبات الديناميكية المشار إليها بواسطة وسوم DT_NEEDED داخل مكتبات ELF الديناميكية المذكورة في سطر الأوامر. عادة لا يضيف الرابط وسم DT_NEEDED إلى الثنائي المخرج لكل مكتبة مذكورة في وسم DT_NEEDED في مكتبة ديناميكية مدخلة. لكن مع تحديد --copy-dt-needed-entries في سطر الأوامر، فإن أي مكتبات ديناميكية تليها ستُضاف مدخلات DT_NEEDED الخاصة بها. يمكن استعادة السلوك المبدئي باستخدام --no-copy-dt-needed-entries.

يؤثر هذا الخيار أيضًا على حل الرموز في المكتبات الحيوية. مع --copy-dt-needed-entries، سيُبحث في المكتبات الحيوية المذكورة في سطر الأوامر بشكل تكراري، متبعًا وسوم DT_NEEDED الخاصة بها إلى مكتبات أخرى، من أجل حل الرموز التي يتطلبها الثنائي المخرج. ومع ذلك، فمع الإعداد المبدئي، سيتوقف البحث في المكتبات الحيوية عند المكتبة الحيوية نفسها. لن تُجتاز أي روابط DT_NEEDED لحل الرموز.

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

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

تدعم صيغة معلومات التنقيب CTF قسمًا يرمز أسماء وأنواع المتغيرات الموجودة في البرنامج والتي لا تظهر في أي جدول رموز. من الواضح أنه لا يمكن البحث عن هذه المتغيرات بالعنوان بواسطة المنقحات التقليدية، لذا فإن المساحة المستخدمة لأنواعها وأسمائها تضيع عادةً: الأنواع صغيرة عادةً ولكن الأسماء غالبًا ليست كذلك. يتسبب --ctf-variables في توليد مثل هذا القسم. يمكن استعادة السلوك المبدئي باستخدام --no-ctf-variables.
اضبط الطريقة المستخدمة لمشاركة الأنواع بين وحدات الترجمة في CTF.
وضع جميع الأنواع التي لا تملك تعريفات غامضة في القاموس المشترك، حيث يمكن لمنقعات الأخطاء الوصول إليها بسهولة، حتى لو ظهرت في وحدة ترجمة واحدة فقط. هذا هو المبدئي.
وضع الأنواع التي تظهر في وحدات ترجمة متعددة فقط في القاموس المشترك: الأنواع ذات التعريف الواحد تذهب إلى قواميس كل وحدة ترجمة. الأنواع ذات التعريفات الغامضة في وحدات ترجمة متعددة تذهب دائمًا إلى قواميس كل وحدة ترجمة. يميل هذا لجعل CTF أكبر، ولكنه قد يقلل من كمية CTF في القاموس المشترك. بالنسبة للمشاريع الكبيرة جدًا، قد يسرع هذا فتح CTF ويوفر الذاكرة في مستهلك CTF وقت التشغيل.
يمنع هذا الخيار تعيين العناوين للرموز المشتركة. أمر السيناريو "INHIBIT_COMMON_ALLOCATION" له نفس التأثير.

يسمح الخيار --no-define-common بفصل قرار تعيين العناوين للرموز المشتركة عن اختيار نوع ملف المخرجات؛ وإلا فإن نوع المخرجات غير القابل للنقل يفرض تعيين العناوين للرموز المشتركة. يسمح استخدام --no-define-common للرموز المشتركة التي يُشار إليها من مكتبة مشتركة بأن تُعين لها عناوين في البرنامج الرئيس فقط. هذا يزيل المساحة المكررة غير المستخدمة في المكتبة المشتركة، ويمنع أيضًا أي ارتباك محتمل حول الحل إلى النسخة المكررة الخاطئة عندما يكون هناك العديد من الوحدات الديناميكية ذات مسارات بحث متخصصة لحل الرموز في وقت التشغيل.

يؤدي هذا الخيار إلى قيام الموصل بوضع أعضاء مجموعة الأقسام مثل أقسام المدخلات العادية، وحذف مجموعات الأقسام. هذا هو السلوك المبدئي للوصل النهائي ولكن يمكن استخدام هذا الخيار لتغيير سلوك الوصل القابل لإعادة التوطين (-r). أمر السيناريو "FORCE_GROUP_ALLOCATION" له نفس التأثير.
أنشئ رمزًا عالميًا في ملف الخرج، يحتوي على العنوان المطلق المعطى بواسطة expression. يمكنك استخدام هذا الخيار قدر الضرورة لتعريف رموز متعددة في سطر الأوامر. يُدعم شكل محدود من الحساب للتعبير expression في هذا السياق: يمكنك إعطاء ثابت ست عشري أو اسم رمز موجود، أو استخدام "+" و "-" لجمع أو طرح ثوابت أو رموز ست عشرية. إذا كنت بحاجة لتعبيرات أكثر تعقيدًا، فكر في استخدام لغة أوامر الموصل من نص برمجي. ملاحظة: يجب ألا توجد مسافات بيضاء بين الرمز symbol، وعلامة التساوي ("=")، والتعبير expression.

يعالج الرابط وسائط --defsym ووسائط -T بالترتيب، فوضع --defsym قبل -T سيعرف الرمز قبل معالجة سكريبت الرابط من -T، بينما وضع --defsym بعد -T سيعرف الرمز بعد معالجة سكريبت الرابط. هذا الاختلاف له عواقب على التعبيرات داخل سكريبت الرابط التي تستخدم رموز --defsym، والترتيب الصحيح يعتمد على ما تحاول تحقيقه.

تتحكم هذه الخيارات فيما إذا كان سيُفك تشويه أسماء الرموز في رسائل الخطأ والمخرجات الأخرى. عندما يُطلب من الرابط فك التشويه، فإنه يحاول تقديم أسماء الرموز بطريقة مقروءة: فهو يزيل الشرطات السفلية البادئة إذا كانت مستخدمة في تنسيق ملف الكائن، ويحول أسماء رموز C++ المشوهة إلى أسماء مقروءة للمستخدم. المترجمات المختلفة لها أنماط تشويه مختلفة. يمكن استخدام معامل نمط فك التشويه الاختياري لاختيار نمط فك تشويه مناسب لمترجمك. سيقوم الرابط بفك التشويه مبدئيًا ما لم يُضبط متغير البيئة COLLECT_NO_DEMANGLE. يمكن استخدام هذه الخيارات لتجاوز الوضع المبدئي.
يضبط اسم الرابط الديناميكي. هذا ذو معنى فقط عند توليد ملفات تنفيذية مرتبطة ديناميكياً بتنسيق ELF. الرابط الديناميكي المبدئي صحيح في العادة؛ لا تستخدم هذا ما لم تكن تعرف ما تفعله.
عند إنتاج ملف تنفيذي، احذف طلب استخدام مرابط ديناميكي في وقت التحميل. هذا ذو معنى فقط لملفات ELF التنفيذية التي تحتوي على عمليات إعادة توطين ديناميكية، ويتطلب عادةً كودًا لنقطة الدخول قادرًا على معالجة عمليات إعادة التوطين هذه.
يشبه هذا الخيار خيار --emit-relocs باستثناء أن عمليات إعادة التوطين (relocs) تُخزن في قسم خاص بالهدف. هذا الخيار مدعوم فقط من قبل أهداف BFIN و CR16 و M68K.
لا تسمح بتعريفات متعددة برموز مدرجة في اسم الملف المستدعى بواسطة -R أو --just-symbols
عامل كل التحذيرات كأخطاء. يمكن استعادة السلوك المبدئي عبر الخيار --no-fatal-warnings.
لا تعرض أي رسائل تحذير أو خطأ. يتجاوز هذا --fatal-warnings إذا كان مفعلاً. يمكن استخدام هذا الخيار عندما يكون معروفاً أن الملف الثنائي الناتج لن يعمل، ولكن لا تزال هناك حاجة لإنشائه.
التأكد من أن ملف المخرجات له اللاحقة .exe.

إذا كان ملف المخرج المرتبط بالكامل والمبني بنجاح لا يملك لاحقة ".exe" أو ".dll"، فإن هذا الخيار يجبر الرابط على نسخ ملف المخرج إلى ملف بنفس الاسم مع لاحقة ".exe". هذا الخيار مفيد عند استخدام ملفات makefile يونكس غير المعدلة على مضيف Microsoft Windows، حيث إن بعض إصدارات Windows لن تشغل صورة ما لم تنتهِ بلاحقة ".exe".

تفعيل جمع المهملات لأقسام الإدخال غير المستخدمة. يتم تجاهله في الأهداف التي لا تدعم هذا الخيار. السلوك الافتراضي (عدم إجراء جمع المهملات هذا) يمكن استعادته بتحديد --no-gc-sections في سطر الأوامر. لاحظ أن جمع المهملات لأهداف تنسيق COFF و PE مدعوم، ولكن التنفيذ يعتبر حاليًا تجريبيًا.

--gc-sections يقرر أي أقسام المدخلات تُستخدم عبر فحص الرموز وعمليات إعادة التوطين. يُحتفظ بالقسم الذي يحتوي على رمز الإدخال وجميع الأقسام التي تحتوي على رموز غير معرفة في سطر الأوامر، كما يُحتفظ بالأقسام التي تحتوي على رموز مرجعية بواسطة كائنات ديناميكية. لاحظ أنه عند بناء مكتبات مشتركة، يجب على الرابط أن يفترض أن أي رمز مرئي هو مرجعي. بمجرد تحديد هذه المجموعة الأولية من الأقسام، يقوم الرابط بشكل تكراري بوسم أي قسم مرجعي بواسطة عمليات إعادة التوطين الخاصة بها كقسم مُستخدم. انظر --entry، و --undefined، و --gc-keep-exported.

يمكن ضبط هذا الخيار عند إجراء وصل جزئي (يُمكّن بالخيار -r). في هذه الحالة، يجب تحديد جذر الرموز المحتفظ بها صراحةً إما عن طريق أحد الخيارات --entry، أو --undefined، أو --gc-keep-exported أو عن طريق أمر "ENTRY" في سيناريو الموصل.

كامتداد لـ GNU، فإن أقسام مدخلات ELF المميزة بـ علامة "SHF_GNU_RETAIN" لن تُجمع كنفايات.

سرد كافة الأقسام التي تمت إزالتها بواسطة جامع المهملات. تُطبع القائمة على stderr. هذا الخيار فعال فقط إذا تم تمكين جمع المهملات عبر خيار --gc-sections). يمكن استعادة السلوك المبدئي (بعدم سرد الأقسام التي تمت إزالتها) بتحديد --no-print-gc-sections في سطر الأوامر.
عند تفعيل --gc-sections، يمنع هذا الخيار جمع المهملات لأقسام المدخلات غير المستخدمة التي تحتوي على رموز عامة لها رؤية مبدئية أو محمية. هذا الخيار مخصص للاستخدام مع الملفات التنفيذية حيث ستُجمع الأقسام غير المشار إليها كمهملات لولا ذلك، بغض النظر عن الرؤية الخارجية للرموز الموجودة بها. لاحظ أن هذا الخيار ليس له أي تأثير عند ربط الكائنات المشتركة لأنه السلوك المبدئي بالفعل. هذا الخيار مدعوم فقط لأهداف تنسيق ELF.
اطبع اسم تنسيق المخرج المبدئي (ربما يتأثر بخيارات سطر الأوامر الأخرى). هذه هي السلسلة التي ستظهر في أمر نصي للرابط "OUTPUT_FORMAT".
اطبع الحجم المستخدم، والحجم الإجمالي، والحجم المستخدم لمناطق الذاكرة المنشأة باستخدام أمر MEMORY. هذا مفيد في الأهداف المدمجة للحصول على عرض سريع لمقدار الذاكرة الحرة. يحتوي تنسيق المخرج على عنوان رئيس وسطر واحد لكل منطقة. إنه قابل للقراءة من قبل البشر وسهل التحليل بواسطة الأدوات. إليك مثال على المخرج:

        منطقة الذاكرة         الحجم المستخدم  حجم المنطقة  نسبة الاستخدام
                     ROM:        256 KB         1 MB     25.00%
                     RAM:          32 B         2 GB      0.00%
    

ملاحظة: إذا كنت تريد معرفة استهلاك الذاكرة للرابط نفسه، فإن خيار --stats سيقوم بذلك.

اطبع ملخصاً لخيارات سطر الأوامر على المخرج القياسي واخرج.
اطبع ملخصاً لجميع الخيارات الخاصة بالهدف على المخرج القياسي واخرج.
اطبع خريطة ربط إلى الملف mapfile. انظر وصف الخيار -M أعلاه. إذا كان mapfile هو مجرد المحرف "-" فستكتب الخريطة في المخرج القياسي.

يؤدي تحديد دليل كـ mapfile إلى كتابة خريطة الرابط كملف داخل هذا الدليل. عادةً ما يتم حساب اسم الملف داخل الدليل كاسم أساسي لملف output مع إلحاق ".map" به. ومع ذلك، إذا تم استخدام المحرف الخاص "%" فسيتم استبداله بالمسار الكامل لملف الإخراج. بالإضافة إلى ذلك، إذا كانت هناك أي محارف بعد رمز % فلن يتم إلحاق ".map" بعد الآن.

         -o foo.exe -Map=bar                  [يُنشئ ./bar]
         -o ../dir/foo.exe -Map=bar           [يُنشئ ./bar]
         -o foo.exe -Map=../dir               [يُنشئ ../dir/foo.exe.map]
         -o ../dir2/foo.exe -Map=../dir       [يُنشئ ../dir/foo.exe.map]
         -o foo.exe -Map=%                    [يُنشئ ./foo.exe.map]
         -o ../dir/foo.exe -Map=%             [يُنشئ ../dir/foo.exe.map]
         -o foo.exe -Map=%.bar                [يُنشئ ./foo.exe.bar]
         -o ../dir/foo.exe -Map=%.bar         [يُنشئ ../dir/foo.exe.bar]
         -o ../dir2/foo.exe -Map=../dir/%     [يُنشئ ../dir/../dir2/foo.exe.map]
         -o ../dir2/foo.exe -Map=../dir/%.bar [يُنشئ ../dir/../dir2/foo.exe.bar]
    

من الخطأ تحديد أكثر من محرف "%" واحد.

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

ld عادة ما يحسن السرعة على حساب استخدام الذاكرة عبر تخبئة جداول الرموز لملفات المدخلات في الذاكرة. هذا الخيار يخبر ld بدلاً من ذلك بالتحسين لاستخدام الذاكرة، عن طريق إعادة قراءة جداول الرموز حسب الضرورة. قد يكون هذا مطلوباً إذا نفدت مساحة الذاكرة من ld أثناء ربط ملف تنفيذي كبير.
الإبلاغ عن مراجع الرموز غير المحلولة من ملفات الكائنات العادية. يتم ذلك حتى لو كان الرابط ينشئ مكتبة مشتركة غير رمزية. يتحكم المفتاح --[no-]allow-shlib-undefined في سلوك الإبلاغ عن المراجع غير المحلولة الموجودة في المكتبات المشتركة التي يتم ربطها.

يمكن التراجع عن آثار هذا الخيار باستخدام "-z undefs".

عادةً ما يبلغ الرابط عن خطأ فادح عندما يُعرف رمز عدة مرات. تسمح هذه الخيارات بتعريفات متعددة وسيُستخدم التعريف الأول.
يسمح أو يمنع الرموز غير المعرفة في المكتبات المشتركة. هذا المفتاح مشابه لـ --no-undefined إلا أنه يحدد السلوك عندما تكون الرموز غير المعرفة في مكتبة مشتركة بدلاً من ملف كائن عادي. ولا يؤثر ذلك على كيفية التعامل مع الرموز غير المعرفة في ملفات الكائنات العادية.

السلوك الافتراضي هو الإبلاغ عن أخطاء لأي رموز غير معرفة يُشار إليها في المكتبات المشتركة إذا كان الرابط يُستخدم لإنشاء ملف تنفيذي، ولكن السماح بها إذا كان الرابط يُستخدم لإنشاء مكتبة مشتركة.

الأسباب للسماح بمراجع رموز غير محددة في المكتبات المشتركة المحددة في وقت الربط هي أن:

  • المكتبة المشتركة المحددة في وقت الربط قد لا تكون هي نفسها المتوفرة في وقت التحميل، لذا قد يكون الرمز قابلاً للحل فعليًا في وقت التحميل.
  • هناك بعض أنظمة التشغيل، مثل BeOS و HPPA، حيث تكون الرموز غير المعرفة في المكتبات المشتركة أمرًا طبيعيًا.

    على سبيل المثال، تقوم نواة BeOS بترقيع المكتبات المشتركة في وقت التحميل لاختيار الدالة الأكثر ملاءمة للبنية الحالية. يُستخدم هذا، على سبيل المثال، لاختيار دالة memset مناسبة ديناميكيًا.

إذا قُدم هذا الخيار، فسيقوم الرابط باستدعاء scriptname كلما وُجد خطأ. ولكن حالياً، يُدعم نوعان فقط من الأخطاء: الرموز المفقودة والمكتبات المفقودة. سيُمرر وسيطان إلى السكربت: الكلمة المفتاحية "undefined-symbol" أو "missing-lib" و name الخاص بالرمز غير المعرف أو المكتبة المفقودة. القصد هو أن يقدم السكربت اقتراحات للمستخدم حول المكان الذي قد يوجد فيه الرمز أو المكتبة. بعد انتهاء السكربت، سيُعرض بلاغ خطأ الرابط العادي.

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

عادةً ما يتجاهل الرابط الرمز عندما يكون له إصدار غير محدد. هذا الخيار يمنع الرموز ذات الإصدار غير المحدد وسيُصدر خطأ فادح بدلاً من ذلك.
أنشئ واستخدم نسخة رمز مبدئية (soname) للرموز المصدرة غير المزودة بنسخة.
أنشئ واستخدم نسخة رمز مبدئية (soname) للرموز المستوردة غير المزودة بنسخة.
عادةً ما يُصدر ld خطأً إذا حاولت ربط ملفات مدخلات غير متطابقة لسبب ما، ربما لأنه جرى تصريفها لمعالجات مختلفة أو لترتيب بايتات (endiannesses) مختلف. يخبر هذا الخيار ld بأنه يجب أن يسمح بمثل هذه الأخطاء المحتملة بصمت. يجب استخدام هذا الخيار بحذر فقط، في الحالات التي تكون قد اتخذت فيها إجراءً خاصًا يضمن أن أخطاء الرابط غير مناسبة.
عادةً ما يُصدر ld تحذيرًا إذا وجد مكتبة غير متوافقة أثناء البحث عن المكتبات. هذا الخيار يُسكت هذا التحذير.
أوقف مفعول الخيار --whole-archive لملفات الأرشيف اللاحقة.
الاحتفاظ بملف المخرجات القابل للتنفيذ طالما أنه لا يزال صالحًا للاستخدام. عادةً، لن ينتج الرابط ملف مخرجات إذا واجه أخطاء أثناء عملية الربط؛ حيث يخرج دون كتابة ملف مخرجات عند إصدار أي خطأ مهما كان.
البحث في أدلة المكتبات المحددة صراحةً في سطر الأوامر فقط. ويتم تجاهل أدلة المكتبات المحددة في سكريبتات الرابط (بما في ذلك سكريبتات الرابط المحددة في سطر الأوامر).
قد يُضبط ld لدعم أكثر من نوع من ملفات الكائنات. إذا ضُبط ld بهذه الطريقة، فيمكنك استخدام خيار --oformat لتحديد التنسيق الثنائي لملف الكائن المخرج. حتى عندما يُضبط ld لدعم تنسيقات كائنات بديلة، فلا تحتاج عادةً لتحديد هذا، حيث ينبغي ضبط ld لينتج كتنسيق مخرج مبدئي التنسيق الأكثر شيوعاً على كل حاسوب. output-format هو سلسلة نصية، وهي اسم تنسيق معين تدعمه مكتبات BFD. (يمكنك سرد التنسيقات الثنائية المتاحة باستخدام objdump -i.) يمكن لأمر السكربت "OUTPUT_FORMAT" أيضاً تحديد تنسيق المخرج، ولكن هذا الخيار يتجاوزه.
أنشئ مكتبة استيراد في file تقابل الملف التنفيذي الذي يولده الموصل (مثل برنامج DLL أو ELF). مكتبة الاستيراد هذه (والتي يجب تسميتها "*.dll.a" أو "*.a" لملفات DLL) يمكن استخدامها لوصل العملاء بالملف التنفيذي المولد؛ هذا السلوك يجعل من الممكن تخطي خطوة إنشاء مكتبة استيراد منفصلة (مثل "dlltool" لملفات DLL). هذا الخيار متاح فقط لمنافذ الموصل المستهدفة لـ i386 PE و ELF.
أنشئ ملفًا تنفيذيًا مستقلاً عن الموضع. هذا مدعوم حاليًا فقط على منصات ELF. تُنقل الملفات التنفيذية المستقلة عن الموضع بواسطة الموصل الديناميكي إلى العنوان الافتراضي الذي يختاره نظام التشغيل لها، والذي قد يختلف بين الاستدعاءات. تُوسم بـ ET_DYN في ترويسة ملف ELF، لكنها تختلف عن المكتبات المشتركة بعدة طرق. لا يمكن، بشكل خاص، تجاوز الرموز المعرفة في PIE مبدئيًا بواسطة كائن آخر كما يمكن في المكتبات المشتركة.
أنشئ ملفًا تنفيذيًا معتمدًا على الموضع. هذا هو المبدئي.
يُتجاهل هذا الخيار من أجل التوافقية مع لينكس.
يُتجاهل هذا الخيار من أجل التوافقية مع SVR4.
خيار ذو تأثيرات معتمدة على الآلة. هذا الخيار مدعوم فقط في أهداف قليلة.

في بعض المنصات يقوم خيار --relax بإجراء تحسينات عامة خاصة بالهدف تصبح ممكنة عندما يقوم الرابط بحل العنونة في البرنامج، مثل تبسيط أوضاع العنونة، وتوليد تعليمات جديدة، واختيار نسخ أقصر من التعليمات الحالية، ودمج القيم الثابتة.

في بعض المنصات، قد تجعل تحسينات وقت الربط العامة هذه التنقيح الرمزي للملف التنفيذي الناتج مستحيلاً. هذا هو الحال المعروف لمعالجات عائلة Matsushita MN10200 و MN10300.

في المنصات التي تدعم هذه الميزة، سيقوم الخيار --no-relax بتعطيلها.

في المنصات التي لا تدعم هذه الميزة، يتم قبول الخيارين --relax و --no-relax، ولكن يجري تجاهلهما.

الاحتفاظ بـ فقط الرموز المدرجة في الملف filename، ونبذ جميع الرموز الأخرى. filename هو ببساطة ملف مسطح، مع اسم رمز واحد لكل سطر. هذا الخيار مفيد بشكل خاص في البيئات (مثل VxWorks) حيث يتم تجميع جدول رموز عالمي كبير تدريجيًا، للحفاظ على ذاكرة وقت التشغيل.

--retain-symbols-file لا يتجاهل الرموز غير المعرفة، أو الرموز المطلوبة لعمليات إعادة التوطين.

يمكنك تحديد --retain-symbols-file مرة واحدة فقط في سطر الأوامر. إنه يتخطى الخيارين -s و -S.

أضف دليلًا إلى مسار بحث مكتبة وقت التشغيل. يُستخدم هذا عند ربط ملف ELF تنفيذي بأجسام مشتركة. تُسلسل جميع معاملات -rpath وتُمرر إلى رابط وقت التشغيل، الذي يستخدمها لتحديد موقع الأجسام المشتركة وقت التشغيل.

يُستخدم الخيار -rpath أيضًا عند تحديد موقع الكائنات المشتركة المطلوبة بواسطة الكائنات المشتركة المضمنة صراحة في الرابط؛ انظر وصف الخيار -rpath-link. البحث في -rpath بهذه الطريقة مدعوم فقط بواسطة الروابط الأصلية والروابط المتقاطعة (cross linkers) التي ضُبطت باستخدام خيار --with-sysroot.

إذا لم يُستخدم -rpath عند ربط ملف ELF تنفيذي، ستُستخدم محتويات متغير البيئة "LD_RUN_PATH" إذا كان معرفا.

يمكن استخدام الخيار -rpath أيضًا على نظام SunOS. مبدئيًا، في SunOS، سيقوم الرابط بتكوين مسار بحث وقت التشغيل من جميع خيارات -L المعطاة له. إذا استُخدم خيار -rpath، فسيُشكل مسار بحث وقت التشغيل حصريًا باستخدام خيارات -rpath، مع تجاهل خيارات -L. قد يكون هذا مفيدًا عند استخدام gcc، الذي يضيف العديد من خيارات -L التي قد تكون على أنظمة ملفات موصولة عبر NFS.

للتوافق مع روابط ELF الأخرى، إذا تبع الخيار -R اسم مجلد بدلاً من اسم ملف، فسيتم التعامل معه كخيار -rpath.

عند استخدام ELF أو SunOS، قد تتطلب مكتبة مشتركة واحدة مكتبة أخرى. يحدث هذا عندما يتضمن ربط "ld -shared" مكتبة مشتركة كواحد من ملفات المدخلات.

عندما يواجه المرابط مثل هذه التبعية أثناء إجراء ربط غير مشترك وغير قابل لإعادة التوطين، فإنه سيحاول آليًا تحديد موقع المكتبة المشتركة المطلوبة وتضمينها في الربط، إذا لم تكن مضمنة صراحة. في مثل هذه الحالة، تُبحث عدة مجلدات كما هو موضح أدناه. يحدد الخيار -rpath-link المجموعة الأولى من المجلدات التي سيُبحث فيها. قد يحدد هذا الخيار تسلسلاً من أسماء المجلدات إما بتقديم قائمة من الأسماء مفصولة بنقطتين، أو بالظهور عدة مرات.

يمكن أن تظهر العلامتان $ORIGIN و $LIB في أدلة البحث هذه. وسيُستبدلان بالمسار الكامل للدليل الذي يحتوي على البرنامج أو الكائن المشترك في حالة $ORIGIN، وإما بـ lib - للثنائيات ذات 32 بت - أو lib64 - للثنائيات ذات 64 بت - في حالة $LIB.

يمكن أيضًا استخدام الصيغة البديلة لهذه الرموز - ${ORIGIN} و ${LIB}. الرمز $PLATFORM غير مدعوم.

يجب استخدام الخيار --rpath-link بحذر لأنه يتجاوز مسار البحث الذي قد يكون مجمعًا بشكل ثابت داخل مكتبة مشتركة. في مثل هذه الحالة، من الممكن استخدام مسار بحث مختلف دون قصد عما كان سيستخدمه رابط وقت التشغيل.

عندما تكون هناك حاجة لمكتبات مشتركة إضافية، سيبحث الموصل في الأدلة بالترتيب المدرج أدناه للعثور عليها. لاحظ مع ذلك أن هذا ينطبق فقط على المكتبات الإضافية اللازمة لتلبية المكتبات المشتركة المضمنة بالفعل. لا ينطبق هذا على المكتبات المضمنة عبر خيار سطر الأوامر -l. لا تُجرى عمليات البحث عن مكتبات -l إلا في الأدلة المحددة بخيار -L.

1.
أي مجلدات محددة بواسطة خيارات -rpath-link.
2.
أي مجلدات محددة بواسطة خيارات -rpath. الفرق بين -rpath و -rpath-link هو أن المجلدات المحددة بخيارات -rpath تُضمّن في الملف القابل للتنفيذ وتُستخدم وقت التشغيل، بينما يكون الخيار -rpath-link فعالاً وقت الوصل فقط. البحث في -rpath بهذه الطريقة مدعوم فقط بواسطة الوصلات الأصلية والوصلات العابرة التي جرت تهيئتها بخيار --with-sysroot.
3.
في نظام ELF، بالنسبة للروابط الأصلية، إذا لم تُستخدم الخيارات -rpath و -rpath-link، سيجري البحث في محتويات متغير البيئة "LD_RUN_PATH".
4.
في SunOS، إذا لم يُستخدم الخيار -rpath، سيجري البحث في أي أدلة محددة باستخدام الخيارات -L.
5.
بالنسبة لرابط أصيل، ابحث في محتويات متغير البيئة "LD_LIBRARY_PATH".
6.
بالنسبة لرابط ELF أصيل، يتم البحث في المجلدات الموجودة في "DT_RUNPATH" أو "DT_RPATH" للمكتبة المشتركة عن المكتبات المشتركة التي تحتاجها. يتم تجاهل مدخلات "DT_RPATH" في حال وجود مدخلات "DT_RUNPATH".
7.
بالنسبة لرابط لنظام لينكس، إذا وُجد الملف /etc/ld.so.conf، فسيتم استخدام قائمة المجلدات الموجودة في ذلك الملف. ملاحظة: يُسبق مسار هذا الملف بقيمة "sysroot" إذا كانت محددة، ثم أي سلسلة "prefix" إذا عُيّن الرابط بخيار --prefix=<path>.
8.
بالنسبة لرابط أصيل على نظام FreeBSD، يتم البحث في أي مجلدات محددة بواسطة ماكرو "_PATH_ELF_HINTS" المعرف في ملف الترويسة elf-hints.h.
9.
أي مجلدات محددة بأمر "SEARCH_DIR" في برنامج وصل نصي مُعطى في سطر الأوامر، بما في ذلك البرامج النصية المحددة بواسطة -T (وليس -dT).
10.
الأدلة الافتراضية، عادة /lib و /usr/lib.
11.
أي مجلدات محددة بواسطة ملحق LDPT_SET_EXTRA_LIBRARY_PATH.
12.
أي مجلدات محددة بأمر "SEARCH_DIR" في برنامج وصل نصي مبدئي.

ملاحظة ومع ذلك في الأنظمة القائمة على لينكس هناك تحذير إضافي: إذا كان خيار --as-needed نشطًا و جرى تحديد موقع مكتبة مشتركة من شأنها عادةً تلبية البحث و هذه المكتبة ليس لها وسم DT_NEEDED لـ libc.so و كان هناك مكتبة مشتركة لاحقًا في مجموعة أدلة البحث تلبي البحث أيضًا و هذه المكتبة المشتركة الثانية لها وسم DT_NEEDED لـ libc.so فإنه سيجري اختيار المكتبة الثانية بدلاً من الأولى.

إذا لم يُعثر على المكتبة المشتركة المطلوبة، فسيصدر الرابط (linker) تحذيراً ويستمر في عملية الربط.

يُستخدم هذا الخيار لتعزيز سيناريو الموصل الحالي بتعيين إضافي لأقسام المدخلات إلى أقسام المخرجات. يجب أن يستخدم هذا الملف نفس الصيغة لـ "SECTIONS" المستخدمة في سيناريوهات الموصل العادية، ولكن لا ينبغي أن يفعل أي شيء آخر سوى وضع أقسام المدخلات في أقسام المخرجات. @pxref{SECTIONS}

القيد الثاني على سكربت ترتيب الأقسام هو أنه لا يمكنه إلا الإشارة إلى أقسام المخرجات المعرفة بالفعل بواسطة أي سكربت رابط قيد الاستخدام حاليًا. (أي سكربت الرابط المبدئي أو سكربت محدد في سطر الأوامر). ومع ذلك، فإن فائدة سكربت ترتيب الأقسام هي أن أقسام المدخلات تُسند إلى بداية أقسام المخرجات، بحيث يمكنها ضمان ترتيب الأقسام في قسم المخرجات. على سبيل المثال، تخيل أن سكربت الرابط المبدئي يبدو هكذا:

        SECTIONS {
          .text : { *(.text.hot) ; *(.text .text.*) }
          .data : { *(.data.big) ; *(.data .data.*) }
          }
    

ثم إذا استُخدم ملف ترتيب أقسام مثل هذا:

          .text : { *(.text.first) ; *(.text.z*) }
          .data : { foo.o(.data.first) ; *(.data.small) }
    

سيكون هذا مكافئًا لسيناريو موصل مثل هذا:

        SECTIONS {
          .text : { *(.text.first) ; *(.text.z*) ; *(.text.hot) ; *(.text .text.*) }
          .data : { foo.o(.data.first) ; *(.data.small) ; *(.data.big) ; *(.data .data.*) }
          }
    

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

أنشئ مكتبة مشتركة. هذا مدعوم حاليًا فقط على منصات ELF و XCOFF و SunOS. في SunOS، سيقوم الموصل آليًا بإنشاء مكتبة مشتركة إذا لم يُستخدم الخيار -e وكانت هناك رموز غير معرفة في الوصل.
يخبر هذا الخيار ld بفرز الرموز المشتركة حسب المحاذاة بترتيب تصاعدي أو تنازلي عند وضعها في أقسام المخرجات المناسبة. محاذات الرموز المأخوذة في الاعتبار هي ستة عشر بايت أو أكبر، وثمانية بايت، وأربعة بايت، وبايتان، وبايت واحد. هذا لمنع الفجوات بين الرموز بسبب قيود المحاذاة. إذا لم يُحدد ترتيب فرز، فيُفترض الترتيب التنازلي.
سيطبق هذا الخيار "SORT_BY_NAME" على جميع أنماط الأقسام التي تستخدم محارف البدل في سيناريو الموصل.
سيطبق هذا الخيار "SORT_BY_ALIGNMENT" على جميع أنماط الأقسام التي تستخدم محارف البدل في سيناريو الموصل.
يحدد هذا الخيار عدد الفتحات الفارغة التي يجب تركها في قسم .dynamic لكائنات ELF المشتركة. قد تكون الفتحات الفارغة مطلوبة بواسطة أدوات ما بعد المعالجة، مثل prelinker. المبدئي هو 5.
مشابه لـ --split-by-reloc ولكنه ينشئ قسم إخراج جديد لكل ملف إدخال عند الوصول إلى الحجم size. القيمة الافتراضية لـ size هي 1 إذا لم تُعطَ.
يحاول إنشاء أقسام إضافية في ملف المخرجات بحيث لا يحتوي أي قسم مخرجات منفرد في الملف على أكثر من count من عمليات إعادة التوطين. يفيد هذا عند توليد ملفات ضخمة قابلة لإعادة التوطين لتنزيلها في نوى وقت حقيقي معينة بتنسيق ملفات الكائنات COFF؛ بما أن COFF لا يمكنه تمثيل أكثر من 65535 عملية إعادة توطين في قسم واحد. لاحظ أن هذا سيفشل في العمل مع تنسيقات ملفات الكائنات التي لا تدعم الأقسام التعسفية. لن يقوم الرابط بتقسيم أقسام المدخلات الفردية لإعادة التوزيع، لذا إذا احتوى قسم مدخلات واحد على أكثر من count من عمليات إعادة التوطين، فسيحتوي قسم مخرجات واحد على هذا العدد من عمليات إعادة التوطين. القيمة المبدئية لـ count هي 32768.
احسب واعرض إحصائيات حول عملية الموصل، مثل وقت التنفيذ واستخدام الذاكرة.

إذا لم يُقدَّم معطى filename الاختياري، فسيتم الإبلاغ عن المعلومات الأساسية فقط، وتُرسل إلى مجرى خرج الأخطاء القياسي. أما إذا قُدِّم معطى filename، فتُكتب المعلومات الموسعة في الملف المسمى. وإذا ضُبط filename على الرمز - فقط، تُرسل المعلومات الموسعة إلى مجرى الخرج القياسي. وإذا بدأ filename بـ +، فسيُفتح الملف في وضع الإلحاق بدلاً من وضع الكتابة فوق المحتوى.

إذا فُعّل الخيار -Map فستُسجل المعلومات أيضًا في ملف الخريطة. ملاحظة: إذا أُعطي كلا الخيارين --stats و -Map معاملات filename وكانت متطابقة، فستُكتب المعلومات مرة واحدة فقط لا مرتين.

إذا عُرف متغير البيئة "LD_STATS"، فإنه سيسلك مسلك خيار --stats. إذا كانت قيمة المتغير سلسلة نصية، فستُستخدم كاسم لملف تُسجل فيه المعلومات. وخلاف ذلك، ستُرسل المعلومات إلى دفق المخرج القياسي. يتيح استخدام متغير البيئة تسجيل الإحصائيات دون الحاجة إلى تعديل سطر أوامر الرابط. ملاحظة: إذا استُخدم كل من متغير البيئة وخيار --stats، فإن الخيار --stats تكون له الأولوية.

تشمل المعلومات الموسعة المُبلغ عنها وقت وحدة المعالجة المركزية المستخدم، وإذا كان استدعاء مكتبة النظام getrusage() متاحاً، فسيُسجل استخدام الذاكرة أيضاً. يُبلغ عن هذه المعلومات للأجزاء الفردية من عملية الربط التي يُشار إليها باسم phases. بالإضافة إلى ذلك، يُبلغ عن المعلومات أيضاً لمرحلة خاصة تسمى ALL تغطي عملية الربط بأكملها. لاحظ أن المراحل الفردية يمكن أن تحتوي على بعضها أو تتداخل، لذا لا ينبغي افتراض أن الموارد الإجمالية التي يستخدمها الرابط هي مجموع الموارد المستخدمة في المراحل الفردية.

بالإضافة إلى ذلك، عند الإبلاغ عن معلومات موسعة، يُضمن أيضاً إصدار الرابط، ووسائط سطر الأوامر، ووقت بدء الرابط. وهذا يسهل التعامل مع الحالة التي تُستدعى فيها روابط متعددة بواسطة نظام بناء وتحديد الوسائط التي كانت مسؤولة بالضبط عن إنتاج الإحصائيات المُبلغ عنها.

يبدو المخرج الموسع شيئًا كهذا:

        Stats: linker version: (GNU Binutils) 2.44.50.20250401
        Stats: linker started: Wed Apr  2 09:36:41 2025
        Stats: args: ld -z norelro -z nomemory-seal -z no-separate-code -o a.out [...]
       
        Stats: phase               cpu time    memory      user time    system time   
        Stats: name                (microsec)   (KiB)      (seconds)      (seconds)   
        Stats: ALL                   390082    217740              0              0   
        Stats: ctf processing            12         0              0              0   
        Stats: string merge            1324         0              0              0   
        Stats: parsing                  349       288              0              0   
        Stats: plugins                    1         0              0              0   
        Stats: processing files      259616    214524              0              0   
        Stats: write                 116493         0              0              0
    
يعطّل الإبلاغ عن إحصائيات الاستخدام، في حال تم تفعيلها عبر خيار سطر الأوامر --stats أو متغير البيئة LD_STATS.
استخدم directory كموقع لـ sysroot، متجاوزًا القيمة المبدئية وقت الضبط. هذا الخيار مدعوم فقط من قبل الروابط التي ضُبطت باستخدام --with-sysroot.
يُستخدم هذا بواسطة الأهداف القائمة على COFF/PE لإنشاء ملف كائن مرتبط بمهمة حيث حُوّلت جميع الرموز العامة إلى رموز ساكنة.
لبعض الأهداف، تختلف مخرجات ld في بعض النواحي عن مخرجات بعض الروابط الموجودة. يطلب هذا المفتاح من ld استخدام التنسيق التقليدي بدلاً من ذلك.

على سبيل المثال، في نظام SunOS، يدمج ld المداخل المتكررة في جدول سلاسل الرموز. يمكن لهذا أن يقلل حجم ملف المخرجات الذي يحتوي على معلومات تنقيح كاملة بنسبة تزيد عن 30 بالمائة. لسوء الحظ، لا يستطيع برنامج "dbx" الخاص بنظام SunOS قراءة البرنامج الناتج (بينما لا يواجه "gdb" أي مشكلة). يخبر مفتاح --traditional-format الرابط ld بعدم دمج المداخل المتكررة.

تحديد موقع قسم في ملف المخرجات عند العنوان المطلق المعطى بواسطة org. يمكنك استخدام هذا الخيار عدة مرات حسب الضرورة لتحديد موقع أقسام متعددة في سطر الأوامر. يجب أن يكون org عدداً صحيحاً ست عشرياً واحداً؛ للتوافق مع الموصلات الأخرى، يمكنك حذف 0x البادئة المرتبطة عادةً بالقيم الست عشرية. ملاحظة: يجب ألا توجد مسافة بيضاء بين sectionname، وعلامة التساوي ("=")، وorg.
عند استخدام ELF، هو نفسه -Ttext-segment، حيث يقوم كلا الخيارين فعليًا بضبط عنوان الأساس لملف ELF التنفيذي.

عند استخدام PE، استخدم value كعنوان أساس لبرنامجك أو dll. هذا هو أدنى موقع ذاكرة سيُستخدم عند تحميل البرنامج أو dll. لتقليل الحاجة إلى إعادة التوطين وتحسين أداء ملفات dll الخاصة بك، يجب أن يكون لكل منها عنوان أساس فريد ولا يتداخل مع أي dll أخرى. المبدئي هو 0x400000 للملفات التنفيذية، و 0x10000000 لملفات dll.

نفس --section-start، مع استخدام ".bss" أو ".data" أو ".text" كـ sectionname.
عند إنشاء ملف تنفيذي ELF، فإنه سيضبط عنوان أول بايت من الشريحة الأولى. لاحظ أنه عند استخدام -pie مع -Ttext-segment=org، يوسم الملف التنفيذي المخرج بـ ET_EXEC بحيث يضمن أن يكون عنوان أول بايت من شريحة النص هو org في وقت التشغيل.
عند إنشاء ملف تنفيذي ELF أو كائن مشترك لهدف تكون فيه البيانات المخصصة للقراءة فقط في شريحتها الخاصة المنفصلة عن نص التنفيذ، فإنه سيضبط عنوان أول بايت من شريحة البيانات المخصصة للقراءة فقط.
عند إنشاء ملف تنفيذي ELF أو كائن مشترك لنموذج الذاكرة المتوسط x86-64، فإنه سيضبط عنوان أول بايت من شريحة ldata.
حدّد كيفية التعامل مع الرموز غير المحلولة. هناك أربع قيم ممكنة لـ method:
لا تبلغ عن أي رموز غير محلولة.
الإبلاغ عن جميع الرموز غير المحلولة. هذا هو المبدئي.
الإبلاغ عن الرموز غير المحلولة الموجودة في المكتبات المشتركة، مع تجاهلها إذا كانت قادمة من ملفات كائنات عادية.
يُبلغ عن الرموز غير المحلولة التي تأتي من ملفات الكائنات العادية، ولكن يتجاهلها إذا جاءت من المكتبات المشتركة. يمكن أن يكون هذا مفيداً عند إنشاء ثنائي ديناميكي ويُعرف أن جميع المكتبات المشتركة التي ينبغي أن يشير إليها مضمنة في سطر أوامر الرابط.

يمكن أيضًا التحكم في سلوك المكتبات المشتركة بمفردها من خلال خيار --[no-]allow-shlib-undefined.

عادةً ما يُولد الرابط رسالة خطأ لكل رمز غير محلول جرى الإبلاغ عنه، ولكن الخيار --warn-unresolved-symbols يمكن أن يغير هذا إلى تحذير.

اعرض رقم إصدار ld واسرد محاكيات الرابط المدعومة. اعرض ملفات الإدخال التي يمكن فتحها والتي لا يمكن فتحها. اعرض سكريبت الرابط المستخدم من قبل الرابط. إذا كان وسيط الرقم NUMBER الاختياري أكبر من 1، فستُعرض أيضاً حالة رموز الملحق.
تحديد اسم سكربت الإصدار للرابط. يُستخدم هذا عادةً عند إنشاء مكتبات مشتركة لتحديد معلومات إضافية حول التسلسل الهرمي للإصدارات للمكتبة التي يتم إنشاؤها. هذا الخيار مدعوم بالكامل فقط على منصات ELF التي تدعم المكتبات المشتركة؛ انظر VERSION. وهو مدعوم جزئياً على منصات PE، والتي يمكنها استخدام سكربتات الإصدار لتصفية رؤية الرموز في وضع التصدير التلقائي: أي رموز تم تمييزها كـ local في سكربت الإصدار لن يتم تصديرها.
حذر عند دمج رمز مشترك مع رمز مشترك آخر أو مع تعريف رمز. تسمح مرابط يونكس بهذه الممارسة غير المنضبطة نوعًا ما، لكن المرابط في بعض أنظمة التشغيل الأخرى لا تسمح بذلك. يتيح لك هذا الخيار العثور على المشاكل المحتملة الناتجة عن دمج الرموز العامة. لسوء الحظ، تستخدم بعض مكتبات C هذه الممارسة، لذا قد تتلقى بعض التحذيرات بشأن الرموز في المكتبات وكذلك في برامجك.

هناك ثلاثة أنواع من الرموز العالمية، موضحة هنا بأمثلة بلغة C:

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

يمكن أن ينتج الخيار --warn-common خمسة أنواع من التحذيرات. يتكون كل تحذير من زوج من الأسطر: الأول يصف الرمز الذي جرت مواجهته للتو، والثاني يصف الرمز السابق الذي جرت مواجهته بنفس الاسم. سيكون أحد الرمزين أو كلاهما رمزًا مشتركًا.

1.
تحويل رمز شائع إلى مرجع، لوجود تعريف للرمز بالفعل.

        <file>(<section>): warning: common of `<symbol>'
           تخطاه التعريف
        <file>(<section>): warning: عُرّف هنا
    
2.
تحويل رمز شائع إلى مرجع، بسبب مواجهة تعريف لاحق للرمز. هذه هي نفس الحالة السابقة، باستثناء أن الرموز تُصادف بترتيب مختلف.

        <file>(<section>): warning: definition of `<symbol>'
           يتخطى الشائع
        <file>(<section>): warning: الشائع موجود هنا
    
3.
دمج رمز مشترك مع رمز مشترك سابق بنفس الحجم.

        <file>(<section>): warning: شائعات متعددة
           لـ `<symbol>'
        <file>(<section>): warning: الشائع السابق موجود هنا
    
4.
دمج رمز مشترك مع رمز مشترك سابق أكبر.

        <file>(<section>): warning: common of `<symbol>'
           تخطاه شائع أكبر
        <file>(<section>): warning: الشائع الأكبر موجود هنا
    
5.
دمج رمز مشترك مع رمز مشترك سابق أصغر. هذا هو نفس الحالة السابقة، باستثناء أن الرموز تظهر بترتيب مختلف.

        <file>(<section>): warning: common of `<symbol>'
           يتخطى شائعاً أصغر
        <file>(<section>): warning: الشائع الأصغر موجود هنا
    
حذر إذا استُخدمت أي منشئات عامة. هذا مفيد فقط لعدد قليل من تنسيقات ملفات الكائنات. بالنسبة لتنسيقات مثل COFF أو ELF، لا يمكن للمرابط اكتشاف استخدام المنشئات العامة.
في منصات ELF قد يُولد الرابط رسائل تحذير إذا طُلب منه إنشاء ملف مخرجات يحتوي على مكدس تنفيذي. هناك ثلاث حالات ممكنة:
1.
لا تولد أي تحذيرات.
2.
قم دائماً بإنشاء تحذيرات، حتى إذا تم طلب مكدس قابل للتنفيذ عبر خيار سطر الأوامر -z execstack.
3.
توليد تحذير فقط إذا طلب ملف كائني مكدسًا تنفيذيًا، ولكن ليس إذا جرى استخدام الخيار -z execstack.

تعتمد الحالة الافتراضية على كيفية إعداد الرابط عند بنائه. يضع الخيار --no-warn-execstack الرابط دائمًا في حالة "عدم التحذير". يضع الخيار --warn-execstack الرابط في حالة "التحذير دائمًا". يضع الخيار --warn-execstack-objects الرابط في حالة "التحذير لملفات الكائنات فقط".

ملاحظة: يمكن لملفات المدخلات بتنسيق ELF تحديد حاجتها لمكدس تنفيذي من خلال وجود جزء .note.GNU-stack مع ضبط بت التنفيذ في أعلام الجزء. ويمكنها تحديد أنها لا تحتاج لمكدس تنفيذي من خلال وجود نفس الجزء، ولكن بدون ضبط بت علم التنفيذ. إذا لم يكن لملف المدخلات جزء .note.GNU-stack فإن السلوك الافتراضي يعتمد على الهدف. بالنسبة لبعض الأهداف، فإن غياب مثل هذا الجزء يعني أن المكدس التنفيذي مطلوب. هذه مشكلة غالبًا في ملفات التجميع المكتوبة يدويًا.

إذا كان الرابط سيولد رسالة تحذير حول مكدس (stack) قابل للتنفيذ، فإن خيار --error-execstack سيحول ذلك التحذير إلى خطأ بدلاً من ذلك. ملاحظة - لا يغير هذا الخيار حالة توليد تحذير execstack الخاص بالرابط. استخدم --warn-execstack أو --warn-execstack-objects لضبط حالة تحذير معينة.

سيعيد الخيار --no-error-execstack السلوك المبدئي المتمثل في توليد رسائل تحذير.

حذر إذا كانت هناك حاجة لقيم مؤشر عامة متعددة في ملف المخرج. هذا ذو معنى فقط لمعالجات معينة، مثل Alpha. تحديدًا، تضع بعض المعالجات الثوابت ذات القيم الكبيرة في قسم خاص. يشير مسجل خاص (المؤشر العام) إلى منتصف هذا القسم، بحيث يمكن تحميل الثوابت بكفاءة عبر نمط عنونة نسبي لمسجل الأساس. وبما أن الإزاحة في النمط النسبي لمسجل الأساس ثابتة وصغيرة نسبيًا (مثلاً 16 بت)، فإن هذا يحد من الحجم الأقصى لمجمع الثوابت. لذا، في البرامج الكبيرة، غالبًا ما يكون من الضروري استخدام قيم مؤشرات عامة متعددة لتتمكن من عنونة كافة الثوابت الممكنة. يؤدي هذا الخيار إلى إصدار تحذير كلما حدثت هذه الحالة.
التحذير مرة واحدة فقط لكل رمز غير معرف، بدلاً من مرة واحدة لكل وحدة تشير إليه.
حذر إذا أنشأ المرابط شريحة قابلة للتحميل وغير صفرية الحجم لها أعلام أذونات القراءة والكتابة والتنفيذ الثلاثة معًا. تمثل مثل هذه الشريحة ثغرة أمنية محتملة. بالإضافة إلى ذلك، ستُولد تحذيرات إذا أُنشئت شريحة تخزين محلية للخيوط (TLS) مع ضبط علم إذن التنفيذ، بغض النظر عما إذا كانت أعلام القراءة أو الكتابة مضبوطة أم لا.

تُفعل هذه التحذيرات مبدئيًا. يمكن تعطيلها عبر خيار --no-warn-rwx-segments وإعادة تفعيلها عبر خيار --warn-rwx-segments.

إذا كان الرابط سيصدر رسالة تحذير حول شريحة (segment) قابلة للتنفيذ وللكتابة، أو شريحة TLS قابلة للتنفيذ، فإن خيار --error-rwx-segments سيحول هذا التحذير إلى خطأ بدلاً من ذلك. سيستعيد خيار --no-error-rwx-segments السلوك الافتراضي المتمثل في مجرد إصدار رسالة تحذير.

ملاحظة - خيار --error-rwx-segments لا يقوم بحد ذاته بتفعيل التحذيرات بشأن هذه الأجزاء. هذه التحذيرات إما مفعلة افتراضيًا، إذا جرى تهيئة الرابط بهذه الطريقة، أو عبر خيار سطر الأوامر --warn-rwx-segments.

حذر إذا تغير عنوان قسم المخرج بسبب المحاذاة. عادةً، تُضبط المحاذاة بواسطة قسم المدخل. لن يُغير العنوان إلا إذا لم يُحدد صراحة؛ أي إذا لم يحدد أمر "SECTIONS" عنوان بدء للقسم.
حذر إذا أضاف المرابط DT_TEXTREL إلى ملف تنفيذي مستقل عن الموقع أو كائن مشترك.
حذر إذا كان للكائن كود آلة ELF بديل.
إذا كان الرابط سيبلغ عن رمز لم يتم حله (انظر الخيار --unresolved-symbols) فإنه عادةً ما يصدر خطأً. يجعل هذا الخيار الرابط يصدر تحذيرًا بدلاً من ذلك.
يستعيد هذا سلوك الرابط المبدئي في توليد الأخطاء عندما يُبلغ عن رموز غير محلولة.
لكل أرشيف مذكور في سطر الأوامر بعد خيار --whole-archive، ضمن كل ملف كائن في الأرشيف في الرابط، بدلاً من البحث في الأرشيف عن ملفات الكائنات المطلوبة. يُستخدم هذا عادةً لتحويل ملف أرشيف إلى مكتبة مشتركة، مما يجبر تضمين كل كائن في المكتبة المشتركة الناتجة. يمكن استخدام هذا الخيار أكثر من مرة.

ملاحظتان عند استخدام هذا الخيار من gcc: أولاً، gcc لا يعرف عن هذا الخيار، لذا يجب عليك استخدام -Wl,-whole-archive. ثانياً، لا تنسَ استخدام -Wl,-no-whole-archive بعد قائمة الأرشيفات الخاصة بك، لأن gcc سيضيف قائمة الأرشيفات الخاصة به إلى عملية الربط وقد لا تريد أن تؤثر هذه العلامة عليها أيضاً.

استخدم وظيفة غلاف لـ symbol. أي مرجع غير معرف لـ symbol سيُحل إلى "__wrap_symbol". أي مرجع غير معرف لـ "__real_symbol" سيُحل إلى symbol.

يمكن استخدام هذا لتوفير غلاف لدالة نظام. يجب استدعاء دالة الغلاف "__wrap_symbol". إذا أرادت استدعاء دالة النظام، فيجب عليها استدعاء "__real_symbol".

إليك مثال بسيط:

        void *
        __wrap_malloc (size_t c)
        {
          printf ("malloc called with %zu\n", c);
          return __real_malloc (c);
        }
    

إذا قمت بربط كود آخر بهذا الملف باستخدام --wrap malloc، فإن جميع الاستدعاءات لـ "malloc" ستستدعي الدالة "__wrap_malloc" بدلاً منها. استدعاء "__real_malloc" داخل "__wrap_malloc" سيقوم باستدعاء دالة "malloc" الحقيقية.

قد ترغب في توفير دالة "__real_malloc" أيضًا، بحيث تنجح الروابط بدون خيار --wrap. إذا فعلت ذلك، فيجب ألا تضع تعريف "__real_malloc" في نفس الملف مع "__wrap_malloc"؛ فإذا فعلت ذلك، فقد يحل المجمّع الاستدعاء قبل أن تتاح للموصل فرصة لفه إلى "malloc".

يقوم الرابط باستبدال المراجع غير المعرفة فقط. لذا، فإن المراجع الداخلية لوحدة الترجمة إلى symbol لا يتم حلها إلى "__wrap_symbol". في المثال التالي، لا يتم حل استدعاء "f" في "g" إلى "__wrap_f".

        int
        f (void)
        {
          return 123;
        }
       
        int
        g (void)
        {
          return f();
        }
    
طلب (--eh-frame-hdr) أو كبت (--no-eh-frame-hdr) إنشاء مقطع ".eh_frame_hdr" وترويسة شريحة ELF "PT_GNU_EH_FRAME".
طلب إنشاء معلومات فك (unwind) لـ ".eh_frame" لمقاطع الكود المولدة بواسطة الرابط مثل PLT. هذا الخيار مفعل مبدئيًا إذا كان فك المعلومات المولد بواسطة الرابط مدعومًا. كما يتحكم هذا الخيار في توليد معلومات تتبع المكدس ".sframe" لمقاطع الكود المولدة بواسطة الرابط مثل PLT.
يمكن لهذا الموصل إنشاء وسوم ELF الحيوية الجديدة. لكن أنظمة ELF القديمة قد لا تفهمها. إذا حددت --enable-new-dtags، فستُنشأ الوسوم الحيوية الجديدة عند الحاجة وتُهمل الوسوم الحيوية القديمة. إذا حددت --disable-new-dtags، فلن تُنشأ أي وسوم حيوية جديدة. مبدئيًا، لا تُنشأ الوسوم الحيوية الجديدة. لاحظ أن هذه الخيارات متاحة فقط لأنظمة ELF.
يضبط الحجم المبدئي لجداول التجزئة الخاصة بالرابط إلى عدد أولي قريب من number. يمكن أن تؤدي زيادة هذه القيمة إلى تقليل الوقت الذي يستغرقه الرابط لأداء مهامه، على حساب زيادة متطلبات ذاكرة الرابط. وبالمثل، يمكن أن يؤدي تقليل هذه القيمة إلى تقليل متطلبات الذاكرة على حساب السرعة.
يضبط نوع جدول (جداول) التجزئة الخاصة بالرابط. يمكن أن يكون style إما "sysv" لقسم ELF ".hash" التقليدي، أو "gnu" لقسم GNU ".gnu.hash" ذي النمط الجديد، أو "both" لكل من جداول تجزئة ELF التقليدية و GNU ذات النمط الجديد. يعتمد الإعداد المبدئي على كيفية ضبط الرابط، ولكنه في معظم الأنظمة القائمة على لينكس سيكون "both".
في منصات ELF، تتحكم هذه الخيارات في كيفية ضغط أجزاء تنقيح DWARF باستخدام zlib.

لا يضغط --compress-debug-sections=none أقسام DWARF الخاصة بالتنقيح. بينما يضغط --compress-debug-sections=zlib-gnu أقسام DWARF الخاصة بالتنقيح ويعيد تسميتها لتبدأ بـ .zdebug بدلاً من .debug. كما يضغط --compress-debug-sections=zlib-gabi أيضاً أقسام DWARF الخاصة بالتنقيح، ولكن بدلاً من إعادة تسميتها فإنه يضبط علامة SHF_COMPRESSED في ترويسات الأقسام.

الخيار --compress-debug-sections=zlib هو اسم مستعار لـ --compress-debug-sections=zlib-gabi.

--compress-debug-sections=zstd يضغط أقسام تنقيع DWARF باستخدام zstd.

لاحظ أن هذا الخيار يتجاوز أي ضغط في أجزاء التنقيح للمدخلات، لذا إذا جرى ربط ملف ثنائي باستخدام --compress-debug-sections=none على سبيل المثال، فإن أي أجزاء تنقيح مضغوطة في ملفات المدخلات سيجري فك ضغطها قبل نسخها إلى الملف الثنائي للمخرجات.

يختلف سلوك الضغط المبدئي اعتماداً على الهدف المعني وخيارات الضبط المستخدمة لبناء سلسلة الأدوات. يمكن تحديد المبدئي من خلال فحص المخرج من خيار --help الخاص بالرابط.

يقلل هذا الخيار من متطلبات الذاكرة في وقت تشغيل ld، على حساب سرعة الوصل. قُدم هذا الخيار لاختيار خوارزمية O(n^2) القديمة لتوليد ملف خريطة الوصل، بدلاً من خوارزمية O(n) الجديدة التي تستهلك ذاكرة أكبر بنحو 40% لتخزين الرموز.

أثر آخر لهذا المفتاح هو ضبط الحجم المبدئي لجدول التجزئة إلى 1021، مما يوفر الذاكرة مرة أخرى على حساب إطالة وقت تشغيل الرابط. لكن لا يُفعل هذا إذا استُخدم مفتاح --hash-size.

قد يُستخدم مفتاح --reduce-memory-overheads أيضًا لتمكين مقايضات أخرى في الإصدارات المستقبلية من الرابط (linker).

ld عادة ما يخبئ معلومات إعادة التوطين وجداول الرموز لملفات المدخلات في الذاكرة بحجم غير محدود. هذا الخيار يضبط الحد الأقصى لحجم الخبيئة إلى size.
طلب إنشاء مقطع ملاحظة ELF باسم ".note.gnu.build-id" أو مقطع COFF باسم ".buildid". محتويات الملاحظة هي بتات فريدة تعرف هذا الملف المربوط. يمكن أن يكون style هو "uuid" لاستخدام 128 بتًا عشوائيًا؛ أو "sha1" لاستخدام تجزئة SHA1 بطول 160 بت، أو "md5" لاستخدام تجزئة MD5 بطول 128 بت، أو "xx" لاستخدام XXHASH بطول 128 بت على الأجزاء المعيارية من محتويات المخرجات؛ أو "0xhexstring" لاستخدام سلسلة بتات مختارة محددة كعدد زوجي من الأرقام الست عشرية (تُتجاهل المحارف ("-" و ":") بين أزواج الأرقام). إذا حُذف style، يُستخدم "sha1".

تنتج أنماط "md5" و "sha1" و "xx" معرفاً يكون دائماً هو نفسه في ملف مخرج متطابق، ولكنه يكاد يكون فريداً بالتأكيد بين جميع ملفات المخرجات غير المتطابقة. ليس المقصود منه مقارنته كمجموع تحققي (checksum) لمحتويات الملف. قد يُغير ملف مرتبط لاحقاً بواسطة أدوات أخرى، ولكن سلسلة بتات معرف البناء (build ID) التي تحدد الملف المرتبط الأصلي لا تتغير.

تمرير "none" للنمط style يعطل الإعداد من أي خيارات "--build-id" سابقة في سطر الأوامر.

يطلب إنشاء قسم ملاحظة ELF من نوع ".note.package". محتويات الملاحظة تكون بتنسيق JSON، وفقاً لمواصفات البيانات الوصفية للحزمة. لمزيد من المعلومات انظر: https://systemd.io/ELF_PACKAGE_METADATA/ يدعم وسيط JSON ترميز النسبة المئوية وترميز %[string] التالي (حيث تشير string إلى الاسم في مراجع الأحرف المسماة في HTML): %[comma] للفاصلة ,، و %[lbrace] للقوس {، و %[quot] لعلامة الاقتباس "، و %[rbrace] للقوس }، و %[space] لحرف المسافة. إذا كان وسيط JSON مفقوداً أو فارغاً، فإن هذا سيعطل إنشاء ملاحظة البيانات الوصفية، إذا كانت قد مُكنت بواسطة ظهور سابق لخيار --package-metadata. إذا بُني الرابط باستخدام libjansson، فستُفحص صحة سلسلة JSON.

يدعم رابط i386 PE الخيار -shared، مما يؤدي إلى أن يكون المخرج مكتبة مرتبطة ديناميكيًا (DLL) بدلاً من ملف تنفيذي عادي. يجب تسمية المخرج "*.dll" عند استخدام هذا الخيار. بالإضافة إلى ذلك، يدعم الرابط تمامًا ملفات "*.def" القياسية، والتي يمكن تحديدها في سطر أوامر الرابط مثل ملف كائن (في الواقع، يجب أن تسبق الأرشيفات التي تصدر الرموز منها، لضمان ربطها، تمامًا مثل ملف كائن عادي).

بالإضافة إلى الخيارات المشتركة بين جميع الأهداف، يدعم رابط i386 PE خيارات إضافية لسطر الأوامر خاصة بهدف i386 PE. الخيارات التي تأخذ قيماً يمكن فصلها عن قيمها إما بمسافة أو بعلامة يساوي.

إذا أُعطيت، ستُصدر الرموز التي لها لاحقة stdcall (@nn) كما هي وأيضا مع إزالة اللاحقة. [هذا الخيار خاص بمنفذ الرابط المخصص لـ i386 PE]
استخدم file كاسم لملف تُحفظ فيه العناوين الأساسية لكافة عمليات إعادة التوطين اللازمة لتوليد DLLs باستخدام dlltool. [هذا خيار خاص بـ i386 PE]
أنشئ DLL بدلاً من ملف تنفيذي عادي. يمكنك أيضًا استخدام -shared أو تحديد "LIBRARY" في ملف ".def" المعطى. [هذا الخيار خاص بمنفذ الموصل المستهدف لـ i386 PE]
تضيف متغيرات PE لصيغة كائن COFF امتدادًا يسمح باستخدام أسماء أقسام أطول من ثمانية محارف، وهو الحد الطبيعي لـ COFF. مبدئيًا، لا يُسمح بهذه الأسماء إلا في ملفات الكائنات، لأن صور البرامج القابلة للتنفيذ المربوطة بالكامل لا تحمل جدول سلاسل COFF المطلوب لدعم الأسماء الأطول. كامتداد لغنو، من الممكن السماح باستخدامها في صور البرامج القابلة للتنفيذ أيضًا، أو (ربما بلا فائدة!) منعها في ملفات الكائنات، باستخدام هذين الخيارين. صور البرامج القابلة للتنفيذ التي تولد بهذه الأسماء الطويلة للأقسام غير قياسية قليلاً، لأنها تحمل جدول سلاسل، وقد تولد مخرجات مربكة عند فحصها بأدوات غير مدركة لـ PE من خارج غنو، مثل عارضي الملفات والمفرغين. ومع ذلك، يعتمد GDB على استخدام أسماء أقسام PE الطويلة للعثور على أقسام معلومات تنقيح Dwarf-2 في صورة قابلة للتنفيذ في وقت التشغيل، ولذا إذا لم يُحدد أي من الخيارين في سطر الأوامر، فسيقوم ld بتمكين أسماء الأقسام الطويلة، متجاوزًا السلوك المبدئي والصحيح تقنيًا، عندما يجد وجود معلومات تنقيح أثناء ربط صورة قابلة للتنفيذ وعدم تجريد الرموز. [هذا الخيار صالح لجميع المنافذ التي تستهدف PE في الرابط]
إذا وجد الرابط رمزًا لا يمكنه حله، فسيحاول إجراء "ربط ضبابي" من خلال البحث عن رمز معرف آخر يختلف فقط في تنسيق اسم الرمز (cdecl مقابل stdcall) وسيقوم بحل هذا الرمز بالربط مع المطابق له. على سبيل المثال، قد يتم ربط الرمز غير المعرف "_foo" بالدالة "_foo@12"، أو الرمز غير المعرف "_bar@16" بالدالة "_bar". عندما يقوم الرابط بذلك، فإنه يطبع تحذيرًا، حيث كان من المفترض عادةً أن يفشل الربط، ولكن أحيانًا قد تحتاج مكتبات الاستيراد المولدة من ملفات dll لأطراف ثالثة لهذه الميزة لتكون صالحة للاستخدام. إذا حددت --enable-stdcall-fixup، فسيتم تفعيل هذه الميزة بالكامل ولن يتم طباعة تحذيرات. وإذا حددت --disable-stdcall-fixup، فسيتم تعطيل هذه الميزة وتعتبر مثل هذه الاختلافات أخطاء. [هذا الخيار خاص بمنفذ الرابط الموجه لـ i386 PE]
بالنسبة لمعظم الأهداف، يكون بادئة الرموز المبدئية هي شرطة سفلية وتُعرف في وصف الهدف. من خلال هذا الخيار، يمكن تعطيل أو تمكين بادئة الرمز المبدئية المتمثلة في الشرطة السفلية.
إذا أُعطي، فستُصَدر جميع الرموز العالمية في الكائنات المستخدمة لبناء DLL بواسطة DLL. لاحظ أن هذا هو المبدئي إذا لم يكن هناك رموز مصدرة بخلاف ذلك. عندما تُصَدر الرموز صراحة عبر ملفات DEF أو ضمنياً عبر سمات الدوال، فإن المبدئي هو عدم تصدير أي شيء آخر ما لم يُعطَ هذا الخيار. لاحظ أن الرموز "DllMain@12"، و "DllEntryPoint@0"، و "DllMainCRTStartup@12"، و "impure_ptr" لن تُصَدر آلياً. أيضاً، الرموز المستوردة من DLLs أخرى لن يُعاد تصديرها، وكذلك الرموز التي تحدد التخطيط الداخلي لـ DLL مثل تلك التي تبدأ بـ "_head_" أو تنتهي بـ "_iname". بالإضافة إلى ذلك، لن تُصَدر أي رموز من "libgcc"، أو "libstd++"، أو "libmingw32"، أو "crtX.o". الرموز التي تبدأ أسماؤها بـ "__rtti_" أو "__builtin_" لن تُصَدر، للمساعدة في مكتبات DLL الخاصة بـ ++C. أخيراً، هناك قائمة واسعة من رموز cygwin الخاصة التي لا تُصَدر (بشكل واضح، ينطبق هذا عند بناء DLLs لأهداف cygwin). هذه المستثنيات في cygwin هي: "_cygwin_dll_entry@12"، و "_cygwin_crt0_common@8"، و "_cygwin_noncygwin_dll_entry@12"، و "_fmode"، و "_impure_ptr"، و "cygwin_attach_dll"، و "cygwin_premain0"، و "cygwin_premain1"، و "cygwin_premain2"، و "cygwin_premain3"، و "environ". [هذا الخيار خاص بمنفذ i386 PE المستهدف للرابط]
يحدد قائمة بالرموز التي ينبغي عدم تصديرها تلقائياً. يمكن فصل أسماء الرموز بفواصل أو نقطتين رأسيين. [هذا الخيار خاص بإصدار الرابط المستهدف لـ i386 PE]
يحدد أنه لا ينبغي تصدير أي رموز تلقائياً. [هذا الخيار خاص بإصدار الرابط المستهدف لـ i386 PE]
تحديد محاذاة الملف. ستبدأ الأقسام في الملف دائماً عند إزاحات ملف تكون من مضاعفات هذا الرقم. القيمة الافتراضية هي 512. [هذا الخيار خاص بإصدار الرابط المستهدف لـ i386 PE]
تحديد عدد بايتات الذاكرة التي سيتم حجزها (وتخصيصها اختيارياً) لاستخدامها كـ كومة (heap) لهذا البرنامج. الافتراضي هو حجز 1 ميجابايت وتخصيص 4 كيلوبايت. [هذا الخيار خاص بإصدار الرابط المستهدف لـ i386 PE]
إذا أُعطيت، ستُزال لواحق stdcall (@nn) من الرموز قبل تصديرها. [هذا الخيار خاص بمنفذ الرابط المخصص لـ i386 PE]
إذا أُعطيت، يُضبط البت المناسب في حقل "Characteristics" لترويسة COFF للإشارة إلى أن هذا الملف التنفيذي يدعم عناوين افتراضية أكبر من 2 غيغابايت. يجب استخدام هذا بالتزامن مع مفتاح /3GB أو /USERVA=value ميغابايت في قسم "[operating systems]" من BOOT.INI. وإلا، فلن يكون لهذا البت أي تأثير. [هذا الخيار خاص بمنافذ الرابط المخصصة لـ PE]
يعكس تأثير خيار --large-address-aware السابق. هذا مفيد إذا كان --large-address-aware مضبوطًا دائمًا بواسطة مشغل المترجم (مثل Cygwin gcc) والملف التنفيذي لا يدعم عناوين افتراضية أكبر من 2 جيجابايت. [هذا الخيار خاص بمنافذ الرابط الموجهة لـ PE]
يضبط الرقم الرئيسي لـ "إصدار الصورة". المبدئي هو 1. [هذا الخيار خاص بمنفذ الموصل الموجه لـ i386 PE]
يضبط الرقم الرئيسي لـ "إصدار نظام التشغيل". المبدئي هو 4. [هذا الخيار خاص بمنفذ الموصل الموجه لـ i386 PE]
يضبط الرقم الرئيسي لـ "إصدار النظام الفرعي". المبدئي هو 4. [هذا الخيار خاص بمنفذ الموصل الموجه لـ i386 PE]
يضبط الرقم الفرعي لـ "إصدار الصورة". المبدئي هو 0. [هذا الخيار خاص بمنفذ الموصل الموجه لـ i386 PE]
يضبط الرقم الفرعي لـ "إصدار نظام التشغيل". المبدئي هو 0. [هذا الخيار خاص بمنفذ الموصل الموجه لـ i386 PE]
يضبط الرقم الفرعي لـ "إصدار النظام الفرعي". المبدئي هو 0. [هذا الخيار خاص بمنفذ الموصل الموجه لـ i386 PE]
سينشئ الرابط الملف file الذي سيحتوي على ملف DEF مطابق لملف DLL الذي يولده الرابط. هذا الملف DEF (الذي يجب تسميته "*.def") يمكن استخدامه لإنشاء مكتبة استيراد باستخدام "dlltool" أو يمكن استخدامه كمرجع للرموز المصدرة آلياً أو ضمنياً. [هذا الخيار خاص بمنفذ الرابط المستهدف لـ i386 PE]
اختر أساس الصورة لملفات DLL آلياً، وبدءاً اختيارياً من قيمة الأساس value، ما لم يُحدد واحد باستخدام معطى "--image-base". عبر استخدام هاش مولد من اسم dll لإنشاء أسس صور فريدة لكل DLL، تُتجنب التصادمات وإعادات التوطين في الذاكرة التي قد تؤخر تنفيذ البرنامج. [هذا الخيار خاص بمنفذ i386 PE للواصل]
لا تولد قاعدة صورة فريدة آلياً. إذا لم تكن هناك قاعدة صورة محددة من قبل المستخدم ("--image-base") فاستخدم الوضع المبدئي للمنصة. [هذا الخيار خاص بمنفذ i386 PE المستهدف للرابط]
عند الربط ديناميكيًا بـ dll بدون مكتبة استيراد، ابحث عن "<string><basename>.dll" مفضلاً إياها على "lib<basename>.dll". يسمح هذا السلوك بالتمييز بسهولة بين ملفات DLL المبنية للمنصات الفرعية المختلفة: native و cygwin و uwin و pw وغيرها. على سبيل المثال، تستخدم ملفات DLL الخاصة بـ cygwin عادةً "--dll-search-prefix=cyg". [هذا الخيار خاص بمنفذ المرابط المستهدف لـ i386 PE]
قم بإجراء ربط متطور لـ "_symbol" بـ "__imp__symbol" لعمليات استيراد البيانات (DATA) من مكتبات DLL، مما يتيح تجاوز آلية dllimport من جانب المستخدم والإشارة إلى أسماء رموز غير مجمّعة. [هذا الخيار خاص بمنفذ i386 PE المستهدف للرابط]

تتعلق الملاحظات التالية بالتنفيذ الأصلي للميزة وهي مهجورة في الوقت الحاضر لأهداف Cygwin و MinGW.

ملاحظة: سيؤدي استخدام امتداد 'auto-import' إلى جعل قسم النص (text) في ملف الصورة قابلاً للكتابة. هذا لا يتوافق مع مواصفات تنسيق PE-COFF المنشورة بواسطة Microsoft.

ملاحظة - سيؤدي استخدام امتداد 'auto-import' أيضاً إلى جعل البيانات المخصصة للقراءة فقط، والتي تُوضع عادةً في قسم .rdata، تُوضع في قسم .data بدلاً من ذلك. هذا من أجل الالتفاف على مشكلة في الثوابت (consts) مشروحة هنا: http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html

يعمل استخدام 'auto-import' عموماً بشكل مباشر -- ولكن قد ترى أحياناً هذه الرسالة:

"لا يمكن استيراد المتغير '<var>' آلياً. يرجى قراءة وثائق "--enable-auto-import" الخاصة بـ ld للتفاصيل."

تحدث هذه الرسالة عندما يصل تعبير (فرعي) ما إلى عنوان ناتج في النهاية عن مجموع ثابتين (تسمح جداول استيراد Win32 بواحد فقط). تشمل الحالات التي قد يحدث فيها هذا الوصول إلى حقول أعضاء لمتغيرات الهياكل المستوردة من DLL، وكذلك استخدام فهرس ثابت في متغير مصفوفة مستورد من DLL. أي متغير متعدد الكلمات (مصفوفات، هياكل، long long، إلخ) قد يؤدي إلى حالة الخطأ هذه. ومع ذلك، وبغض النظر عن نوع البيانات الدقيق للمتغير المصدر المخالف، سيكتشفه ld دائمًا، ويُصدر التحذير، ويخرج.

هناك عدة طرق لمعالجة هذه الصعوبة، بغض النظر عن نوع بيانات المتغير المصدّر:

تتمثل إحدى الطرق في استخدام مفتاح --enable-runtime-pseudo-reloc. يترك هذا مهمة تعديل المراجع في كود العميل لبيئة وقت التشغيل، لذا تعمل هذه الطريقة فقط عندما تدعم بيئة وقت التشغيل هذه الميزة.

الحل الثاني هو إجبار أحد 'الثوابت' على أن يكون متغيراً -- أي غير معروف وغير قابل للتحسين في وقت الترجمة. بالنسبة للمصفوفات، هناك احتمالان: أ) جعل المُفهرس (عنوان المصفوفة) متغيراً، أو ب) جعل الفهرس 'الثابت' متغيراً. وهكذا:

        extern type extern_array[];
        extern_array[1] -->
           { volatile type *t=extern_array; t[1] }
    

أو

        extern type extern_array[];
        extern_array[1] -->
           { volatile int t=1; extern_array[t] }
    

بالنسبة للهياكل (ومعظم أنواع البيانات الأخرى متعددة الكلمات)، فإن الخيار الوحيد هو جعل الهيكل نفسه (أو الـ long long، أو غيره...) متغيرًا:

        extern struct s extern_struct;
        extern_struct.field -->
           { volatile struct s *t=&extern_struct; t->field }
    

أو

        extern long long extern_ll;
        extern_ll -->
          { volatile long long * local_ll=&extern_ll; *local_ll }
    

الطريقة الثالثة للتعامل مع هذه الصعوبة هي التخلي عن 'auto-import' للرمز المخالف وتمييزه بـ "__declspec(dllimport)". ومع ذلك، يتطلب ذلك عملياً استخدام #defines في وقت الترجمة للإشارة إلى ما إذا كنت تبني DLL، أو تبني كود عميل سيرتبط بـ DLL، أو مجرد بناء/ربط مكتبة ساكنة. عند الاختيار بين الطرق المختلفة لحل مشكلة "العنوان المباشر بإزاحة ثابتة"، يجب عليك مراعاة الاستخدام النموذجي في العالم الحقيقي:

الأصلي:

        --foo.h
        extern int arr[];
        --foo.c
        #include "foo.h"
        void main(int argc, char **argv){
          printf("%d\n",arr[1]);
        }
    

الحل 1:

        --foo.h
        extern int arr[];
        --foo.c
        #include "foo.h"
        void main(int argc, char **argv){
          /* هذا الحل البديل مخصص لنظامي win32 وcygwin؛ لا تعمد إلى "التحسين" */
          volatile int *parr = arr;
          printf("%d\n",parr[1]);
        }
    

الحل 2:

        --foo.h
        /* ملاحظة: يُفترض التصدير التلقائي (no __declspec(dllexport)) */
        #if (defined(_WIN32) || defined(__CYGWIN__)) && \
          !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC))
        #define FOO_IMPORT __declspec(dllimport)
        #else
        #define FOO_IMPORT
        #endif
        extern FOO_IMPORT int arr[];
        --foo.c
        #include "foo.h"
        void main(int argc, char **argv){
          printf("%d\n",arr[1]);
        }
    

هناك طريقة رابعة لتجنب هذه المشكلة وهي إعادة صياغة كود مكتبتك لاستخدام واجهة وظيفية بدلاً من واجهة بيانات للمتغيرات المسيئة (مثلاً دالات الوصول set_foo() و get_foo()).

لا تحاول إجراء ربط متطور لـ "_symbol" بـ "__imp__symbol" لعمليات استيراد البيانات (DATA) من مكتبات DLL. [هذا الخيار خاص بمنفذ i386 PE المستهدف للرابط]
إذا كان الكود الخاص بك يحتوي على تعبيرات موصوفة في قسم --enable-auto-import، أي استيرادات DATA من DLL بإزاحة غير صفرية، فإن هذا المفتاح سيُنشئ متجهاً من 'runtime pseudo relocations' التي يمكن استخدامها بواسطة بيئة وقت التشغيل لضبط المراجع لهذه البيانات في كود العميل الخاص بك. [هذا الخيار خاص بمنفذ i386 PE المستهدف للرابط]
لا تنشئ عمليات إعادة توطين وهمية لاستيرادات البيانات ذات الإزاحة غير الصفرية من مكتبات DLL. [هذا الخيار خاص بمنفذ i386 PE المستهدف للرابط]
أظهر معلومات تنقيح إضافية متعلقة بـ thunking لرموز الاستيراد التلقائي. [هذا الخيار خاص بمنفذ الموصل الموجه لـ i386 PE]
يضبط موازاة الأقسام. الأقسام في الذاكرة ستبدأ دائمًا عند عناوين هي مضاعفات لهذا الرقم. المبدئي هو 0x1000. [هذا الخيار خاص بمنفذ الموصل الموجه لـ i386 PE]
تحديد عدد بايتات الذاكرة التي سيتم حجزها (وتخصيصها اختيارياً) لاستخدامها كـ مكدس (stack) لهذا البرنامج. الافتراضي هو حجز 2 ميجابايت وتخصيص 4 كيلوبايت. [هذا الخيار خاص بإصدار الرابط المستهدف لـ i386 PE]
يحدد النظام الفرعي الذي سيتم تنفيذ برنامجك تحته. القيم المسموح بها لـ which هي "native" و "windows" و "console" و "posix" و "xbox". يمكنك اختيارياً ضبط إصدار النظام الفرعي أيضاً. تُقبل القيم الرقمية أيضاً لـ which. [هذا الخيار خاص بإصدار الرابط المستهدف لـ i386 PE]

تضبط الخيارات التالية الأعلام في حقل "DllCharacteristics" في ترويسة ملف PE: [هذه الخيارات خاصة بمنافذ الرابط التي تستهدف PE]

الصورة متوافقة مع عشوائية تخطيط مساحة العنوان (ASLR) ذات 64 بت. هذا الخيار مفعل افتراضياً لصور PE ذات 64 بت في أهداف MinGW.

يتضمن هذا الخيار أيضًا --dynamicbase و --enable-reloc-section.

قد يتم تغيير موقع عنوان قاعدة الصورة باستخدام عشوائية تخطيط مساحة العنوان (ASLR). تم تقديم هذه الميزة مع MS Windows Vista لأهداف i386 PE. هذا الخيار مفعل افتراضيًا لأهداف MinGW ولكن يمكن تعطيله عبر الخيار --disable-dynamicbase. يتضمن هذا الخيار أيضًا --enable-reloc-section.
تُفرض فحوصات سلامة الكود. هذا الخيار معطل مبدئيًا.
الصورة متوافقة مع منع تنفيذ البيانات (DEP). تم تقديم هذه الميزة مع MS Windows XP SP2 لأهداف i386 PE. الخيار مفعل افتراضيًا لأهداف MinGW.
على الرغم من أن الصورة تدعم العزل، إلا أنه لا يجب عزلها. هذا الخيار معطل افتراضياً.
الصورة لا تستخدم SEH. لا يجوز استدعاء أي معالج SE من هذه الصورة. هذا الخيار معطل افتراضيًا.
لا تربط هذه الصورة. هذا الخيار معطل مبدئياً.
يستخدم المشغل نموذج مشغل MS Windows. هذا الخيار معطل افتراضيًا.
الصورة مدركة لـ Terminal Server. هذا الخيار معطل افتراضيًا.
إدراج طابع زمني حقيقي في الصورة. هذا هو السلوك الافتراضي لأنه يطابق الكود القديم ويعني أن الصورة ستعمل مع أدوات أخرى مملوكة (proprietary). المشكلة في هذا الافتراض هي أنه سيؤدي إلى إنتاج صور مختلفة قليلاً في كل مرة يتم فيها ربط نفس المصادر. يمكن استخدام الخيار --no-insert-timestamp لإدراج قيمة صفرية للطابع الزمني، مما يضمن أن الملفات الثنائية المنتجة من مصادر متطابقة ستكون متطابقة عند المقارنة.

إذا كان الخيار --insert-timestamp نشطا، فإن الوقت المدرج هو إما وقت عملية الربط، أو عدد الثواني منذ حقبة يونكس المحددة في متغير البيئة "SOURCE_DATE_EPOCH" إذا كان معرفا.

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

يستخدم هدف C6X uClinux صيغة ثنائية تسمى DSBT لدعم المكتبات المشتركة. تحتاج كل مكتبة مشتركة في النظام إلى فهرس فريد؛ وتستخدم جميع الملفات القابلة للتنفيذ الفهرس 0.

يضبط هذا الخيار عدد المدخلات في DSBT للملف التنفيذي الحالي أو المكتبة المشتركة إلى size. المبدئي هو إنشاء جدول بـ 64 مدخلة.
يضبط هذا الخيار فهرس DSBT للملف التنفيذي الحالي أو المكتبة المشتركة إلى index. القيمة المبدئية هي 0، وهي مناسبة لتوليد الملفات التنفيذية. إذا أُنتجت مكتبة مشتركة بفهرس DSBT قيمته 0، فستُنسخ إعادة التوطين "R_C6000_DSBT_INDEX" إلى ملف المخرج.

يعطل مفتاح --no-merge-exidx-entries دمج مدخلات exidx المتجاورة في معلومات حل إطارات المكدس (frame unwind info).

يُمكّن هذا الخيار تخفيف فروع الموصل عن طريق إدراج أقسام فرعية بديلة عند الحاجة لتوسيع نطاق الفروع. هذا الخيار غير مطلوب عادةً لأن C-SKY تدعم تعليمات الفرع والاستدعاء التي يمكنها الوصول إلى نطاق الذاكرة الكامل، ويُعالج تخفيف الفروع عادةً بواسطة المترجم أو المجمّع.
يسمح هذا الخيار بتحكم أدق في إنشاء أقسام الموصل الفرعية البديلة (stubs). يضبط الحجم الأقصى لمجموعة من أقسام المدخلات التي يمكن التعامل معها بواسطة قسم بديل واحد. تحدد القيمة السالبة لـ N مواقع الأقسام البديلة بعد فروعها، بينما تسمح القيمة الموجبة للأقسام البديلة بالظهور إما قبل أو بعد الفروع. تشير القيم 1 أو -1 إلى وجوب اختيار الموصل للقيم المبدئية المناسبة.

تدعم روابط 68HC11 و 68HC12 خيارات محددة للتحكم في تخطيط تبديل بنوك الذاكرة وتوليد شيفرة trampoline.

يعطل هذا الخيار توليد الـ trampoline. مبدئيًا، يُولد trampoline لكل دالة بعيدة تُستدعى باستخدام تعليمات "jsr" (يحدث هذا عند أخذ مؤشر لدالة بعيدة).
يشير هذا الخيار للموصل إلى اسم منطقة الذاكرة في مواصفة MEMORY التي تصف نافذة بنك الذاكرة. ثم يُستخدم تعريف هذه المنطقة بواسطة الموصل لحساب الصفحات والعناوين داخل نافذة الذاكرة.

الخيارات التالية مدعومة للتحكم في معالجة توليد GOT عند الربط لأهداف 68K.

يخبر هذا الخيار الموصل بأي مخطط لتوليد GOT سيُستخدم. يجب أن يكون type واحدًا من single أو negative أو multigot أو target. لمزيد من المعلومات، ارجع إلى مدخلة Info لـ ld.

الخيارات التالية مدعومة للتحكم في توليد تعليمات microMIPS وفحوصات إعادة توطين الفروع لانتقالات وضع ISA عند الربط لأهداف MIPS.

تتحكم هذه الخيارات في اختيار تعليمات microMIPS المستخدمة في الكود المولد بواسطة الرابط، مثل ذلك الموجود في PLT أو بدائل الربط الكسول، أو في الاسترخاء. إذا استُخدم --insn32، فإن الرابط يستخدم فقط ترميزات التعليمات ذات 32 بت. مبدئيًا أو إذا استُخدم --no-insn32، تُستخدم جميع ترميزات التعليمات، بما في ذلك تلك ذات 16 بت حيثما كان ذلك ممكنًا.
تتحكم هذه الخيارات في فحوصات إعادة توطين الفروع لانتقالات وضع ISA غير الصالحة. إذا استُخدم --ignore-branch-isa، فإن الرابط يقبل أي عمليات إعادة توطين للفروع ويُفقد أي انتقال مطلوب لوضع ISA في حساب إعادة التوطين، باستثناء بعض حالات تعليمات "BAL" التي تلبي شروط الاسترخاء وتُحول إلى تعليمات "JALX" مكافئة عند حساب إعادة التوطين المرتبطة. مبدئيًا أو إذا استُخدم --no-ignore-branch-isa، يُجرى فحص يؤدي فيه فقدان انتقال وضع ISA إلى حدوث خطأ.
تتحكم هذه الخيارات في توليد التعليمات المدمجة بواسطة الرابط في إدخالات PLT لـ MIPS R6.

بالنسبة لهدف pdp11-aout، يمكن إنتاج ثلاثة أشكال من تنسيق المخرجات كما هو محدد بالخيارات التالية. الشكل المبدئي لـ pdp11-aout هو خيار --omagic، بينما للأهداف الأخرى يكون --nmagic هو المبدئي. عُرف الخيار --imagic فقط لهدف pdp11-aout، بينما تُشرح الخيارات الأخرى هنا كما تنطبق على هدف pdp11-aout.

تعليم المخرجات كـ "OMAGIC" (0407) في ترويسة a.out للإشارة إلى أن مقطع النص ليس محمياً من الكتابة ولا مشتركاً. بما أن كلا قسمي النص والبيانات قابلان للقراءة والكتابة، يتم تخصيص قسم البيانات مباشرة بعد مقطع النص. هذا هو أقدم تنسيق لبرامج PDP11 التنفيذية وهو المبدئي لـ ld على أنظمة PDP11 Unix منذ البداية وحتى 2.11BSD.
تعليم المخرجات كـ "NMAGIC" (0410) في ترويسة a.out للإشارة إلى أنه عند تنفيذ ملف المخرجات، سيكون جزء النص للقراءة فقط وقابلاً للمشاركة بين جميع العمليات التي تنفذ نفس الملف. يتضمن ذلك نقل مناطق البيانات إلى أول حدود صفحة ممكنة بحجم 8 كيلوبايت تلي نهاية النص. ينشئ هذا الخيار تنسيق pure executable.
تعليم المخرجات كـ "IMAGIC" (0411) في ترويسة a.out للإشارة إلى أنه عند تنفيذ ملف المخرجات، سيتم تحميل مناطق نص البرنامج والبيانات في مساحات عناوين منفصلة باستخدام ميزة تقسيم مساحة التعليمات والبيانات لوحدة إدارة الذاكرة في النماذج الأكبر من PDP11. هذا يضاعف مساحة العناوين المتاحة للبرنامج. مقطع النص نقي مرة أخرى، ومحمي من الكتابة، وقابل للمشاركة. الفرق الوحيد في تنسيق المخرجات بين هذا الخيار والخيارات الأخرى، بالإضافة إلى الرقم السحري، هو أن كلا من قسمي النص والبيانات يبدآن عند الموقع 0. اختار الخيار -z هذا التنسيق في 2.11BSD. ينشئ هذا الخيار تنسيق separate executable.
يكافئ --nmagic لـ pdp11-aout.

البيئة

يمكنك تغيير سلوك ld باستخدام متغيرات البيئة "GNUTARGET" و "LDEMULATION" و "COLLECT_NO_DEMANGLE".

يحدد "GNUTARGET" تنسيق كائن ملف المدخلات إذا لم تستخدم -b (أو مرادفه --format). يجب أن تكون قيمته واحدة من أسماء BFD لتنسيق مدخلات. إذا لم يوجد "GNUTARGET" في البيئة، يستخدم ld التنسيق الطبيعي للهدف. إذا ضُبط "GNUTARGET" على "default"، فحينئذٍ تحاول BFD اكتشاف تنسيق المدخلات عن طريق فحص ملفات المدخلات الثنائية؛ تنجح هذه الطريقة غالباً، ولكن هناك التباسات محتملة، حيث لا توجد طريقة لضمان أن الرقم السحري المستخدم لتحديد تنسيقات ملفات الكائنات فريد. ومع ذلك، فإن إجراء الضبط لـ BFD على كل نظام يضع التنسيق التقليدي لهذا النظام أولاً في قائمة البحث، لذا تُحل الالتباسات لصالح التقليد.

يحدد "LDEMULATION" المحاكاة المبدئية إذا لم تستخدم خيار -m. يمكن أن تؤثر المحاكاة على جوانب متنوعة من سلوك الرابط، وخاصة سكربت الرابط المبدئي. يمكنك سرد المحاكيات المتاحة باستخدام خيارات --verbose أو -V. إذا لم يُستخدم خيار -m، ولم يُعرف متغير البيئة "LDEMULATION"، فإن المحاكاة المبدئية تعتمد على كيفية ضبط الرابط.

عادةً ما يقوم الرابط افتراضيًا بفك تشابك (demangling) الرموز. ومع ذلك، إذا جرى ضبط "COLLECT_NO_DEMANGLE" في البيئة، فسيقوم افتراضيًا بعدم فك تشابك الرموز. يتم استخدام متغير البيئة هذا بطريقة مماثلة بواسطة برنامج غلاف الرابط "gcc". يمكن تجاوز الافتراضي بواسطة الخيارين --demangle و --no-demangle.

إذا كان خيار --insert-timestamp الخاص بـ PE/COFF نشطًا وجرى تعريف متغير البيئة SOURCE_DATE_EPOCH، فسيتم إدراج قيمة الطابع الزمني في هذا المتغير في رأس COFF بدلاً من الوقت الحالي.

إذا جرى تعريف متغير البيئة "LD_STATS"، فسيتم تسجيل معلومات استخدام موارد الرابط، تمامًا كما لو تم استخدام خيار --stats. إذا كانت قيمة المتغير "LD_STATS" سلسلة نصية، فسيتم استخدامها كاسم لملف يجب تخزين المعلومات فيه. بخلاف ذلك، سيتم إرسال المعلومات إلى دفق المخرجات القياسية.

انظر أيضًا

ar(1)، و nm(1)، و objcopy(1)، و objdump(1)، و readelf(1) ومدخلات معلومات Info الخاصة بـ binutils و ld.

حقوق النسخ

حقوق الطبع والنشر (c) لعام 1991-2025 لمؤسسة البرمجيات الحرة، المحدودة.

يُمنح الإذن بنسخ وتوزيع و/أو تعديل هذا المستند بموجب شروط رخصة جنو للوثائق الحرة (GNU Free Documentation License)، الإصدار 1.3 أو أي إصدار لاحق تنشره مؤسسة البرمجيات الحرة؛ مع عدم وجود أقسام ثابتة، وبدون نصوص غلاف أمامي، وبدون نصوص غلاف خلفي. نُسخة من الرخصة مضمنة في القسم المعنون "GNU Free Documentation License".

ترجمة

تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.

10 مارس 2026 binutils-2.45.0