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).

-a كلمة_مفتاحية
    هذا الخيار مدعوم من أجل التوافقية مع HP/UX. يجب أن يكون معطى keyword أحد السلاسل archive أو shared أو default. خيار -aarchive يكافئ وظيفيًا -Bstatic، والكلمتان المفتاحيتان الأخريان تكافئان وظيفيًا -Bdynamic. يمكن استخدام هذا الخيار أي عدد من المرات.

--audit AUDITLIB
    أضف AUDITLIB إلى مدخل "DT_AUDIT" في القسم الديناميكي. لا يُتحقق من وجود AUDITLIB، ولن يستخدم DT_SONAME المحدد في المكتبة. إذا حُدد عدة مرات سيحتوي "DT_AUDIT" على قائمة مفصولة بنقطتين لواجهات التدقيق المراد استخدامها. إذا وجد الرابط كائناً به مدخل تدقيق أثناء البحث عن المكتبات المشتركة، فسيضيف مدخل "DT_DEPAUDIT" مطابقاً في ملف المخرجات. هذا الخيار مفيد فقط على منصات ELF التي تدعم واجهة rtld-audit.

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

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

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

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

-c ملف_أوامر_MRI
--mri-script=ملف-أوامر-MRI
    للتوافق مع الروابط الناتجة عن MRI، يقبل ld ملفات البرامج النصية المكتوبة بلغة أوامر بديلة ومقيدة، مشروحة في قسم ملفات البرامج النصية المتوافقة مع MRI في وثائق GNU ld. قدم ملفات نصوص MRI بالخيار -c؛ استخدم الخيار -T لتشغيل نصوص الرابط المكتوبة بلغة البرمجة النصية ld العامة. إذا كان MRI-cmdfile غير موجود، يبحث ld عنه في المجلدات المحددة بأي من خيارات -L.

-d
-dc
-dp هذه الخيارات الثلاثة متكافئة؛ وتُدعم أشكال متعددة للتوافق مع الروابط الأخرى. وهي تخصص مساحة للرموز المشتركة حتى إذا حُدد ملف خرج قابل لإعادة التوطين (باستخدام -r). أمر السكريبت "FORCE_COMMON_ALLOCATION" له نفس التأثير.

--depaudit مكتبة_تدقيق
-P مكتبة_التدقيق
    أضف AUDITLIB إلى مدخل "DT_DEPAUDIT" في القسم الديناميكي. لا يُتحقق من وجود AUDITLIB، ولن يستخدم DT_SONAME المحدد في المكتبة. إذا حُدد عدة مرات سيحتوي "DT_DEPAUDIT" على قائمة مفصولة بنقطتين لواجهات التدقيق المراد استخدامها. هذا الخيار مفيد فقط على منصات ELF التي تدعم واجهة rtld-audit. خيار -P مقدم للتوافق مع Solaris.

--enable-linker-version
    يفعل توجيه نص الرابط "LINKER_VERSION"، الموصوف في Output Section Data. إذا استُخدم هذا التوجيه في نص رابط وفُعِّل هذا الخيار، فسَتُدرَج سلسلة نصية تحتوي على إصدار الرابط في النقطة الحالية.

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

--disable-linker-version
    يعطّل توجيه سكريبت الرابط "LINKER_VERSION"، بحيث لا يدرج سلسلة نصية للإصدار. هذا هو الوضع المبدئي.

--enable-non-contiguous-regions
    يتجنب هذا الخيار توليد خطأ إذا لم يتناسب قسم المدخلات مع قسم مخرجات مطابق. يحاول الموصل تخصيص قسم المدخلات لأقسام مخرجات مطابقة لاحقة، ولا يولد خطأ إلا إذا لم يكن هناك قسم مخرجات كبير بما يكفي. هذا مفيد عندما تتوفر عدة مناطق ذاكرة غير متجاورة ولا يتطلب قسم المدخلات منطقة محددة. الترتيب الذي تُقيم به أقسام المدخلات لا يتغير، على سبيل المثال:

              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-warnings
    يُمكّن هذا الخيار التحذيرات عندما يسمح "--enable-non-contiguous-regions" بمطابقات غير متوقعة محتملة في تعيين الأقسام، مما قد يؤدي إلى تجاهل قسم بصمت بدلاً من الفشل لعدم ملاءمته لأي منطقة مخرجات.

-e المدخلة
--entry=المدخل
    استخدم entry كرمز صريح لبدء تنفيذ برنامجك، بدلًا من نقطة الدخول المبدئية. إذا لم يكن هناك رمز باسم entry، سيحاول الرابط تحليل entry كرقم، واستخدامه كعنوان دخول (سيُفسر الرقم بالأساس 10؛ يمكنك استخدام بادئة 0x للأساس 16، أو بادئة 0 للأساس 8). بالنسبة لـ i386 PE، يمكن أن يكون entry أيضًا اسم الوظيفة الأصلي (بدون الشرطة السفلية البادئة و/أو stdcall اللاحق @number عند الاقتضاء).

--exclude-libs مكتبة,مكتبة,...
    يحدد قائمة بمكتبات الأرشيف التي ينبغي عدم تصدير رموزها تلقائياً. يمكن فصل أسماء المكتبات بفواصل أو نقطتين رأسيين. يؤدي تحديد "--exclude-libs ALL" إلى استبعاد الرموز في جميع مكتبات الأرشيف من التصدير التلقائي. هذا الخيار متاح فقط لإصدار الرابط المستهدف لـ i386 PE وللإصدارات المستهدفة لـ ELF. بالنسبة لـ i386 PE، تظل الرموز المدرجة صراحة في ملف .def مُصدرة بغض النظر عن هذا الخيار. بالنسبة للإصدارات المستهدفة لـ ELF، سَيُتَعَامَلُ مع الرموز المتأثرة بهذا الخيار على أنها مخفية.

--exclude-modules-for-implib وحدة,وحدة,...
    يحدد قائمة بملفات الكائنات أو أعضاء الأرشيف، والتي لا ينبغي تصدير رموزها آلياً، ولكن ينبغي نسخها بالجملة إلى مكتبة الاستيراد التي تُولد أثناء الربط. قد تُفصل أسماء الوحدات بفاصلات أو نقطتين رأسيتين، ويجب أن تطابق تماماً أسماء الملفات المستخدمة بواسطة ld لفتح الملفات؛ بالنسبة لأعضاء الأرشيف، هذا مجرد اسم العضو، ولكن بالنسبة لملفات الكائنات، يجب أن يتضمن الاسم المدرج ويطابق بدقة أي مسار استُخدم لتحديد ملف المدخلات في سطر أوامر الرابط. يتوفر هذا الخيار فقط لمنفذ i386 PE المستهدف للرابط. الرموز المدرجة صراحة في ملف .def ستُصدر بالرغم من هذا الخيار.

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

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

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

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

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

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

--export-dynamic-symbol-list=ملف
    تحديد --export-dynamic-symbol لكل نمط في الملف. تنسيق الملف هو نفسه عقدة الإصدار بدون النطاق واسم العقدة. انظر VERSION لمزيد من المعلومات.

-EB ربط كائنات big-endian. يؤثر هذا على تنسيق المخرجات المبدئي.

-EL ربط كائنات little-endian. يؤثر هذا على تنسيق المخرجات المبدئي.

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

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

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

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

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

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

-fini=الاسم
    عند إنشاء ملف تنفيذي ELF أو كائن مشترك، استدعِ NAME عند تفريغ الملف التنفيذي أو الكائن المشترك، وذلك بضبط DT_FINI على عنوان الوظيفة. مبدئيًا، يستخدم المرابط "_fini" كالوظيفة المطلوب استدعاؤها.

-g  مُتجاهَل. متوفر للتوافق مع الأدوات الأخرى.

-G القيمة
--gpsize=قيمة
    اضبط الحد الأقصى لحجم الكائنات المراد تحسينها باستخدام سجل GP لتكون size. هذا ذو معنى فقط لتنسيقات ملفات الكائنات مثل MIPS ELF التي تدعم وضع الكائنات الكبيرة والصغيرة في أقسام مختلفة. يُتجاهل هذا في تنسيقات ملفات الكائنات الأخرى.

-h الاسم
-soname=اسم
    عند إنشاء كائن ELF مشترك، اضبط حقل DT_SONAME الداخلي على الاسم المحدد. عندما يربط ملف تنفيذي بكائن مشترك له حقل DT_SONAME، فعند تشغيل الملف التنفيذي سيحاول المرابط الديناميكي تحميل الكائن المشترك المحدد بحقل DT_SONAME بدلاً من استخدام اسم الملف المعطى للمرابط.

-i  أجرِ ربطاً تزايدياً (مثل الخيار -r).

-init=اسم
    عند إنشاء ملف تنفيذي ELF أو كائن مشترك، استدعِ NAME عند تحميل الملف التنفيذي أو الكائن المشترك، وذلك بضبط DT_INIT على عنوان الوظيفة. مبدئيًا، يستخدم المرابط "_init" كالوظيفة المطلوب استدعاؤها.

-l namespec
--library=توصيف-الاسم
    أضف الأرشيف أو ملف الكائن المحدد بواسطة namespec إلى قائمة الملفات المطلوب ربطها. يمكن استخدام هذا الخيار أي عدد من المرات. إذا كان namespec على شكل :filename، سيبحث ld في مسار المكتبة عن ملف يسمى filename، وإلا سيبحث في مسار المكتبة عن ملف يسمى libnamespec.a.

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

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

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

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

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

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

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

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

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

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

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

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

--remap-inputs=النمط=اسم_الملف
--remap-inputs-file=ملف
    تسمح هذه الخيارات بتغيير أسماء ملفات الإدخال قبل أن يحاول الرابط فتحها. سيؤدي الخيار --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، فسَتُضَمَّنُ قائمة إعادة التعيين في مخرجات الخريطة.

