Linux / Unix Command: Id

اسم

ld - باستخدام LD ، رابط GNU

موجز

ld [ خيارات ] objfile ...

وصف

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

ld يقبل ملفات لغة الأوامر Linker المكتوبة في superset بناء جملة لغة الأوامر محرر ارتباط AT & T ، لتوفير تحكم واضح وكامل على عملية الارتباط.

لا تصف صفحة الرجل هذه لغة الأمر ؛ راجع الإدخال ld في "info" ، أو دليل ld: رابط GNU ، للحصول على التفاصيل الكاملة عن لغة الأمر وعلى الجوانب الأخرى من رابط GNU.

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

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

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

خيارات

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

ld -o /lib/crt0.o hello.o -lc

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

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

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

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

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

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

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

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

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

gcc -Wl، - startgroup foo.o bar.o -Wl، - endgroup

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

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

-كلمة رئيسية

يتم دعم هذا الخيار لتوافق HP / UX. يجب أن تكون الوسيطة الكلمة الأساسية واحدة من أرشيف السلاسل أو المشاركة أو الإعداد الافتراضي . -الموظف مكافئ وظيفيا -Bstatic ، والكلمتين الرئيسيتين الأخريين يعادلان وظيفيا -Bdynamic . يمكن استخدام هذا الخيار في أي عدد من المرات.

- عمارة

- العمارة = العمارة

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

الإصدارات المستقبلية من ld قد تدعم وظائف مماثلة لعائلات العمارة الأخرى.

صيغة الإدخال

- تنسيق = تنسيق الإدخال

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

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

يتم أخذ الصيغة الافتراضية من متغير البيئة "GNUTARGET".

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

-c MRI-commandfile

--mri-script = MRI-commandfile

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

-DC

-DP

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

- دخول

- دخول

استخدم الإدخال كرمز واضح لبدء تنفيذ البرنامج ، بدلاً من نقطة الإدخال الافتراضية. إذا لم يكن هناك رمز مسمى المدخل ، سيحاول الرابط تحليل الإدخال كرقم ، واستخدام ذلك كعنوان للدخول (سيتم تفسير الرقم في الأساس 10 ؛ قد تستخدم 0x في البداية للقاعدة 16 ، أو 0 للقاعدة 8).

-E

--export ديناميكية

عند إنشاء ملف قابل للتنفيذ مرتبط بشكل ديناميكي ، أضف كافة الرموز إلى جدول الرموز الديناميكي. جدول الرموز الديناميكية هو مجموعة الرموز التي يمكن رؤيتها من الكائنات الديناميكية في وقت التشغيل.

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

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

يمكنك أيضًا استخدام نص البرنامج النصي للتحكم في الرموز التي يجب إضافتها إلى جدول الرموز الديناميكي إذا كان تنسيق الإخراج يدعمها. انظر وصف - script-script في @ ref {VERSION}.

-EB

ربط الكائنات نهاية كبيرة. هذا يؤثر على تنسيق الإخراج الافتراضي.

-el

ربط أشياء صغيرة هذا يؤثر على تنسيق الإخراج الافتراضي.

-F

- اسم مساعد

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

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

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

اسم -F

- اسم الفلتر

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

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

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

اسم كرة القدم

عند إنشاء كائن تنفيذي أو مشترك من ELF ، اتصل بـ NAME عند إلغاء تحميل الكائن القابل للتنفيذ أو المشترك ، وذلك بتعيين DT_FINI على عنوان الدالة. بشكل افتراضي ، يستخدم رابط "_fini" كدالة للاتصال.

-g

تجاهلها. المقدمة للتوافق مع الأدوات الأخرى.

قيمة -G

--gpsize = القيمة

قم بتعيين الحد الأقصى لحجم الكائنات المطلوب تحسينها باستخدام سجل GP إلى الحجم . هذا مفيد فقط لتنسيقات ملفات الكائنات مثل MIPS ECOFF التي تدعم وضع كائنات كبيرة وصغيرة في أقسام مختلفة. يتم تجاهل هذا لتنسيقات ملفات الكائنات الأخرى.

اسم

-soname = الاسم

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

-أنا