-M
--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.

--print-map-discarded
--no-print-map-discarded
    اطبع (أو لا تطبع) قائمة الأقسام المهملة والتي جُمعت نفاياتها في خريطة الربط. ممكّن مبدئياً.

--print-map-locals
--no-print-map-locals
    اطبع (أو لا تطبع) الرموز المحلية في خريطة الربط. سَيُطْبَعُ نص (local) قبل أسماء الرموز المحلية، وسَتُدْرَجُ بعد جميع الرموز العالمية في قسم معين. لن تُضَمَّنَ الرموز المحلية المؤقتة (عادةً تلك التي تبدأ بـ .L) في المخرج. معطل مبدئياً.

-n
--nmagic
    أوقف محاذاة الصفحات للأقسام، وعطل الربط بالمكتبات المشتركة. إذا كان تنسيق المخرجات يدعم الأرقام السحرية بأسلوب يونكس، فضع علامة على المخرجات بأنها "NMAGIC".

-N
--omagic
    اجعل قسمي النص والبيانات قابلين للقراءة والكتابة. وأيضًا، لا توازن شريحة البيانات بالصفحات، وعطل الربط مع المكتبات المشتركة. إذا كان تنسيق المخرجات يدعم الأرقام السحرية بأسلوب يونكس، فميز المخرجات كـ "OMAGIC". ملاحظة: رغم أن قسم النص القابل للكتابة مسموح به لأهداف PE-COFF، إلا أنه لا يتوافق مع مواصفات التنسيق المنشورة من قبل مايكروسوفت.

--no-omagic
    ينفي هذا الخيار معظم تأثيرات الخيار -N. يضبط قسم النص ليكون للقراءة فقط، ويفرض محاذاة مقطع البيانات مع الصفحات. ملاحظة - لا يُمكّن هذا الخيار الوصل مع المكتبات المشتركة. استخدم -Bdynamic لهذا الغرض.

-o المخرج
--output=المخرج
    استخدم output كاسم للبرنامج الناتج عن ld؛ إذا لم يُحدد هذا الخيار، يُستخدم الاسم a.out مبدئيًا. يمكن لأمر السكربت "OUTPUT" أيضًا تحديد اسم ملف المخرجات.

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

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

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

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

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

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

-plugin اسم
    إشراك ملحق (plugin) في عملية الربط. المعامل name هو اسم الملف المطلق للملحق. عادة ما يضاف هذا المعامل تلقائياً بواسطة المترجم (compiler) عند استخدام تحسين وقت الربط (link time optimization)، ولكن يمكن للمستخدمين أيضًا إضافة ملحقاتهم الخاصة إذا رغبوا في ذلك.

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

--push-state
    يسمح --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

--pop-state
    يلغي أثر --push-state، ويستعيد القيم السابقة للأعلام التي تحكم معالجة ملفات المدخلات.

-q
--emit-relocs
    تُترك أقسام ومحتويات إعادة التعيين في الملفات التنفيذية المترابطة كلياً. قد تحتاج أدوات التحليل وتحسين ما بعد الترابط إلى هذه المعلومات لإجراء تعديلات صحيحة على الملفات التنفيذية. يؤدي هذا إلى ملفات تنفيذية أكبر حجماً.

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

--force-dynamic
    اجبر ملف المخرجات على احتواء أقسام ديناميكية. هذا الخيار خاص بأهداف VxWorks.

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

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

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

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

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

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

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

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

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

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

-s
--strip-all
    حذف جميع معلومات الرموز من ملف المخرجات.

-S
--strip-debug
    حذف معلومات رموز المنقح (ولكن ليس كل الرموز) من ملف المخرجات.

--strip-discarded
--no-strip-discarded
    حذف (أو عدم حذف) الرموز العامة المعرفة في الأجزاء المهملة. ممكن مبدئيًا.

-plugin-save-temps
    تخزين الملفات الوسيطة "المؤقتة" للملحق بشكل دائم.

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

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

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

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

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

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

-dT ملف_السكربت
--default-script=ملف_سكربت
    استخدم scriptfile كسكربت الرابط المبدئي.

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

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

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

--require-defined=الرمز
    اشتراط تعريف symbol في ملف المخرجات. هذا الخيار هو نفسه الخيار --undefined باستثناء أنه إذا لم يُعرّف symbol في ملف المخرجات فإن الرابط سيصدر خطأ ويخرج. يمكن تحقيق نفس التأثير في سكربت الرابط باستخدام "EXTERN" و "ASSERT" و "DEFINED" معًا. يمكن استخدام هذا الخيار عدة مرات لاشتراط رموز إضافية.

-Ur للبرامج التي لا تستخدم المنشئات أو المدمرات، أو للأنظمة القائمة على ELF، يكافئ هذا الخيار -r: فهو يولد مخرجات قابلة لإعادة التوطين؛ أي ملف مخرجات يمكن استخدامه بدوره كمدخل لـ ld. أما بالنسبة للثنائيات الأخرى، فإن الخيار -Ur مشابه لـ -r ولكنه يحل أيضًا المراجع إلى المنشئات والمدمرات.

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

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

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

    "place"
        تُوضَع الأجزاء اليتيمة (Orphan sections) في جزء مخرجات مناسب باتباع الاستراتيجية الموصوفة في Orphan Sections. يُؤثِّر الخيار --unique أيضًا على كيفية وضع الأجزاء.

    "discard"
        تُتجاهَل جميع الأقسام اليتيمة (orphan sections) عبر وضعها في قسم /DISCARD/.

    "warn"
        سيضع الرابط القسم اليتيم كما هو الحال في "place" وسيصدر أيضًا تحذيراً.

    "error"
        سيخرج الرابط بخطأ إذا وُجد أي قسم يتيم.

    المبدئي إذا لم يُعطَ --orphan-handling هو "place".

--unique[=القسم]
    ينشئ قسم خرج منفصلاً لكل قسم دخل يطابق SECTION، أو إذا غابت وسيطة النمط الاختيارية SECTION، لكل قسم دخل يتيم. القسم اليتيم هو قسم لم يُذكر صراحة في نص الموصل البرمجي. يمكنك استخدام هذا الخيار عدة مرات في سطر الأوامر؛ حيث يمنع الدمج العادي لأقسام الدخل التي تحمل نفس الاسم، متجاوزًا تعيينات قسم الخرج في نص الموصل البرمجي.

-v
--version
-V  اعرض رقم إصدار ld. يسرد الخيار -V أيضًا المحاكيات المدعومة. انظر أيضًا وصف --enable-linker-version في خيارات سطر الأوامر، والذي يمكن استخدامه لإدراج سلسلة إصدار الرابط في ملف ثنائي.

-x
--discard-all
    احذف كافة الرموز المحلية.

-X
--discard-locals
    احذف كافة الرموز المحلية المؤقتة. (تبدأ هذه الرموز ببادئات لصائق محلية خاصة بالنظام، عادة .L لأنظمة ELF أو L لأنظمة a.out التقليدية.)

-y رمز
--trace-symbol=الرمز
    اطبع اسم كل ملف مرتبط يظهر فيه الرمز symbol. قد يُعطى هذا الخيار أي عدد من المرات. في العديد من الأنظمة، من الضروري إضافة شرطة سفلية في البداية.

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

-Y المسار
    أضف path إلى مسار بحث المكتبة المبدئي. هذا الخيار موجود للتوافق مع سولاريس.

-z كلمة_مفتاحية
    الكلمات المفتاحية المعترف بها هي:

    call-nop=prefix-addr
    call-nop=suffix-nop
    call-nop=prefix-byte
    call-nop=suffix-byte
        تحديد حشو "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.

    cet-report=none
    cet-report=warning
    cet-report=error
        تحديد كيفية الإبلاغ عن خصائص 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.

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

    common
    nocommon
        ولد رموزًا مشتركة بنوع STT_COMMON أثناء ربط قابل لإعادة التوطين. استخدم نوع STT_OBJECT في حال nocommon.

    common-page-size=value
        اضبط حجم الصفحة الأكثر شيوعًا على value. سيُحسن تخطيط صورة الذاكرة لتقليل صفحات الذاكرة إذا كان النظام يستخدم صفحات بهذا الحجم.

    defs
        الإبلاغ عن مراجع الرموز غير المحلولة من ملفات الكائنات العادية. يُفعل ذلك حتى لو كان الرابط ينشئ مكتبة مشتركة غير رمزية. هذا الخيار هو عكس -z undefs.

    dynamic-undefined-weak
    nodynamic-undefined-weak
        جعل الرموز الضعيفة غير المعرفة ديناميكية عند بناء كائن ديناميكي، إذا أُشير إليها من ملف كائن عادي ولم تُفرض كمحلية بواسطة رؤية الرموز أو الإصدارات. لا تجعلها ديناميكية إذا استُخدم nodynamic-undefined-weak. إذا لم يُعطَ أي من الخيارين، فقد يعتمد الهدف مبدئياً على أي من الخيارين، أو تُختار رموزاً ضعيفة غير معرفة أخرى لجعلها ديناميكية. لا تدعم جميع الأهداف هذه الخيارات.

    execstack
        يعلم الكائن كونه يتطلب مكدساً قابلاً للتنفيذ.

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

    globalaudit
        يكون هذا الخيار ذا معنى فقط عند بناء ملف تنفيذي حيوي. يميز هذا الخيار الملف التنفيذي على أنه يتطلب تدقيقًا عامًا عن طريق ضبط بت "DF_1_GLOBAUDIT" في الوسم الحيوي "DT_FLAGS_1". يتطلب التدقيق العام تشغيل أي مكتبة تدقيق محددة عبر خيارات سطر الأوامر --depaudit أو -P لجميع الكائنات الحيوية المحملة بواسطة التطبيق.

    ibtplt
        ولد مدخلات PLT مُمكّنة لـ Intel Indirect Branch Tracking (IBT). مدعوم لأنظمة Linux/i386 و Linux/x86_64.

    ibt ولد GNU_PROPERTY_X86_FEATURE_1_IBT في قسم .note.gnu.property للإشارة إلى التوافق مع IBT. يتضمن هذا أيضًا ibtplt. مدعوم لأنظمة Linux/i386 و Linux/x86_64.

    indirect-extern-access
    noindirect-extern-access
        ولد 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.

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

    interpose
        تحديد أن المحمل الديناميكي يجب أن يعدل ترتيب بحث الرموز لديه بحيث تتداخل الرموز في هذه المكتبة المشتركة مع جميع المكتبات المشتركة الأخرى غير المميزة بهذه السمة.

    unique
    nounique
        عند توليد مكتبة مشتركة أو كائن ELF آخر قابل للتحميل ديناميكيًا، سمه ككائن ينبغي (مبدئيًا) ألا يُحمل إلا مرة واحدة فقط، وفقط في مساحة الأسماء الرئيسة (عند استخدام "dlmopen"). يستخدم هذا أساسًا لوسم المكتبات الأساسية مثل libc و libpthread وغيرها التي لا تعمل عادةً بشكل صحيح ما لم تكن هي النسخة الوحيدة من نفسها. يمكن للمستدعي "dlmopen" تجاوز هذا السلوك، كما أنه لا ينطبق على بعض آليات التحميل (مثل مكتبات التدقيق).

    lam-u48
        ولد GNU_PROPERTY_X86_FEATURE_1_LAM_U48 في قسم .note.gnu.property للإشارة إلى التوافق مع Intel LAM_U48. مدعوم لنظام Linux/x86_64.

    lam-u57
        ولد GNU_PROPERTY_X86_FEATURE_1_LAM_U57 في قسم .note.gnu.property للإشارة إلى التوافق مع Intel LAM_U57. مدعوم لنظام Linux/x86_64.

    lam-u48-report=none
    lam-u48-report=warning
    lam-u48-report=error
        تحديد كيفية الإبلاغ عن خاصية 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.

    lam-u57-report=none
    lam-u57-report=warning
    lam-u57-report=error
        تحديد كيفية الإبلاغ عن خاصية 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.

    lam-report=none
    lam-report=warning
    lam-report=error
        تحديد كيفية الإبلاغ عن خصائص 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.

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

    loadfltr
        يحدد وجوب معالجة مرشحات الكائن فوراً في وقت التشغيل.

    max-page-size=القيمة
        اضبط الحد الأقصى لحجم صفحة الذاكرة المدعوم على value.

    mark-plt
    nomark-plt
        يميز مدخلات 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.

    muldefs
        السماح بتعريفات متعددة.

    nocopyreloc
        عطّل متغيرات .dynbss التي يولدها الرابط والمستخدمة بدلاً من المتغيرات المعرفة في المكتبات المشتركة. قد يؤدي ذلك إلى عمليات إعادة توطين نصية حركية.

    nodefaultlib
        تحديد أن بحث المحمل الديناميكي عن اعتماديات هذا الكائن يجب أن يتجاهل أي مسارات بحث مبدئية للمكتبات.

    nodelete
        يحدد وجوب عدم إلغاء تحميل الكائن في وقت التشغيل.

    nodlopen
        تحديد أن الكائن غير متاح لـ "dlopen".

    nodump
        تحديد أنه لا يمكن تفريغ الكائن بواسطة "dldump".

    noexecstack
        يعلم الكائن كونه لا يتطلب مكدساً قابلاً للتنفيذ.

    noextern-protected-data
        لا يعامل رموز البيانات المحمية كخارجية عند بناء مكتبة مشتكة. يتجاوز هذا الخيار الإعداد المبدئي لخلفية الرابط. يمكن استخدامه للالتفاف على عمليات إعادة التوطين غير الصحيحة ضد رموز البيانات المحمية التي يولدها المترجم. التحديثات على رموز البيانات المحمية بواسطة وحدة أخرى ليست مرئية للمكتبة المشتركة الناتجة. مدعوم لـ i386 و x86-64.

    noreloc-overflow
        عطّل فحص تجاوز سعة إعادة التوطين. يمكن استخدام هذا لتعطيل فحص تجاوز السعة إذا لم يكن هناك تجاوز سعة لإعادة توطين حركي وقت التشغيل. مدعوم لمعمارية x86_64.

    ختم_الذاكرة
    nomemory-seal
        إصدار تعليمات للملف التنفيذي أو المكتبة المشتركة بوجوب ختم (seal) جميع أجزاء PT_LOAD لتجنب التلاعب اللاحق بها (مثل تغيير أعلام الحماية، أو حجم الجزء، أو إزالة التعيين). هذا إجراء لتقوية الأمن يتطلب دعماً من النظام. يولد هذا GNU_PROPERTY_MEMORY_SEAL في قسم .note.gnu.property.

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

    origin
        تحديد أن الكائن يتطلب معالجة $ORIGIN في المسارات.

    pack-relative-relocs
    nopack-relative-relocs
        ولد إعادة توطين نسبية مدمجة في الملفات التنفيذية المستقلة عن الموقع والمكتبات المشتركة. يضيف مدخلات "DT_RELR"، "DT_RELRSZ" و "DT_RELRENT" إلى القسم الديناميكي. يُتجاهَل عند بناء مخرجات تنفيذية معتمدة على الموقع أو قابلة لإعادة التوطين. nopack-relative-relocs هو المبدئي، الذي يعطل إعادة التوطين النسبية المدمجة. عند الربط بمكتبة GNU C، تُضاف تبعية إصدار رمز GLIBC_ABI_DT_RELR على مكتبة C المشتركة إلى المخرجات. مدعوم لمنصات i386 و x86-64.

    relro
    norelro
        ينشئ ترويسة قطعة ELF من نوع "PT_GNU_RELRO" في الكائن. يحدد هذا قطعة ذاكرة ينبغي جعلها للقراءة فقط بعد إعادة التوطين، إذا كان ذلك مدعوماً. تحديد common-page-size أصغر من حجم صفحة النظام سيجعل هذه الحماية غير فعالة. لا تنشئ قطعة ELF من نوع "PT_GNU_RELRO" إذا استُخدم norelro.

    report-relative-reloc
        الإبلاغ عن عمليات إعادة التوطين النسبية الديناميكية المولدة بواسطة الرابط. مدعوم لـ Linux/i386 و Linux/x86_64.

    sectionheader
    nosectionheader
        يولد ترويسة القسم. لا تولد ترويسة القسم إذا استُخدم nosectionheader. يعد sectionheader هو المبدئي.

    separate-code
    noseparate-code
        ينشئ ترويسة قطعة كود "PT_LOAD" منفصلة في الكائن. يحدد هذا قطعة ذاكرة ينبغي أن تحتوي على تعليمات فقط و يجب أن تكون في صفحات منفصلة تماماً عن أي بيانات أخرى. لا تنشئ قطعة كود "PT_LOAD" منفصلة إذا استُخدم noseparate-code.

    shstk
        ولد GNU_PROPERTY_X86_FEATURE_1_SHSTK في قسم .note.gnu.property للإشارة إلى التوافق مع Intel Shadow Stack. مدعوم لأنظمة Linux/i386 و Linux/x86_64.

    stack-size=قيمة
        تحديد حجم المكدس (stack size) لقطاع ELF من نوع "PT_GNU_STACK". تحديد القيمة صفر سيؤدي إلى تجاوز أي إنشاء مبدئي لقطاع "PT_GNU_STACK" بحجم غير صفري.

    start-stop-gc
    nostart-stop-gc
        عندما يكون --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 في البرامج الجديدة والمكتبات المشتركة بحيث لا تُصَدر هذه الرموز بين الكائنات المشتركة، وهو ما لا يكون مقصوداً في العادة.

    text
    notext
    textoff
        يُبلغ عن خطأ إذا ضُبط DT_TEXTREL، أي إذا كان الكائن المستقل عن الموقع أو المشترك يحتوي على عمليات إعادة توطين ديناميكية في أقسام للقراءة فقط. لا يُبلغ عن خطأ إذا استُخدم notext أو textoff.

    undefs
        لا تبلغ عن مراجع الرموز غير المحلولة من ملفات الكائنات العادية، سواء عند إنشاء ملف تنفيذي أو عند إنشاء مكتبة مشتركة. هذا الخيار هو عكس -z defs.

    unique-symbol
    nounique-symbol
        تجنب أسماء الرموز المحلية المكررة في جدول سلاسل الرموز. ألحق "."number"" بأسماء الرموز المحلية المكررة إذا استُخدِم unique-symbol. السلوك المبدئي هو nounique-symbol.

    x86-64-baseline
    x86-64-v2
    x86-64-v3
    x86-64-v4
        تحديد مستوى 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.

    isa-level-report=none
    isa-level-report=all
    isa-level-report=needed
    isa-level-report=used
        تحديد كيفية الإبلاغ عن مستويات 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.

--gnu-tls-tag
--no-gnu-tls-tag
    يضيف تبعية وسم إصدار "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.

--gnu2-tls-tag
--no-gnu2-tls-tag
    يضيف تبعية وسم إصدار "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 -)
--start-group الأرشيفات --end-group
    يجب أن تكون الـ أرشيفات قائمة بملفات الأرشيف. قد تكون إما أسماء ملفات صريحة، أو خيارات -l.

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

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