إجراء ارتباط تزايدي (نفس الخيار - r ).

اسم -init

عند إنشاء كائن قابل للتنفيذ أو مشترك في ELF ، اتصل بـ NAME عند تحميل الكائن القابل للتنفيذ أو المشترك ، عن طريق تعيين DT_INIT على عنوان الدالة. بشكل افتراضي ، يستخدم linker "_init" كدالة للاتصال.

لأرشيف

- المكتبة العامة = الأرشيف

إضافة أرشيف ملف أرشيف إلى قائمة الملفات للربط. يمكن استخدام هذا الخيار في أي عدد من المرات. سوف يبحث ld قائمة المسار الخاصة به عن وقائع "libarchive.a" لكل الأرشيف المحدد.

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

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

راجع - ( خيار طريقة لفرض رابط للبحث في الأرشيف عدة مرات.

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

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

ل- searchdir

--library-path = searchdir

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

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

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

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

م مضاهاة

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

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

خلاف ذلك ، يعتمد المحاكاة الافتراضية على كيفية تكوين رابط.

-M

--print خريطة

طباعة خريطة الارتباط إلى الإخراج القياسي. توفر خريطة الارتباط معلومات حول الارتباط ، بما في ذلك ما يلي:

*

حيث يتم تعيين ملفات الكائن والرموز في الذاكرة.

*

كيف يتم تخصيص الرموز المشتركة.

*

جميع أعضاء الأرشيف المدرجين في الرابط ، مع ذكر الرمز الذي تسبب في جلب عضو الأرشيف.

-n

--nmagic

أوقف محاذاة الأقسام في الصفحات ، وقم بتمييز الإخراج على أنه "NMAGIC" إن أمكن.

-N

--omagic

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

-ما لا-omagic

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

الإخراج -o

- الإخراج = الإخراج

استخدم الإخراج كاسم للبرنامج الذي تم إنتاجه بواسطة ld ؛ إذا لم يتم تحديد هذا الخيار ، فسيتم استخدام الاسم a.out افتراضيًا. يمكن أيضاً تحديد الأمر البرنامج النصي "OUTPUT" اسم ملف الإخراج.

مستوى -O

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

-q

relocs---emit

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

هذا الخيار معتمد حاليًا فقط على الأنظمة الأساسية لـ ELF.

-r

--relocateable

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

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

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

اسم الملف -R

- just-symbols = اسم الملف

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

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

-s

--strip للجميع

احذف جميع معلومات الرموز من ملف الإخراج.

-S

--strip-التصحيح

حذف معلومات رمز المصحح (ولكن ليس كل الرموز) من ملف الإخراج.

-t

--أثر

اطبع أسماء ملفات الإدخال مثل ld بمعالجتها.

-T scriptfile

--script = scriptfile

استخدم scriptfile كبرنامج نصي رابط. يستبدل هذا البرنامج النصي البرنامج النصي للرابط الافتراضي الخاص بالبرنامج ld (بدلاً من إضافته إليه) ، لذلك يجب على commandfile تحديد كل ما يلزم لوصف ملف الإخراج. إذا كان scriptfile غير موجود في الدليل الحالي ، يبحث "ld" عنه في الدلائل المحددة بواسطة أي خيارات -L السابقة. تتراكم خيارات متعددة -T .

رمز -u

- يتم تعريفه = الرمز

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

-ur

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

- غير رسمي [= SECTION ]

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

-الخامس

--الإصدار

-الخامس

اعرض رقم الإصدار الخاص بـ ld . يسرد الخيار -V أيضًا عمليات المحاكاة المدعومة.

-x

--تجاهل كل

احذف جميع الرموز المحلية.

-X

السكان المحليين---discard

احذف كل الرموز المحلية المؤقتة. بالنسبة لمعظم الأهداف ، هذه هي جميع الرموز المحلية التي تبدأ أسماؤها بـ L.

يا رمز

- رمز تعليمة = رمز

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

يكون هذا الخيار مفيدًا عندما يكون لديك رمز غير معرّف في رابطك ولكن لا تعرف مصدره.

الطريق -Y

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

الكلمة -z

الكلمات الرئيسية المعترف بها هي "initfirst" و "interpose" و "loadfltr" و "nodefaultlib" و "nodelete" و "nodlopen" و "nodump" و "now" و "origin" و "combreloc" و "nocombreloc" و "nocopyreloc ". يتم تجاهل الكلمات الأساسية الأخرى للتوافق مع Solaris. "initfirst" علامات الكائن المراد تهيئته أولاً في وقت التشغيل قبل أي كائنات أخرى. "interpose" علامات الكائن الذي يقابله جدول الرموز الخاص به قبل كافة الرموز ولكن الملف التنفيذي الأساسي. "loadfltr" يقوم بتمييز الكائن الذي تتم معالجة filtees الخاصة به فورًا في وقت التشغيل. "nodefaultlib" يقوم بتمييز الكائن الذي سيتم تجاهل البحث عن تبعيات هذا الكائن أي مسارات البحث في المكتبة الافتراضية. "nodelete" علامات لا يجب إلغاء تحميل الكائن في وقت التشغيل. "nodlopen" علامات الكائن غير متوفر إلى "dlopen". علامات "nodump" لا يمكن أن يتم تفريغ الكائن بواسطة "dldump". "الآن" علامات الكائن بربط وقت التشغيل غير البطيئة. يشير "الأصل" إلى أن الكائن قد يحتوي على $ ORIGIN. "defs" لا تسمح برموز غير محددة. "muldefs" يسمح بتعريفات متعددة. "combreloc" يجمع بين أقسام reloc متعددة ويفرزها لجعل التخزين المؤقت للبحث عن رمز ديناميكي ممكن.

"nocombreloc" يعطل عدة أقسام إعادة التوثيق. "nocopyreloc" يعطل إنتاج مستندات النسخ.

- ( الأرشيف -)

- المحفوظات المجموعة - مجموعة -end

يجب أن تكون الأرشيفات قائمة ملفات الأرشيف . قد تكون إما أسماء ملفات صريحة أو خيارات -l .

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

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

--accept-غير معروف المدخلات اللدود

-ما لا-تقبل-غير معروف المدخلات اللدود

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

كلمة المرور -assert

يتم تجاهل هذا الخيار لتوافق SunOS .

-Bdynamic

-dy

-call_shared

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

-Bgroup

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

-Bstatic

-dn

-non_shared

-ثابتة

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

-Bsymbolic

عند إنشاء مكتبة مشتركة ، قم بربط المراجع للرموز العامة بالتعريف داخل المكتبة المشتركة ، إن وجدت. عادة ، من الممكن لبرنامج مرتبط بمكتبة مشتركة لتجاوز التعريف داخل المكتبة المشتركة. هذا الخيار ذو مغزى فقط على ELFplatforms التي تدعم المكتبات المشتركة.

--check المقاطع

المقاطع -ما لا إجراءات المغادرة

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

--cref

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

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

-ما لا-تحديد-شيوعا

يمنع هذا الخيار تعيين عناوين للرموز الشائعة. يحتوي الأمر البرنامج النصي "INHIBIT_COMMON_ALLOCATION" على نفس التأثير.

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

--defsym symbol = expression

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

--demangle [= style ]

-ما لا-demangle

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

- ملف رابط ديناميكي

قم بتعيين اسم رابط ديناميكي. هذا هو معنى فقط عند إنشاء الملفات التنفيذية ELF المرتبطة بشكل حيوي. الرابط الديناميكي الافتراضي هو الصحيح عادة. لا تستخدم هذا إلا إذا كنت تعرف ما تقوم به.

relocs---embedded

يكون هذا الخيار مفيدًا فقط عند ربط رمز PIC المضمن لـ MIPS ، الذي تم إنشاؤه بواسطة خيار pic-pic إلى مترجم GNU والمجمّع. يتسبب في إنشاء رابط لإنشاء جدول يمكن استخدامه في وقت التشغيل لإعادة تحديد أي بيانات تمت تهيئتها بشكل ثابت إلى قيم المؤشر. راجع الشفرة في testsuite / ld-empic للحصول على التفاصيل.

تحذيرات --fatal

علاج جميع التحذيرات كأخطاء .

--force-إكس-لاحقة

تأكد من أن ملف الإخراج يحتوي على لاحقة .exe.

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

-ما لا-GC-أقسام

المقاطع --gc

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

--مساعدة

اطبع ملخصًا لخيارات سطر الأوامر الموجودة في الإخراج القياسي والخروج.

--target-مساعدة

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

خريطة mapfile

طباعة خريطة الارتباط إلى ملف mapfile . انظر وصف الخيار -M أعلاه.

-ما لا المحافظة على الذاكرة

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

-ما لا-غير معروف

-z defs

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

--السماح-متعددة تعريف

-z muldefs

عادةً عندما يتم تعريف رمز عدة مرات ، سيبلغ رابط الخطأ الفادح. تسمح هذه الخيارات بتعريفات متعددة وسيتم استخدام التعريف الأول.

--السماح-shlib-غير معروف

السماح للرموز غير المعرفة في الكائنات المشتركة حتى عندما يتم ضبط --no-undefined. ستكون النتيجة الصافية أن رموز غير محددة في الكائنات العادية ستستمر في حدوث خطأ ، ولكن سيتم تجاهل الرموز غير المعرفة في الكائنات المشتركة. تطبيق no_undefined يجعل الافتراض أن رابط وقت التشغيل سيختنق على رموز غير محددة. ومع ذلك ، يوجد نظام واحد على الأقل (BeOS) حيث تكون الرموز غير المحددة في المكتبات المشتركة أمرًا طبيعيًا نظرًا لأن النواة تقوم بتصغيرها في وقت التحميل لتحديد الوظيفة الأكثر ملاءمة للعمارة الحالية. IE بشكل حيوي اختيار وظيفة memset مناسبة. من الواضح أنه من الطبيعي أيضًا أن تحتوي المكتبات المشتركة لـ HPPA على رموز غير محددة.

-ما لا-غير معروف الإصدار

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

-ما لا-تحذير-عدم تطابق

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

-ما لا-هول-أرشيف

قم بإيقاف تشغيل تأثير خيار الأرشيف الكامل لملفات الأرشيفات اللاحقة.

--noinhibit-إكسيك

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

-nostdlib

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

- شكل ناتج النسق

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

-qmagic

يتم تجاهل هذا الخيار لتوافق Linux.

-Qy

يتم تجاهل هذا الخيار لتوافق SVR4.

--الاسترخاء

خيار مع تأثيرات تعتمد على الجهاز. هذا الخيار معتمد فقط على عدد قليل من الأهداف.

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

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

على الأنظمة الأساسية حيث لا يتم دعم ذلك ، يتم قبول --relax ، ولكن يتم تجاهلها.

- ارتين-ملف الرموز-الملف

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

- لا يتجاهل -etain-symbols-file الرموز غير المحددة ، أو الرموز اللازمة لعمليات الترحيل.

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

-rpath dir

إضافة دليل إلى مسار بحث مكتبة وقت التشغيل. يتم استخدام هذا عند ربط ELFex التنفيذي مع الكائنات المشتركة. مترابطة جميع الحجج -ppath وتمريرها إلى رابط وقت التشغيل ، والذي يستخدمها لتحديد موقع الكائنات المشتركة في وقت التشغيل. يتم استخدام الخيار -rpath أيضًا عند تحديد موقع الكائنات المشتركة التي تحتاج إليها الكائنات المشتركة والمضمنة بشكل صريح في الرابط ؛ انظر وصف الخيار -Rpath-link . إذا لم يتم استخدام -ppath عند ربط ELF القابل للتنفيذ ، فسيتم استخدام محتويات متغير البيئة "LD_RUN_PATH" إذا تم تعريفها.

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

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

-Rpath- DIR

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

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

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

يستخدم رابط مسارات البحث التالية لتحديد موقع المكتبات المشتركة المطلوبة.

1.

أي الدلائل المحددة بواسطة خيارات -Rpath الارتباط .

2.

أي دلائل تحددها خيارات -ppath . الفرق بين -rpath و -rpath-link هو أن الدلائل المحددة بواسطة -rpath options يتم تضمينها في الملف القابل للتنفيذ والمستخدمة في وقت التشغيل ، بينما يكون خيار -rpath link فعال فقط في وقت الارتباط. وهو للرابط الأصلي فقط.

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.

الدلائل الافتراضية ، عادةً / lib و / usr / lib .

8.

بالنسبة إلى رابط أصلي على نظام ELF ، إذا كان الملف /etc/ld.so.conf موجودًا ، ستجد قائمة بالدلائل الموجودة في هذا الملف.

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

-shared

-Bshareable

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

--sort-شيوعا

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

- يوازي الملف [ الحجم ]

على غرار -split-by-reloc ولكن يتم إنشاء قسم إخراج جديد لكل ملف إدخال عند الوصول إلى حجم . الحجم الافتراضي إلى حجم 1 إذا لم يعط.

- يوازي - بواسطة - إعادة تعداد [ العدد ]

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

--stats

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

--traditional الشكل

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

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

- section-start sectionname = org

حدد موقعًا في ملف الإخراج في العنوان المطلق المعطى بواسطة المؤسسة . يمكنك استخدام هذا الخيار عدة مرات حسب الحاجة لتحديد عدة أقسام في سطر الأوامر. يجب أن تكون org رقمًا سداسيًا عشريًا واحدًا ؛ للتوافق مع روابط أخرى ، قد تحذف الـ 0x الرائدة عادة ما ترتبط بالقيم السداسية العشرية. ملاحظة: يجب ألا يكون هناك مسافة بيضاء بين اسم القسم ، وعلامة يساوي (`` = '') ، و org .

-Tbss مؤسسة

-Tdata org

-Ttext org

استخدم org كعنوان بدء لـ --- على التوالي --- "bss" أو "البيانات" أو جزء "النص" لملف الإخراج. يجب أن تكون org رقمًا سداسيًا عشريًا واحدًا ؛ للتوافق مع روابط أخرى ، قد تحذف الـ 0x الرائدة عادة ما ترتبط بالقيم السداسية العشرية.

--dll-مطول

--verbose

اعرض رقم إصدار ld وقم بسرد محاكيات linker المعتمدة. عرض ملفات الإدخال التي يمكن ولا يمكن فتحها. عرض البرنامج النصي رابط المستخدمة من قبل رابط.

--version-script = version-scriptfile

حدد اسم البرنامج النصي للإصدار إلى رابط. يتم استخدام ذلك عادةً عند إنشاء مكتبات مشتركة لتحديد معلومات إضافية حول نسخة الإصدار الخاصة بالمكتبة التي يتم إنشاؤها. هذا الخيار له معنى فقط على منصات ELF التي تدعم المكتبات المشتركة.

--warn-شيوعا

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

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

int i = 1؛

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

ex int int i؛

مرجع غير محدد لا يقوم بتخصيص مساحة. يجب أن يكون هناك إما تعريف أو رمز مشترك للمتغير في مكان ما.

int i؛

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

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

1.

تحويل رمز مشترك إلى مرجع ، لأنه يوجد بالفعل تعريف للرمز.

(
): warning: `common 'overridden by definition (
): warning: معرّف هنا

2.

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

(
): تحذير: تعريف ` 'تجاوز شائع (
): تحذير: الشائعة هنا