--accept-unknown-input-arch
--no-accept-unknown-input-arch
    يخبر الرابط بقبول ملفات الإدخال التي لا يمكن التعرف على معماريتها. الافتراض هو أن المستخدم يعرف ما يفعله ويريد عمداً ربط ملفات الإدخال المجهولة هذه. كان هذا هو السلوك المبدئي للرابط قبل الإصدار 2.14. السلوك المبدئي من الإصدار 2.14 فصاعداً هو رفض مثل هذه الملفات، لذا أُضِيفَ الخيار --accept-unknown-input-arch لاستعادة السلوك القديم.

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

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

--add-needed
--no-add-needed
    هُجر هذان الخياران بسبب تشابه أسمائهما مع الخيارين --as-needed و --no-as-needed. وقد استُبدلا بـ --copy-dt-needed-entries و --no-copy-dt-needed-entries.

-assert كلمة_مفتاحية
    يُتجاهل هذا الخيار من أجل التوافقية مع SunOS.

-Bdynamic
-dy
-call_shared
    الربط مع المكتبات الديناميكية. هذا ذو معنى فقط على المنصات التي تدعم المكتبات المشتركة. هذا الخيار هو المبدئي عادةً على هذه المنصات. المتغيرات المختلفة لهذا الخيار هي للتوافق مع الأنظمة المختلفة. يمكنك استخدام هذا الخيار عدة مرات في سطر الأوامر: فهو يؤثر على البحث عن المكتبات لخيارات -l التي تليه.

-Bgroup
    اضبط علم "DF_1_GROUP" في مدخلة "DT_FLAGS_1" في القسم الديناميكي. يؤدي هذا إلى جعل موصل وقت التشغيل يعالج عمليات البحث في هذا الكائن وتوابعه بحيث تُنفذ فقط داخل المجموعة. يُفترض استخدام --unresolved-symbols=report-all. هذا الخيار ذو معنى فقط على منصات ELF التي تدعم المكتبات المشتركة.

-Bstatic
-dn
-non_shared
-static
    لا يربط ضد المكتبات المشتركة. هذا ذو معنى فقط على المنصات التي تدعم المكتبات المشتركة. المتغيرات المختلفة لهذا الخيار هي للتوافق مع الأنظمة المتنوعة. يمكنك استخدام هذا الخيار مرات متعددة في سطر الأوامر: فهو يؤثر على البحث عن المكتبات لخيارات -l التي تليها. يتضمن هذا الخيار أيضًا --unresolved-symbols=report-all. يمكن استخدام هذا الخيار مع -shared. القيام بذلك يعني أنه يجري إنشاء مكتبة مشتركة ولكن يجب حل جميع المراجع الخارجية للمكتبة من خلال سحب المدخلات من المكتبات الساكنة.

-Bsymbolic
    عند إنشاء مكتبة مشتركة، اربط الإشارات إلى الرموز العامة بالتعريف داخل المكتبة المشتركة، إن وجد. عادةً، يمكن للبرنامج المربوط بمكتبة مشتركة أن يتجاوز التعريف الموجود داخل المكتبة المشتركة. هذا الخيار ذو معنى فقط على منصات ELF التي تدعم المكتبات المشتركة.

-Bsymbolic-functions
    عند إنشاء مكتبة مشتركة، اربط الإشارات إلى رموز الوظائف العامة بالتعريف داخل المكتبة المشتركة، إن وجد. هذا الخيار ذو معنى فقط على منصات ELF التي تدعم المكتبات المشتركة.

-Bno-symbolic
    يمكن لهذا الخيار إلغاء -Bsymbolic و -Bsymbolic-functions المحددين مسبقًا.

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

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

--dynamic-list-data
    تضمين جميع رموز البيانات العامة في القائمة الديناميكية.

--dynamic-list-cpp-new
    توفير القائمة الديناميكية المدمجة لعامل C++ الجديد (new) والحذف (delete). مفيد بشكل رئيس لبناء libstdc++ المشتركة.

--dynamic-list-cpp-typeinfo
    توفير القائمة الديناميكية المدمجة لتعريف نوع وقت التشغيل في C++.

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

--copy-dt-needed-entries
--no-copy-dt-needed-entries
    يؤثر هذا الخيار على معالجة المكتبات الديناميكية المشار إليها بواسطة وسوم 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 لحل الرموز.

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

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

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

--ctf-share-types=طريقة
    اضبط الطريقة المستخدمة لمشاركة الأنواع بين وحدات الترجمة في CTF.

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

    share-duplicated
        وضع الأنواع التي تظهر في وحدات ترجمة متعددة فقط في القاموس المشترك: الأنواع ذات التعريف الواحد تذهب إلى قواميس كل وحدة ترجمة. الأنواع ذات التعريفات الغامضة في وحدات ترجمة متعددة تذهب دائمًا إلى قواميس كل وحدة ترجمة. يميل هذا لجعل CTF أكبر، ولكنه قد يقلل من كمية CTF في القاموس المشترك. بالنسبة للمشاريع الكبيرة جدًا، قد يسرع هذا فتح CTF ويوفر الذاكرة في مستهلك CTF وقت التشغيل.

--no-define-common
    يمنع هذا الخيار تعيين العناوين للرموز المشتركة. أمر السيناريو "INHIBIT_COMMON_ALLOCATION" له نفس التأثير.

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

--force-group-allocation
    يؤدي هذا الخيار إلى قيام الموصل بوضع أعضاء مجموعة الأقسام مثل أقسام المدخلات العادية، وحذف مجموعات الأقسام. هذا هو السلوك المبدئي للوصل النهائي ولكن يمكن استخدام هذا الخيار لتغيير سلوك الوصل القابل لإعادة التوطين (-r). أمر السيناريو "FORCE_GROUP_ALLOCATION" له نفس التأثير.

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

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

--demangle[=style]
--no-demangle
    تتحكم هذه الخيارات فيما إذا كان سيُفك تشويه أسماء الرموز في رسائل الخطأ والمخرجات الأخرى. عندما يُطلب من الرابط فك التشويه، فإنه يحاول تقديم أسماء الرموز بطريقة مقروءة: فهو يزيل الشرطات السفلية البادئة إذا كانت مستخدمة في تنسيق ملف الكائن، ويحول أسماء رموز C++ المشوهة إلى أسماء مقروءة للمستخدم. المترجمات المختلفة لها أنماط تشويه مختلفة. يمكن استخدام معامل نمط فك التشويه الاختياري لاختيار نمط فك تشويه مناسب لمترجمك. سيقوم الرابط بفك التشويه مبدئيًا ما لم يُضبط متغير البيئة COLLECT_NO_DEMANGLE. يمكن استخدام هذه الخيارات لتجاوز الوضع المبدئي.

-Iملف
--dynamic-linker=ملف
    يضبط اسم الرابط الديناميكي. هذا ذو معنى فقط عند توليد ملفات تنفيذية مرتبطة ديناميكياً بتنسيق ELF. الرابط الديناميكي المبدئي صحيح في العادة؛ لا تستخدم هذا ما لم تكن تعرف ما تفعله.

--no-dynamic-linker
    عند إنتاج ملف تنفيذي، احذف طلب استخدام مرابط ديناميكي في وقت التحميل. هذا ذو معنى فقط لملفات ELF التنفيذية التي تحتوي على عمليات إعادة توطين ديناميكية، ويتطلب عادةً كودًا لنقطة الدخول قادرًا على معالجة عمليات إعادة التوطين هذه.

--embedded-relocs
    يشبه هذا الخيار خيار --emit-relocs باستثناء أن عمليات إعادة التوطين (relocs) تُخزن في قسم خاص بالهدف. هذا الخيار مدعوم فقط من قبل أهداف BFIN و CR16 و M68K.

--disable-multiple-abs-defs
    لا تسمح بتعريفات متعددة برموز مدرجة في اسم الملف المستدعى بواسطة -R أو --just-symbols

--fatal-warnings
--no-fatal-warnings
    عامل كل التحذيرات كأخطاء. يمكن استعادة السلوك المبدئي عبر الخيار --no-fatal-warnings.

-w
--no-warnings
    لا تعرض أي رسائل تحذير أو خطأ. يتجاوز هذا --fatal-warnings إذا كان مفعلاً. يمكن استخدام هذا الخيار عندما يكون معروفاً أن الملف الثنائي الناتج لن يعمل، ولكن لا تزال هناك حاجة لإنشائه.

--force-exe-suffix
    التأكد من أن ملف المخرجات له اللاحقة .exe.

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

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

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

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

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

--print-gc-sections
--no-print-gc-sections
    سرد كافة الأقسام التي أُزيلَت بواسطة جامع المهملات. تُطبع القائمة على stderr. هذا الخيار فعال فقط إذا أُمكِنَ جمع المهملات عبر خيار --gc-sections). يمكن استعادة السلوك المبدئي (بعدم سرد الأقسام التي أُزيلَت) بتحديد --no-print-gc-sections في سطر الأوامر.

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

--print-output-format
    اطبع اسم تنسيق المخرج المبدئي (ربما يتأثر بخيارات سطر الأوامر الأخرى). هذه هي السلسلة التي ستظهر في أمر نصي للرابط "OUTPUT_FORMAT".

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

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

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

--help
    اطبع ملخصاً لخيارات سطر الأوامر على المخرج القياسي واخرج.

--target-help
    اطبع ملخصاً لجميع الخيارات الخاصة بالهدف على المخرج القياسي واخرج.

-Map=ملف_الخارطة
    اطبع خريطة ربط إلى الملف 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]

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

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

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

--no-undefined
-z defs
    الإبلاغ عن مراجع الرموز غير المحلولة من ملفات الكائنات العادية. يُفعل ذلك حتى لو كان الرابط ينشئ مكتبة مشتركة غير رمزية. يتحكم المفتاح --[no-]allow-shlib-undefined في سلوك الإبلاغ عن المراجع غير المحلولة الموجودة في المكتبات المشتركة التي تُربَط.

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