3.

دمج رمز مشترك برمز مشترك سابق.

(
): تحذير: شائعة متعددة من ` ' (
): تحذير: سابق مشترك هنا

4.

دمج رمز مشترك برمز مشترك أكبر سابق.

(
): تحذير: يتم تجاوز الشائع من ` 'من خلال أكبر (
) الشائعة: تحذير: أكبر مشترك هنا

5.

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

(
): تحذير: الشائعة في ` 'تجاوز أصغر (
): تحذير: أصغر المشتركة هنا

--warn-الصانعين

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

--warn-متعددة-GP

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

--warn مرة واحدة

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

--warn القسم محاذاة

تحذير إذا تم تغيير عنوان قسم الإخراج بسبب المحاذاة. عادةً ، سيتم تعيين المحاذاة بواسطة مقطع إدخال. سيتم تغيير العنوان فقط إذا لم يتم تحديده صراحة ؛ أي ، إذا لم يحدد الأمر "SECTIONS" عنوان البدء للقسم.

--whole-أرشيف

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

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

- رمز التفاف

استخدم دالة مجمّع للرمز . سيتم حل أي إشارة غير محددة للرمز إلى "__ wrap_symbol". سيتم حل أي إشارة غير محددة إلى "__real_symbol" إلى رمز .

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

في ما يلي مثال تافه:

void * __wrap_malloc (int c) {printf ("malloc called with٪ ld \ n"، c)؛ return __real_malloc (c)؛ }

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

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

--enable-الجديد-dtags

--disable-الجديد-dtags

يمكن لهذا الرابط إنشاء العلامات الديناميكية الجديدة في ELF. لكن أنظمة ELF القديمة قد لا تفهمها. إذا حددت dtags - new-d-dom ، فسيتم إنشاء العلامات الديناميكية حسب الحاجة. إذا قمت بتحديد - dtags-new-dtags ، فلن يتم إنشاء علامات ديناميكية جديدة. بشكل افتراضي ، لا يتم إنشاء العلامات الديناميكية الجديدة. لاحظ أن هذه الخيارات متاحة فقط لأنظمة FORF.

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

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

--add-STDCALL مستعار

إذا أعطيت ، سيتم تصدير الرموز ذات لاحقة stdcall (@ nn ) كما هي وكذلك مع اللواصق.

- ملف قاعدة الملفات

استخدام الملف كاسم ملف فيه حفظ عناوين الأساسي لكافة relocations اللازمة لإنشاء DLLs مع dlltool .

--dll

قم بإنشاء DLL بدلاً من قابل للتنفيذ عادي. يمكنك أيضاً استخدام -shared أو تحديد "LIBRARY" في ملف ".def" محدد.

--enable-STDCALL-إصلاح

--disable-STDCALL-إصلاح

إذا عثر الارتباط على رمز لا يمكنه حله ، فسوف يحاول القيام بالربط "الغامض" عن طريق البحث عن رمز محدد آخر يختلف فقط في تنسيق اسم الرمز (cdecl مقابل stdcall) وسيحل ذلك الرمز عن طريق الربط الى المباراة. على سبيل المثال ، قد يتم ربط الرمز غير المحدد "_foo" بالوظيفة "_foo @ 12" ، أو قد يتم ربط الرمز غير المحدد "_bar @ 16" بالوظيفة "_bar". عندما يقوم الرابط بذلك ، فإنه يقوم بطباعة تحذير ، لأنه عادة ما يكون فشل في الارتباط ، ولكن في بعض الأحيان قد تحتاج إلى استيراد مكتبات تم إنشاؤها من دلس الطرف الثالث أن تكون هذه الميزة قابلة للاستخدام. إذا قمت بتحديد - fixable stdcall-fixup ، يتم تمكين هذه الميزة بشكل كامل ولا يتم طباعة التحذيرات. إذا حددت - fixable stdcall-fixup ، فإن هذه الميزة معطلة ويعتبر عدم التطابق هذه أخطاء.

--export-كل حرف

إذا تم إعطاء ، سيتم تصدير كافة الرموز العمومية في الكائنات المستخدمة لإنشاء DLL بواسطة DLL. لاحظ أن هذا هو الإعداد الافتراضي إذا لم يكن هناك أي رموز تم تصديرها. عندما يتم تصدير الرموز بشكل واضح عبر ملفات DEF أو يتم تصديرها بشكل ضمني عبر سمات الدالة ، يكون الإعداد الافتراضي هو عدم تصدير أي شيء آخر ما لم يتم منح هذا الخيار. لاحظ أن الرموز "DllMain @ 12" و "DllEntryPoint @ 0" و "DllMainCRTStartup @ 12" و "impure_ptr" لن يتم تصديرها تلقائيًا. أيضاً ، لن يتم إعادة تصدير الرموز المستوردة من DLLs أخرى ، ولا رموز تحدد تخطيط DLL الداخلية مثل تلك التي تبدأ بـ "_head_" أو تنتهي بـ "_iname". بالإضافة إلى ذلك ، لن يتم تصدير أي رموز من "libgcc" أو "libstd ++" أو "libmingw32" أو "crtX.o". لن يتم تصدير الرموز التي تبدأ أسماؤها بـ "__rtti_" أو "__builtin_" ، للمساعدة في DLLs C ++. وأخيرا ، هناك قائمة واسعة من الرموز cygwin-private التي لا يتم تصديرها (من الواضح ، وهذا ينطبق على عند بناء 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 ".

--exclude- symbol رموز ، رمز ، ...

يحدد قائمة الرموز التي لا ينبغي تصديرها تلقائيًا. قد يتم delimited أسماء الرموز بفواصل أو colons.

- exclude-libs lib ، lib ، ...

يحدد قائمة بمكتبات الأرشيف التي لا ينبغي تصدير الرموز تلقائيًا إليها. قد يتم delimited أسماء المكتبة بفواصل أو colons. يستثني تحديد "--exclude-libs ALL" الرموز في جميع مكتبات الأرشيف من التصدير التلقائي. لا يزال يتم تصدير الرموز المدرجة بشكل صريح في ملف .def ، بغض النظر عن هذا الخيار.

--file الانحياز

حدد محاذاة الملف. ستبدأ الأقسام في الملف دائمًا عند إزاحة الملفات والتي تعد مضاعفات هذا الرقم. هذا الافتراضي إلى 512.

- حجز احتياطي

- الاحتياطي الاحتياطي ، ارتكاب

حدد مقدار الذاكرة المطلوب حجزها (والارتباط اختياريًا) لاستخدامها ككومة لهذا البرنامج. الافتراضي هو 1Mb محفوظة ، ملتزم 4K.

- القيمة الأساسية للقاعدة

استخدم القيمة كعنوان أساسي لبرنامجك أو dll. هذا هو أدنى موقع الذاكرة التي سيتم استخدامها عند تحميل البرنامج أو DLL الخاص بك. لتقليل الحاجة إلى نقل وتحسين أداء ملفات dlls الخاصة بك ، يجب أن يكون لكل عنوان أساسي فريد ولا يتداخل مع أي dlls أخرى. الافتراضي هو 0x400000 عن الملفات التنفيذية و 0x10000000 لـ dlls.

--kill-في

إذا أعطيت ، سيتم تجريدها لاحقات stdcall (@ nn ) من الرموز قبل أن يتم تصديرها.

-major-image-version value

يحدد العدد الرئيسي من `` نسخة الصورة ''. الافتراضيات إلى 1.

-major-os-version version

يضبط العدد الرئيسي لنسخة '`os' '. افتراضيات إلى 4.