--allow-multiple-definition
-z muldefs
    عادةً ما يبلغ الرابط عن خطأ فادح عندما يُعرف رمز عدة مرات. تسمح هذه الخيارات بتعريفات متعددة وسيُستخدم التعريف الأول.

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

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

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

    •   المكتبة المشتركة المحددة في وقت الربط قد لا تكون هي نفسها المتوفرة في وقت التحميل، لذا قد يكون الرمز قابلاً للحل فعليًا في وقت التحميل.

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

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

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

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

--no-undefined-version
    عادةً ما يتجاهل الرابط الرمز عندما يكون له إصدار غير محدد. هذا الخيار يمنع الرموز ذات الإصدار غير المحدد وسيُصدر خطأ فادح بدلاً من ذلك.

--default-symver
    أنشئ واستخدم نسخة رمز مبدئية (soname) للرموز المصدرة غير المزودة بنسخة.

--default-imported-symver
    أنشئ واستخدم نسخة رمز مبدئية (soname) للرموز المستوردة غير المزودة بنسخة.

--no-warn-mismatch
    عادةً ما يُصدر ld خطأً إذا حاولت ربط ملفات مدخلات غير متطابقة لسبب ما، ربما لأنه صُرِّفَت لمعالجات مختلفة أو لترتيب بايتات (endiannesses) مختلف. يخبر هذا الخيار ld بأنه يجب أن يسمح بمثل هذه الأخطاء المحتملة بصمت. يجب استخدام هذا الخيار بحذر فقط، في الحالات التي تكون قد اتخذت فيها إجراءً خاصًا يضمن أن أخطاء الرابط غير مناسبة.

--no-warn-search-mismatch
    عادةً ما يُصدر ld تحذيرًا إذا وجد مكتبة غير متوافقة أثناء البحث عن المكتبات. هذا الخيار يُسكت هذا التحذير.

--no-whole-archive
    أوقف مفعول الخيار --whole-archive لملفات الأرشيف اللاحقة.

--noinhibit-exec
    الاحتفاظ بملف المخرجات القابل للتنفيذ طالما أنه لا يزال صالحًا للاستخدام. عادةً، لن ينتج الرابط ملف مخرجات إذا واجه أخطاء أثناء عملية الربط؛ حيث يخرج دون كتابة ملف مخرجات عند إصدار أي خطأ مهما كان.

-nostdlib
    البحث في أدلة المكتبات المحددة صراحةً في سطر الأوامر فقط. وتُتجاهَل أدلة المكتبات المحددة في سكريبتات الرابط (بما في ذلك سكريبتات الرابط المحددة في سطر الأوامر).

--oformat=تنسيق-المخرج
    قد يُضبط ld لدعم أكثر من نوع من ملفات الكائنات. إذا ضُبط ld بهذه الطريقة، فيمكنك استخدام خيار --oformat لتحديد التنسيق الثنائي لملف الكائن المخرج. حتى عندما يُضبط ld لدعم تنسيقات كائنات بديلة، فلا تحتاج عادةً لتحديد هذا، حيث ينبغي ضبط ld لينتج كتنسيق مخرج مبدئي التنسيق الأكثر شيوعاً على كل حاسوب. output-format هو سلسلة نصية، وهي اسم تنسيق معين تدعمه مكتبات BFD. (يمكنك سرد التنسيقات الثنائية المتاحة باستخدام objdump -i.) يمكن لأمر السكربت "OUTPUT_FORMAT" أيضًا تحديد تنسيق المخرج، ولكن هذا الخيار يتجاوزه.

--out-implib ملف
    أنشئ مكتبة استيراد في file تقابل الملف التنفيذي الذي يولده الموصل (مثل برنامج DLL أو ELF). مكتبة الاستيراد هذه (والتي يجب تسميتها "*.dll.a" أو "*.a" لملفات DLL) يمكن استخدامها لوصل العملاء بالملف التنفيذي المولد؛ هذا السلوك يجعل من الممكن تخطي خطوة إنشاء مكتبة استيراد منفصلة (مثل "dlltool" لملفات DLL). هذا الخيار متاح فقط لمنافذ الموصل المستهدفة لـ i386 PE و ELF.

-pie
--pic-executable
    أنشئ ملفًا تنفيذيًا مستقلاً عن الموضع. هذا مدعوم حاليًا فقط على منصات ELF. تُنقل الملفات التنفيذية المستقلة عن الموضع بواسطة الموصل الديناميكي إلى العنوان الافتراضي الذي يختاره نظام التشغيل لها، والذي قد يختلف بين الاستدعاءات. تُوسم بـ ET_DYN في ترويسة ملف ELF، لكنها تختلف عن المكتبات المشتركة بعدة طرق. لا يمكن، بشكل خاص، تجاوز الرموز المعرفة في PIE مبدئيًا بواسطة كائن آخر كما يمكن في المكتبات المشتركة.

-no-pie
    أنشئ ملفًا تنفيذيًا معتمدًا على الموضع. هذا هو المبدئي.

-qmagic
    يُتجاهل هذا الخيار من أجل التوافقية مع لينكس.

-Qy يُتجاهل هذا الخيار من أجل التوافقية مع SVR4.

--relax
--no-relax
    خيار ذو تأثيرات معتمدة على الآلة. هذا الخيار مدعوم فقط في أهداف قليلة.

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

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

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

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

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

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

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

-rpath=مسار
    أضف دليلًا إلى مسار بحث مكتبة وقت التشغيل. يُستخدم هذا عند ربط ملف 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.

-rpath-link=مسار
    عند استخدام 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) تحذيراً ويستمر في عملية الربط.

--section-ordering-file=سكربت
    يُستخدم هذا الخيار لتعزيز سيناريو الموصل الحالي بتعيين إضافي لأقسام المدخلات إلى أقسام المخرجات. يجب أن يستخدم هذا الملف نفس الصيغة لـ "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.*) }
              }

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

-shared
-Bshareable
    أنشئ مكتبة مشتركة. هذا مدعوم حاليًا فقط على منصات ELF و XCOFF و SunOS. في SunOS، سيقوم الموصل آليًا بإنشاء مكتبة مشتركة إذا لم يُستخدم الخيار -e وكانت هناك رموز غير معرفة في الوصل.

--sort-common
--sort-common=ascending
--sort-common=descending
    يخبر هذا الخيار ld بفرز الرموز المشتركة حسب المحاذاة بترتيب تصاعدي أو تنازلي عند وضعها في أقسام المخرجات المناسبة. محاذات الرموز المأخوذة في الاعتبار هي ستة عشر بايت أو أكبر، وثمانية بايت، وأربعة بايت، وبايتان، وبايت واحد. هذا لمنع الفجوات بين الرموز بسبب قيود المحاذاة. إذا لم يُحدد ترتيب فرز، فيُفترض الترتيب التنازلي.

--sort-section=name
    سيطبق هذا الخيار "SORT_BY_NAME" على جميع أنماط الأقسام التي تستخدم محارف البدل في سيناريو الموصل.

--sort-section=alignment
    سيطبق هذا الخيار "SORT_BY_ALIGNMENT" على جميع أنماط الأقسام التي تستخدم محارف البدل في سيناريو الموصل.

--spare-dynamic-tags=العدد
    يحدد هذا الخيار عدد الفتحات الفارغة التي يجب تركها في قسم .dynamic لكائنات ELF المشتركة. قد تكون الفتحات الفارغة مطلوبة بواسطة أدوات ما بعد المعالجة، مثل prelinker. المبدئي هو 5.

--split-by-file[=الحجم]
    مشابه لـ --split-by-reloc ولكنه ينشئ قسم إخراج جديد لكل ملف إدخال عند الوصول إلى الحجم size. القيمة المبدئية لـ size هي 1 إذا لم تُعطَ.

--split-by-reloc[=العدد]
    يحاول إنشاء أقسام إضافية في ملف المخرجات بحيث لا يحتوي أي قسم مخرجات منفرد في الملف على أكثر من count من عمليات إعادة التوطين. يفيد هذا عند توليد ملفات ضخمة قابلة لإعادة التوطين لتنزيلها في نوى وقت حقيقي معينة بتنسيق ملفات الكائنات COFF؛ بما أن COFF لا يمكنه تمثيل أكثر من 65535 عملية إعادة توطين في قسم واحد. لاحظ أن هذا سيفشل في العمل مع تنسيقات ملفات الكائنات التي لا تدعم الأقسام التعسفية. لن يقوم الرابط بتقسيم أقسام المدخلات الفردية لإعادة التوزيع، لذا إذا احتوى قسم مدخلات واحد على أكثر من count من عمليات إعادة التوطين، فسيحتوي قسم مخرجات واحد على هذا العدد من عمليات إعادة التوطين. القيمة المبدئية لـ count هي 32768.

--stats[=اسم_الملف]
    احسب واعرض إحصائيات حول عملية الموصل، مثل وقت التنفيذ واستخدام الذاكرة.

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

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

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

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

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

    بالإضافة إلى ذلك، تُبَلَّغُ المعلومات أيضًا لمرحلة خاصة تسمى ALL تغطي عملية الربط بأكملها.

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

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

            إحصائيات: إصدار الموصل: (GNU Binutils) 2.44.50.20250401
            إحصائيات: بدأ الموصل: الأربعاء 2 أبريل 09:36:41 2025
            إحصائيات: المعاملات: ld -z norelro -z nomemory-seal -z no-separate-code -o a.out [...]

            إحصائيات: المرحلة               cpu time       rss      user time    system time     memory
            إحصائيات: الاسم                (microsec)   (KiB)      (seconds)      (seconds)      (KiB)
            إحصائيات: ALL                   390082    217740              0              0   25219440
            إحصائيات: ctf processing            12         0              0              0          0
            إحصائيات: string merge            1324         0              0              0     406544
            إحصائيات: parsing                  349       288              0              0     119792
            إحصائيات: plugins                    1         0              0              0          0
            إحصائيات: processing files      259616    214524              0              0   31569120
            إحصائيات: write                 116493         0              0              0      48096

--no-stats
    يعطّل الإبلاغ عن إحصائيات الاستخدام، في حال فُعِّلَت عبر خيار سطر الأوامر --stats أو متغير البيئة LD_STATS.

--sysroot=الدليل
    استخدم directory كموقع لـ sysroot، متجاوزًا القيمة المبدئية وقت الضبط. هذا الخيار مدعوم فقط من قبل الروابط التي ضُبطت باستخدام --with-sysroot.

--task-link
    يُستخدم هذا بواسطة الأهداف القائمة على COFF/PE لإنشاء ملف كائن مرتبط بمهمة حيث حُوّلت جميع الرموز العامة إلى رموز ساكنة.

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

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

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

--image-base=org
    عند استخدام ELF، هو نفسه -Ttext-segment، حيث يقوم كلا الخيارين فعليًا بضبط عنوان الأساس لملف ELF التنفيذي.

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

-Tbss=أصل
-Tdata=أصل
-Ttext=أصل
    نفس --section-start، مع استخدام ".bss" أو ".data" أو ".text" كـ sectionname.

-Ttext-segment=أصل
    عند إنشاء ملف تنفيذي ELF، فإنه سيضبط عنوان أول بايت من الشريحة الأولى. لاحظ أنه عند استخدام -pie مع -Ttext-segment=org، يوسم الملف التنفيذي المخرج بـ ET_EXEC بحيث يضمن أن يكون عنوان أول بايت من شريحة النص هو org في وقت التشغيل.

-Trodata-segment=أصل
    عند إنشاء ملف تنفيذي ELF أو كائن مشترك لهدف تكون فيه البيانات المخصصة للقراءة فقط في شريحتها الخاصة المنفصلة عن نص التنفيذ، فإنه سيضبط عنوان أول بايت من شريحة البيانات المخصصة للقراءة فقط.

-Tldata-segment=أصل
    عند إنشاء ملف تنفيذي ELF أو كائن مشترك لنموذج الذاكرة المتوسط x86-64، فإنه سيضبط عنوان أول بايت من شريحة ldata.

--unresolved-symbols=الطريقة
    حدّد كيفية التعامل مع الرموز غير المحلولة. هناك أربع قيم ممكنة لـ method:

    ignore-all
        لا تبلغ عن أي رموز غير محلولة.

    report-all
        الإبلاغ عن جميع الرموز غير المحلولة. هذا هو المبدئي.

    ignore-in-object-files
        الإبلاغ عن الرموز غير المحلولة الموجودة في المكتبات المشتركة، مع تجاهلها إذا كانت قادمة من ملفات كائنات عادية.

    ignore-in-shared-libs
        يُبلغ عن الرموز غير المحلولة التي تأتي من ملفات الكائنات العادية، ولكن يتجاهلها إذا جاءت من المكتبات المشتركة. يمكن أن يكون هذا مفيداً عند إنشاء ثنائي ديناميكي ويُعرف أن جميع المكتبات المشتركة التي ينبغي أن يشير إليها مضمنة في سطر أوامر الرابط.

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

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

--dll-verbose
--verbose[=العدد]
    اعرض رقم إصدار ld واسرد محاكيات الرابط المدعومة. اعرض ملفات الإدخال التي يمكن فتحها والتي لا يمكن فتحها. اعرض سكريبت الرابط المستخدم من قبل الرابط. إذا كان وسيط الرقم NUMBER الاختياري أكبر من 1، فستُعرض أيضًا حالة رموز الملحق.

--version-script=ملف_سكربت_الإصدارة
    تحديد اسم سكربت الإصدار للرابط. يُستخدم هذا عادةً عند إنشاء مكتبات مشتركة لتحديد معلومات إضافية حول التسلسل الهرمي للإصدارات للمكتبة التي تُنشَأ. هذا الخيار مدعوم بالكامل فقط على منصات ELF التي تدعم المكتبات المشتركة؛ انظر VERSION. وهو مدعوم جزئياً على منصات PE، والتي يمكنها استخدام سكربتات الإصدار لتصفية رؤية الرموز في وضع التصدير التلقائي: أي رموز مُيِّزَت كـ local في سكربت الإصدار لن تُصَدَّر.

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

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

    int i = 1;
        تعريف، ينتقل إلى قسم البيانات المبدئية في ملف المخرجات.

    extern int i;
        مرجع غير معرف، لا يخصص مساحة. يجب أن يكون هناك إما تعريف أو رمز مشترك للمتغير في مكان ما.

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

    يمكن أن ينتج الخيار --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: الشائع الأصغر موجود هنا

--warn-constructors
    حذر إذا استُخدمت أي منشئات عامة. هذا مفيد فقط لعدد قليل من تنسيقات ملفات الكائنات. بالنسبة لتنسيقات مثل COFF أو ELF، لا يمكن للمرابط اكتشاف استخدام المنشئات العامة.

--warn-execstack
--warn-execstack-objects
--no-warn-execstack
    في منصات ELF قد يُولد الرابط رسائل تحذير إذا طُلب منه إنشاء ملف مخرجات يحتوي على مكدس تنفيذي. هناك ثلاث حالات ممكنة:

    1.  لا تولد أي تحذيرات.

    2.  قم دائماً بإنشاء تحذيرات، حتى إذا طُلِبَ مكدس قابل للتنفيذ عبر خيار سطر الأوامر -z execstack.

    3.  توليد تحذير فقط إذا طلب ملف كائني مكدسًا تنفيذيًا، ولكن ليس إذا جرى استخدام الخيار -z execstack.

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

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

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

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

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

--warn-once
    التحذير مرة واحدة فقط لكل رمز غير معرف، بدلاً من مرة واحدة لكل وحدة تشير إليه.

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

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

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

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

--warn-section-align
    حذر إذا تغير عنوان قسم المخرج بسبب المحاذاة. عادةً، تُضبط المحاذاة بواسطة قسم المدخل. لن يُغير العنوان إلا إذا لم يُحدد صراحة؛ أي إذا لم يحدد أمر "SECTIONS" عنوان بدء للقسم.

--warn-textrel
    حذر إذا أضاف المرابط DT_TEXTREL إلى ملف تنفيذي مستقل عن الموقع أو كائن مشترك.

--warn-alternate-em
    حذر إذا كان للكائن كود آلة ELF بديل.

--warn-unresolved-symbols
    إذا كان الرابط سيُبَلَّغُ عن رمز لم يُحَلَّ (انظر الخيار --unresolved-symbols) فإنه عادةً ما يصدر خطأً. يجعل هذا الخيار الرابط يصدر تحذيرًا بدلاً من ذلك.

--error-unresolved-symbols
    يستعيد هذا سلوك الرابط المبدئي في توليد الأخطاء عندما يُبلغ عن رموز غير محلولة.

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

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

--wrap=الرمز
    استخدم وظيفة غلاف لـ 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) أو كبت (--no-eh-frame-hdr) إنشاء مقطع ".eh_frame_hdr" وترويسة شريحة ELF "PT_GNU_EH_FRAME".

--no-ld-generated-unwind-info
    طلب إنشاء معلومات فك (unwind) لـ ".eh_frame" لمقاطع الكود المولدة بواسطة الرابط مثل PLT. هذا الخيار مفعل مبدئيًا إذا كان فك المعلومات المولد بواسطة الرابط مدعومًا.

--discard-sframe
    اهمل معلومات تتبع المكدس ".sframe" من المخرجات. يمنع هذا الخيار أيضًا إنشاء بيانات تتبع مكدس SFrame لأقسام الكود التي يولدها الرابط مثل PLT. هذا الخيار معطل مبدئياً.

--enable-new-dtags
--disable-new-dtags
    يمكن لهذا الموصل إنشاء وسوم ELF الحيوية الجديدة. لكن أنظمة ELF القديمة قد لا تفهمها. إذا حددت --enable-new-dtags، فستُنشأ الوسوم الحيوية الجديدة عند الحاجة وتُهمل الوسوم الحيوية القديمة. إذا حددت --disable-new-dtags، فلن تُنشأ أي وسوم حيوية جديدة. مبدئيًا، لا تُنشأ الوسوم الحيوية الجديدة. لاحظ أن هذه الخيارات متاحة فقط لأنظمة ELF.

--hash-size=رقم
    يضبط الحجم المبدئي لجداول التجزئة (hash tables) الخاصة بالرابط إلى عدد أولي قريب من number. يمكن أن تؤدي زيادة هذه القيمة إلى تقليل الوقت الذي يستغرقه الرابط لأداء مهامه، على حساب زيادة متطلبات ذاكرة الرابط. وبالمثل، يمكن أن يؤدي تقليل هذه القيمة إلى تقليل متطلبات الذاكرة على حساب السرعة. القيمة المبدئية هي 4051 في الظروف العادية و 1021 إذا استُخدم خيار سطر الأوامر --reduce-memory-overheads.

--hash-style=النمط
    يضبط نوع جدول (جداول) التجزئة الخاصة بالرابط. يمكن أن يكون style إما "sysv" لقسم ELF ".hash" التقليدي، أو "gnu" لقسم GNU ".gnu.hash" ذي النمط الجديد، أو "both" لكل من جداول تجزئة ELF التقليدية و GNU ذات النمط الجديد. يعتمد الإعداد المبدئي على كيفية ضبط الرابط، ولكنه في معظم الأنظمة القائمة على لينكس سيكون "both".

--compress-debug-sections=none
--compress-debug-sections=zlib
--compress-debug-sections=zlib-gnu
--compress-debug-sections=zlib-gabi
--compress-debug-sections=zstd
    في منصات 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 الخاص بالرابط.

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

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

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