-major-subsystem-version value

لتعيين العدد الرئيسي من "إصدار النظام الفرعي". افتراضيات إلى 4.

- قيمة -صورة-إصدار

يضبط العدد الصغير من `` نسخة الصورة ''. الافتراضي إلى 0.

- قيمة minor-os-version

يضبط العدد الصغير من نسخة `` os ''. الافتراضي إلى 0.

- قيمة ثانوية - إصدار نظام فرعي

يضبط العدد الصغير من `` إصدار النظام الفرعي ''. الافتراضي إلى 0.

- ملف الإخراج- def

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

- ملف - انتيب

سيقوم رابط إنشاء ملف الملف الذي يحتوي على lib الاستيراد المطابق DLL يتم إنشاء رابط. يمكن استخدام lib الاستيراد هذا (الذي يجب أن يسمى "* .dll.a" أو "* .a" لربط العملاء مقابل DLL الذي تم إنشاؤه ؛ هذا السلوك يجعل من الممكن تخطي خطوة إنشاء مكتبة استيراد "dlltool" منفصلة.

--enable لصناعة السيارات في صورة قاعدة

اختيار قاعدة الصورة تلقائيًا لـ DLL ، ما لم يتم تحديد واحد باستخدام الوسيطة "--image-base". باستخدام تجزئة تم إنشاؤها من dllname لإنشاء قواعد صور فريدة لكل DLL ، يتم تجنب الاصطدامات في الذاكرة وعمليات إعادة التوجيه التي يمكن أن تؤخر تنفيذ البرنامج.

--disable لصناعة السيارات في صورة قاعدة

لا تقوم تلقائيًا بإنشاء قاعدة صور فريدة. إذا لم يكن هناك قاعدة صور محددة من قبل المستخدم ("--image-base") ، فاستخدم الإعداد الافتراضي للنظام الأساسي.

--dll-search-prefix string

عند الارتباط بشكل حيوي إلى DLL دون مكتبة استيراد ، ابحث عن " .dll" في تفضيل "lib .dll". يسمح هذا السلوك بالتمييز السهل بين DLLs التي تم إنشاؤها لمختلف "subplatforms" ': native ، cygwin ، uwin ، pw ، إلخ. على سبيل المثال ، cygwin DLLs عادةً ما تستخدم "--dll-search-prefix = cyg".

--enable السيارات والاستيراد

هل ربط متطورة من "_symbol" إلى "__imp__symbol" للواردات DATA من DLLs ، وإنشاء رموز thunking الضرورية عند إنشاء مكتبات الاستيراد مع تلك DATAexports. سيؤدي هذا بشكل عام إلى "العمل فقط" --- ولكن في بعض الأحيان قد ترى هذه الرسالة:

"المتغير" "لا يمكن استيراده تلقائيًا. الرجاء قراءة الوثائق الخاصة بـ" - import-auto-import "من أجل التفاصيل."

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

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

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

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

extern نوع extern_array []؛ extern_array [1] -> {نوع متغيّر * t = extern_array؛ t [1]}

أو

extern نوع extern_array []؛ extern_array [1] -> {volatile int t = 1؛ extern_array [t]}

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

extern struct s extern_struct؛ extern_struct.field -> {volatile struct s * t = & extern_struct؛ t-> الحقل}

أو

extern طويل طويل extern_ll؛ extern_ll -> {volatile long long * local_ll = & extern_ll؛ * local_ll}

والطريقة الثالثة للتعامل مع هذه الصعوبة هي التخلي عن "الاستيراد التلقائي" للرمز المخالف ووضع علامة عليه "__declspec (dllimport)". ومع ذلك ، في الممارسة العملية يتطلب استخدام # وقت التحويل البرمجي لتحديد ما إذا كنت تقوم ببناء 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؛ لا "تحسين" * / المتغير int * parr = arr؛ printf ( "٪ د \ ن"، بار [1])؛ }

الحل 2:

- foo.h / * ملاحظة: يفترض تصدير تلقائي (لا __declspec (dllexport)) * / #if (معرف (_WIN32) || معرّف (__ CYGWIN__)) &&! (معرّف (FOO_BUILD_DLL) || معرفة (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 السيارات والاستيراد

لا تحاول القيام بربط سبدسيدت من "_symbol" إلى "__imp__symbol" لـ DATAimports من DLLs.

--enable-وقت-الزائفة ريلوك

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

--disable-وقت-الزائفة ريلوك

لا تقم بإنشاء ترحيلات زائفة من أجل استيراد بيانات DATA بدون صفر من DLLs. هذا هو الافتراضي.

--enable-من خارج المؤسسة العامة-التصحيح

عرض معلومات تصحيح إضافية ذات صلة بكميزة رمز الاستيراد التلقائي.

--section الانحياز

يحدد محاذاة القسم. ستبدأ الأقسام في الذاكرة دائمًا بعناوين متعددة لهذا الرقم. الافتراضيات إلى 0x1000.

- حجز احتياطي

- احتياطي الحقيبة ، ارتكاب

حدد مقدار الذاكرة المطلوب حجزها (والالتزام اختياريًا) لاستخدامها كدعم لهذا البرنامج. الافتراضي هو 2 ميغابايت محفوظة ، ملتزم 4K.

--subsystem التي

--subsystem التي : الرئيسية

--subsystem التي : الرئيسية . تحت السن القانوني

يحدد النظام الفرعي الذي سينفذ البرنامج بموجبه. القيم القانونية التي هي "أصلية" و "windows" و "console" و "posix". يمكنك اختياريًا تعيين إصدار النظام الفرعي أيضًا.

هام: استخدم الأمر man ( ٪ man ) لمعرفة كيفية استخدام أمر ما على جهاز الكمبيوتر الخاص بك.