--max-cache-size=الحجم
    ld عادة ما يخبئ معلومات إعادة التوطين وجداول الرموز لملفات المدخلات في الذاكرة بحجم غير محدود. هذا الخيار يضبط الحد الأقصى لحجم الخبيئة إلى size. ملاحظة - إذا استُخدم خيار سطر الأوامر --no-keep-memory، فإن الرابط يتصرف كما لو ضُبط الحد الأقصى لحجم الخبيئة إلى 0 - أي لا يُحتفظ بشيء.

--build-id
--build-id=نمط
    طلب إنشاء مقطع ملاحظة 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" سابقة في سطر الأوامر.

--package-metadata=JSON
    يطلب إنشاء قسم ملاحظة 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. الخيارات التي تأخذ قيماً يمكن فصلها عن قيمها إما بمسافة أو بعلامة يساوي.

--add-stdcall-alias
    إذا أُعطيت، ستُصدر الرموز التي لها لاحقة stdcall (@nn) كما هي وأيضًا مع إزالة اللاحقة. [هذا الخيار خاص بمنفذ الرابط المخصص لـ i386 PE]

--base-file ملف
    استخدم file كاسم لملف تُحفظ فيه العناوين الأساسية لكافة عمليات إعادة التوطين اللازمة لتوليد DLLs باستخدام dlltool. [هذا خيار خاص بـ i386 PE]

--dll
    أنشئ DLL بدلاً من ملف تنفيذي عادي. يمكنك أيضًا استخدام -shared أو تحديد "LIBRARY" في ملف ".def" المعطى. [هذا الخيار خاص بمنفذ الموصل المستهدف لـ i386 PE]

--enable-long-section-names
--disable-long-section-names
    تضيف متغيرات PE لصيغة كائن COFF امتدادًا يسمح باستخدام أسماء أقسام أطول من ثمانية محارف، وهو الحد الطبيعي لـ COFF. مبدئيًا، لا يُسمح بهذه الأسماء إلا في ملفات الكائنات، لأن صور البرامج القابلة للتنفيذ المربوطة بالكامل لا تحمل جدول سلاسل COFF المطلوب لدعم الأسماء الأطول. كامتداد لغنو، من الممكن السماح باستخدامها في صور البرامج القابلة للتنفيذ أيضًا، أو (ربما بلا فائدة!) منعها في ملفات الكائنات، باستخدام هذين الخيارين. صور البرامج القابلة للتنفيذ التي تولد بهذه الأسماء الطويلة للأقسام غير قياسية قليلاً، لأنها تحمل جدول سلاسل، وقد تولد مخرجات مربكة عند فحصها بأدوات غير مدركة لـ PE من خارج غنو، مثل عارضي الملفات والمفرغين. ومع ذلك، يعتمد GDB على استخدام أسماء أقسام PE الطويلة للعثور على أقسام معلومات تنقيح Dwarf-2 في صورة قابلة للتنفيذ في وقت التشغيل، ولذا إذا لم يُحدد أي من الخيارين في سطر الأوامر، فسيقوم ld بتمكين أسماء الأقسام الطويلة، متجاوزًا السلوك المبدئي والصحيح تقنيًا، عندما يجد وجود معلومات تنقيح أثناء ربط صورة قابلة للتنفيذ وعدم تجريد الرموز. [هذا الخيار صالح لجميع المنافذ التي تستهدف PE في الرابط]

--enable-stdcall-fixup
--disable-stdcall-fixup
    إذا وجد الرابط رمزًا لا يمكنه حله، فسيحاول إجراء "ربط ضبابي" من خلال البحث عن رمز معرف آخر يختلف فقط في تنسيق اسم الرمز (cdecl مقابل stdcall) وسيُحَل هذا الرمز بالربط مع المطابق له. على سبيل المثال، قد يُربَط الرمز غير المعرف "_foo" بالدالة "_foo@12"، أو الرمز غير المعرف "_bar@16" بالدالة "_bar". عندما يقوم الرابط بذلك، فإنه يطبع تحذيرًا، حيث كان من المفترض عادةً أن يفشل الربط، ولكن أحيانًا قد تحتاج مكتبات الاستيراد المولدة من ملفات dll لأطراف ثالثة لهذه الميزة لتكون صالحة للاستخدام. إذا حددت --enable-stdcall-fixup، فستُفعَّل هذه الميزة بالكامل ولن تُطبَع تحذيرات. وإذا حددت --disable-stdcall-fixup، فستُعطَّل هذه الميزة وتُعتبر مثل هذه الاختلافات أخطاء. [هذا الخيار خاص بمنفذ الرابط الموجه لـ i386 PE]

--leading-underscore
--no-leading-underscore
    بالنسبة لمعظم الأهداف، يكون بادئة الرموز المبدئية هي شرطة سفلية وتُعرف في وصف الهدف. من خلال هذا الخيار، يمكن تعطيل أو تمكين بادئة الرمز المبدئية المتمثلة في الشرطة السفلية.

--export-all-symbols
    إذا أُعطي، فستُصَدر جميع الرموز العالمية في الكائنات المستخدمة لبناء 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 المستهدف للرابط]

--exclude-symbols رمز,رمز,...
    يحدد قائمة بالرموز التي ينبغي عدم تصديرها تلقائياً. يمكن فصل أسماء الرموز بفواصل أو نقطتين رأسيين. [هذا الخيار خاص بإصدار الرابط المستهدف لـ i386 PE]

--exclude-all-symbols
    يحدد أنه لا ينبغي تصدير أي رموز تلقائياً. [هذا الخيار خاص بإصدار الرابط المستهدف لـ i386 PE]

--file-alignment
    تحديد محاذاة الملف. ستبدأ الأقسام في الملف دائماً عند إزاحات ملف تكون من مضاعفات هذا الرقم. القيمة المبدئية هي 512. [هذا الخيار خاص بإصدار الرابط المستهدف لـ i386 PE]

--heap احتياطي
--heap احتياطي,إيداع
    تحديد عدد بايتات الذاكرة التي ستحجز (وتخصص اختيارياً) لاستخدامها كـ كومة (heap) لهذا البرنامج. المبدئي هو حجز 1 ميجابايت وتخصيص 4 كيلوبايت. [هذا الخيار خاص بإصدار الرابط المستهدف لـ i386 PE]

--kill-at
    إذا أُعطيت، ستُزال لواحق stdcall (@nn) من الرموز قبل تصديرها. [هذا الخيار خاص بمنفذ الرابط المخصص لـ i386 PE]

--large-address-aware
    إذا أُعطيت، يُضبط البت المناسب في حقل "Characteristics" لترويسة COFF للإشارة إلى أن هذا الملف التنفيذي يدعم عناوين افتراضية أكبر من 2 غيغابايت. يجب استخدام هذا بالتزامن مع مفتاح /3GB أو /USERVA=value ميغابايت في قسم "[operating systems]" من BOOT.INI. وإلا، فلن يكون لهذا البت أي تأثير. [هذا الخيار خاص بمنافذ الرابط المخصصة لـ PE]

--disable-large-address-aware
    يعكس تأثير خيار --large-address-aware السابق. هذا مفيد إذا كان --large-address-aware مضبوطًا دائمًا بواسطة مشغل المترجم (مثل Cygwin gcc) والملف التنفيذي لا يدعم عناوين افتراضية أكبر من 2 جيجابايت. [هذا الخيار خاص بمنافذ الرابط الموجهة لـ PE]

--major-image-version قيمة
    يضبط الرقم الرئيسي لـ "إصدار الصورة". المبدئي هو 1. [هذا الخيار خاص بمنفذ الموصل الموجه لـ i386 PE]

--major-os-version قيمة
    يضبط الرقم الرئيسي لـ "إصدار نظام التشغيل". المبدئي هو 4. [هذا الخيار خاص بمنفذ الموصل الموجه لـ i386 PE]

--major-subsystem-version قيمة
    يضبط الرقم الرئيسي لـ "إصدار النظام الفرعي". المبدئي هو 4. [هذا الخيار خاص بمنفذ الموصل الموجه لـ i386 PE]

--minor-image-version قيمة
    يضبط الرقم الفرعي لـ "إصدار الصورة". المبدئي هو 0. [هذا الخيار خاص بمنفذ الموصل الموجه لـ i386 PE]

--minor-os-version القيمة
    يضبط الرقم الفرعي لـ "إصدار نظام التشغيل". المبدئي هو 0. [هذا الخيار خاص بمنفذ الموصل الموجه لـ i386 PE]

--minor-subsystem-version القيمة
    يضبط الرقم الفرعي لـ "إصدار النظام الفرعي". المبدئي هو 0. [هذا الخيار خاص بمنفذ الموصل الموجه لـ i386 PE]

--output-def ملف
    سينشئ الرابط الملف file الذي سيحتوي على ملف DEF مطابق لملف DLL الذي يولده الرابط. هذا الملف DEF (الذي يجب تسميته "*.def") يمكن استخدامه لإنشاء مكتبة استيراد باستخدام "dlltool" أو يمكن استخدامه كمرجع للرموز المصدرة آلياً أو ضمنياً. [هذا الخيار خاص بمنفذ الرابط المستهدف لـ i386 PE]

--enable-auto-image-base
--enable-auto-image-base=قيمة
    اختر أساس الصورة لملفات DLL آلياً، وبدءاً اختيارياً من قيمة الأساس value، ما لم يُحدد واحد باستخدام معطى "--image-base". عبر استخدام هاش مولد من اسم dll لإنشاء أسس صور فريدة لكل DLL، تُتجنب التصادمات وإعادات التوطين في الذاكرة التي قد تؤخر تنفيذ البرنامج. [هذا الخيار خاص بمنفذ i386 PE للواصل]

--disable-auto-image-base
    لا تولد قاعدة صورة فريدة آلياً. إذا لم تكن هناك قاعدة صورة محددة من قبل المستخدم ("--image-base") فاستخدم الوضع المبدئي للمنصة. [هذا الخيار خاص بمنفذ i386 PE المستهدف للرابط]

--dll-search-prefix سلسلة
    عند الربط ديناميكيًا بـ dll بدون مكتبة استيراد، ابحث عن "<string><basename>.dll" مفضلاً إياها على "lib<basename>.dll". يسمح هذا السلوك بالتمييز بسهولة بين ملفات DLL المبنية للمنصات الفرعية المختلفة: native و cygwin و uwin و pw وغيرها. على سبيل المثال، تستخدم ملفات DLL الخاصة بـ cygwin عادةً "--dll-search-prefix=cyg". [هذا الخيار خاص بمنفذ المرابط المستهدف لـ i386 PE]

--enable-auto-import
    قم بإجراء ربط متطور لـ "_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()).

--disable-auto-import
    لا تحاول إجراء ربط متطور لـ "_symbol" بـ "__imp__symbol" لعمليات استيراد البيانات (DATA) من مكتبات DLL. [هذا الخيار خاص بمنفذ i386 PE المستهدف للرابط]

--enable-runtime-pseudo-reloc
    إذا كان الكود الخاص بك يحتوي على تعبيرات موصوفة في قسم --enable-auto-import، أي استيرادات DATA من DLL بإزاحة غير صفرية، فإن هذا المفتاح سيُنشئ متجهاً من 'runtime pseudo relocations' التي يمكن استخدامها بواسطة بيئة وقت التشغيل لضبط المراجع لهذه البيانات في كود العميل الخاص بك. [هذا الخيار خاص بمنفذ i386 PE المستهدف للرابط]

--disable-runtime-pseudo-reloc
    لا تنشئ عمليات إعادة توطين وهمية لاستيرادات البيانات ذات الإزاحة غير الصفرية من مكتبات DLL. [هذا الخيار خاص بمنفذ i386 PE المستهدف للرابط]

--enable-extra-pe-debug
    أظهر معلومات تنقيح إضافية متعلقة بـ thunking لرموز الاستيراد التلقائي. [هذا الخيار خاص بمنفذ الموصل الموجه لـ i386 PE]

--section-alignment
    يضبط موازاة الأقسام. الأقسام في الذاكرة ستبدأ دائمًا عند عناوين هي مضاعفات لهذا الرقم. المبدئي هو 0x1000. [هذا الخيار خاص بمنفذ الموصل الموجه لـ i386 PE]

--stack احتياطي
--stack احتياطي,إيداع
    تحديد عدد بايتات الذاكرة التي سَتُحجَز (وتُخصَّص اختيارياً) لاستخدامها كـ مكدس (stack) لهذا البرنامج. المبدئي هو حجز 2 ميجابايت وتخصيص 4 كيلوبايت. [هذا الخيار خاص بإصدار الرابط المستهدف لـ i386 PE]

--subsystem أي
--subsystem أي:رئيس
--subsystem أي:رئيس.فرعي
    يحدد النظام الفرعي الذي سَيُنَفَّذُ برنامجك تحته. القيم المسموح بها لـ which هي "native" و "windows" و "console" و "posix" و "xbox". يمكنك اختيارياً ضبط إصدار النظام الفرعي أيضًا. تُقْبَلُ القيم الرقمية أيضًا لـ which. [هذا الخيار خاص بإصدار الرابط المستهدف لـ i386 PE]

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

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

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

--dynamicbase
--disable-dynamicbase
    قد يُغَيَّر موقع عنوان قاعدة الصورة باستخدام عشوائية تخطيط مساحة العنوان (ASLR). قُدِّمَت هذه الميزة مع MS Windows Vista لأهداف i386 PE. هذا الخيار مفعل مبدئيًا لأهداف MinGW ولكن يمكن تعطيله عبر الخيار --disable-dynamicbase. يتضمن هذا الخيار أيضًا --enable-reloc-section.

--forceinteg
--disable-forceinteg
    تُفرض فحوصات سلامة الكود. هذا الخيار معطل مبدئيًا.

--nxcompat
--disable-nxcompat
    الصورة متوافقة مع منع تنفيذ البيانات (DEP). قُدِّمَت هذه الميزة مع MS Windows XP SP2 لأهداف i386 PE. الخيار مفعل مبدئيًا لأهداف MinGW.

--no-isolation
--disable-no-isolation
    على الرغم من أن الصورة تدعم العزل، إلا أنه لا يجب عزلها. هذا الخيار معطل مبدئياً.

--no-seh
--disable-no-seh
    الصورة لا تستخدم SEH. لا يجوز استدعاء أي معالج SE من هذه الصورة. هذا الخيار معطل مبدئيًا.

--no-bind
--disable-no-bind
    لا تربط هذه الصورة. هذا الخيار معطل مبدئياً.

--wdmdriver
--disable-wdmdriver
    يستخدم المشغل نموذج مشغل MS Windows. هذا الخيار معطل مبدئيًا.

--tsaware
--disable-tsaware
    الصورة مدركة لـ Terminal Server. هذا الخيار معطل مبدئيًا.

--insert-timestamp
--no-insert-timestamp
    إدراج طابع زمني حقيقي في الصورة. هذا هو السلوك المبدئي لأنه يطابق الكود القديم ويعني أن الصورة ستعمل مع أدوات أخرى مملوكة (proprietary). المشكلة في هذا الافتراض هي أنه سيؤدي إلى إنتاج صور مختلفة قليلاً في كل مرة يُربَط فيها نفس المصادر. يمكن استخدام الخيار --no-insert-timestamp لإدراج قيمة صفرية للطابع الزمني، مما يضمن أن الملفات الثنائية المنتجة من مصادر متطابقة ستكون متطابقة عند المقارنة.

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

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

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

--dsbt-size الحجم
    يضبط هذا الخيار عدد المدخلات في DSBT للملف التنفيذي الحالي أو المكتبة المشتركة إلى size. المبدئي هو إنشاء جدول بـ 64 مدخلة.

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

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

--branch-stub
    يُمكّن هذا الخيار تخفيف فروع الموصل عن طريق إدراج أقسام فرعية بديلة عند الحاجة لتوسيع نطاق الفروع. هذا الخيار غير مطلوب عادةً لأن C-SKY تدعم تعليمات الفرع والاستدعاء التي يمكنها الوصول إلى نطاق الذاكرة الكامل، ويُعالج تخفيف الفروع عادةً بواسطة المترجم أو المجمّع.

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

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

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

--bank-window اسم
    يشير هذا الخيار للموصل إلى اسم منطقة الذاكرة في مواصفة MEMORY التي تصف نافذة بنك الذاكرة. ثم يُستخدم تعريف هذه المنطقة بواسطة الموصل لحساب الصفحات والعناوين داخل نافذة الذاكرة.

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

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

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

--insn32
--no-insn32
    تتحكم هذه الخيارات في اختيار تعليمات microMIPS المستخدمة في الكود المولد بواسطة الرابط، مثل ذلك الموجود في PLT أو بدائل الربط الكسول، أو في الاسترخاء. إذا استُخدم --insn32، فإن الرابط يستخدم فقط ترميزات التعليمات ذات 32 بت. مبدئيًا أو إذا استُخدم --no-insn32، تُستخدم جميع ترميزات التعليمات، بما في ذلك تلك ذات 16 بت حيثما كان ذلك ممكنًا.

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

--compact-branches
--no-compact-branches
    تتحكم هذه الخيارات في توليد التعليمات المدمجة بواسطة الرابط في إدخالات PLT لـ MIPS R6.

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

-N
--omagic
    تعليم المخرجات كـ "OMAGIC" (0407) في ترويسة a.out للإشارة إلى أن مقطع النص ليس محمياً من الكتابة ولا مشتركاً. بما أن كلا قسمي النص والبيانات قابلان للقراءة والكتابة، يُخَصَّصُ قسم البيانات مباشرة بعد مقطع النص. هذا هو أقدم تنسيق لبرامج PDP11 التنفيذية وهو المبدئي لـ ld على أنظمة PDP11 Unix منذ البداية وحتى 2.11BSD.

-n
--nmagic
    تعليم المخرجات كـ "NMAGIC" (0410) في ترويسة a.out للإشارة إلى أنه عند تنفيذ ملف المخرجات، سيكون جزء النص للقراءة فقط وقابلاً للمشاركة بين جميع العمليات التي تنفذ نفس الملف. يتضمن ذلك نقل مناطق البيانات إلى أول حدود صفحة ممكنة بحجم 8 كيلوبايت تلي نهاية النص. ينشئ هذا الخيار تنسيق pure executable.

-z
--imagic
    تعليم المخرجات كـ "IMAGIC" (0411) في ترويسة a.out للإشارة إلى أنه عند تنفيذ ملف المخرجات، سَيُحَمَّلُ مناطق نص البرنامج والبيانات في مساحات عناوين منفصلة باستخدام ميزة تقسيم مساحة التعليمات والبيانات لوحدة إدارة الذاكرة في النماذج الأكبر من PDP11. هذا يضاعف مساحة العناوين المتاحة للبرنامج. مقطع النص نقي مرة أخرى، ومحمي من الكتابة، وقابل للمشاركة. الفرق الوحيد في تنسيق المخرجات بين هذا الخيار والخيارات الأخرى، بالإضافة إلى الرقم السحري، هو أن كلا من قسمي النص والبيانات يبدآن عند الموقع 0. اختير الخيار -z هذا التنسيق في 2.11BSD. يُنشِئُ هذا الخيار تنسيق separate executable.

--no-omagic
    يكافئ --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-2026 لمؤسسة البرمجيات الحرة، المحدودة.

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

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

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

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