| LD(1) | GNU Development Tools | LD(1) |
نام (NAME)
aarch64-linux-gnu-ld - پیونددهنده گنو برای معماری AArch64
خلاصه دستور (SYNOPSIS)
ld [گزینهها] objfile ...
توضیحات (DESCRIPTION)
ld تعدادی از فایلهای شیء و آرشیو را ترکیب کرده، دادههای آنها را بازنشانی میکند و ارجاعات نمادها را متصل میسازد. معمولاً آخرین مرحله در کامپایل یک برنامه، اجرای ld است.
ld فایلهای زبان فرمان پیونددهنده (Linker Command Language) را که در ابرمجموعهای از نحو «زبان فرمان ویرایشگر پیوند» شرکت AT&T نوشته شدهاند میپذیرد تا کنترلی صریح و کامل بر فرآیند پیوند فراهم آورد.
این صفحه راهنما زبان فرمان را توضیح نمیدهد؛ برای جزئیات کامل در مورد زبان فرمان و سایر جنبههای پیونددهنده گنو، مدخل ld را در "info" ببینید.
این نسخه از ld از کتابخانههای چندمنظوره BFD برای کار بر روی فایلهای شیء استفاده میکند. این ویژگی به ld امکان میدهد تا فایلهای شیء را در قالبهای مختلفی بخواند، ترکیب کند و بنویسد؛ برای مثال COFF یا "a.out". قالبهای مختلف را میتوان با یکدیگر پیوند داد تا هر نوع فایل شیء موجود تولید شود.
گذشته از انعطافپذیری، پیونددهنده گنو در ارائه اطلاعات عیبیابی مفیدتر از سایر پیونددهندهها است. بسیاری از پیونددهندهها بلافاصله پس از مواجهه با یک خطا اجرا را متوقف میکنند؛ اما ld تا حد امکان به اجرا ادامه میدهد و به شما امکان میدهد خطاهای دیگر را شناسایی کنید (یا در برخی موارد، علیرغم خطا، یک فایل خروجی دریافت نمایید).
پیونددهنده گنو ld برای پوشش طیف گستردهای از موقعیتها و سازگاری هرچه بیشتر با سایر پیونددهندهها طراحی شده است. در نتیجه، گزینههای متعددی برای کنترل رفتار آن در اختیار دارید.
گزینهها (OPTIONS)
پیونددهنده از تعداد بیشماری گزینه خط فرمان پشتیبانی میکند، اما در عمل تعداد کمی از آنها در هر زمینه خاص به کار میروند. برای مثال، کاربرد رایج 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 را نمایش میدهد.
اگر پیونددهنده نتواند قالب یک فایل شیء را تشخیص دهد، فرض میکند که آن فایل یک اسکریپت پیونددهنده است. اسکریپتی که به این شیوه مشخص میشود، اسکریپت اصلی پیونددهنده مورد استفاده برای پیوند را تقویت میکند (خواه اسکریپت پیشفرض باشد یا اسکریپتی که با -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
در اینجا جدولی از سوییچهای عمومی خط فرمان که توسط پیونددهنده گنو پذیرفته میشوند آورده شده است:
- @file
- خواندن
گزینههای
خط فرمان از
file.
گزینههای
خواندهشده
به جای
گزینه اصلی
@file درج
میشوند.
اگر file وجود
نداشته
باشد یا
قابل
خواندن
نباشد، با
گزینه به
صورت
تحتاللفظی
رفتار شده و
حذف نخواهد
شد.
گزینهها در file با نویسه فاصله خالی (whitespace) از یکدیگر جدا میشوند. یک نویسه فاصله را میتوان با قرار دادن کل گزینه درون گیومه تکی یا دوگانه در آن گنجاند. هر نویسهای (شامل بکاسلش) را میتوان با پیشوند قرار دادن بکاسلش قبل از آن درج کرد. خود file ممکن است حاوی گزینههای @file بیشتری باشد؛ هر یک از این گزینهها به صورت بازگشتی پردازش خواهند شد.
- -a keyword
- این گزینه برای سازگاری با 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 input-format
- --format=input-format
- ld ممکن است
طوری
پیکربندی
شده باشد که
از بیش از
یک نوع فایل
شیء
پشتیبانی
کند. اگر ld
شما به این
شیوه
پیکربندی
شده باشد،
میتوانید
از گزینه -b
برای مشخص
کردن قالب
باینری
فایلهای
شیء ورودی
که پس از
این گزینه
در خط فرمان
میآیند
استفاده
کنید. حتی
هنگامی که
ld برای
پشتیبانی
از
قالبهای
شیء
جایگزین
پیکربندی
شده است،
معمولاً
نیازی به
تعیین این
گزینه
ندارید،
زیرا ld
باید طوری
پیکربندی
شده باشد که
رایجترین
قالب در هر
ماشین را به
عنوان قالب
ورودی
پیشفرض در
نظر بگیرد.
input-format یک رشته
متنی و نام
قالبی خاص
است که توسط
کتابخانههای
BFD پشتیبانی
میشود.
(میتوانید
قالبهای
باینری
موجود را با
دستور objdump -i
فهرست
کنید.)
اگر فایلهایی با قالب باینری نامعمول را پیوند میدهید ممکن است بخواهید از این گزینه استفاده کنید. همچنین میتوانید با قرار دادن -b input-format پیش از هر گروه از فایلهای شیء در قالبی خاص، برای تغییر صریح قالبها (هنگام پیوند فایلهای شیء با قالبهای مختلف) از -b استفاده نمایید.
قالب پیشفرض از متغیر محیطی "GNUTARGET" گرفته میشود.
شما همچنین میتوانید قالب ورودی را از طریق یک اسکریپت و با استفاده از دستور "TARGET" تعریف کنید؛
- -c MRI-commandfile
- --mri-script=MRI-commandfile
- برای سازگاری با پیونددهندههای تولیدشده توسط MRI، برنامه ld فایلهای اسکریپت نوشتهشده به یک زبان فرمان جایگزین و محدود را میپذیرد که در بخش «MRI Compatible Script Files» از مستندات GNU ld توضیح داده شده است. فایلهای اسکریپت MRI را با گزینه -c معرفی کنید؛ از گزینه -T برای اجرای اسکریپتهای پیونددهنده نوشتهشده به زبان اسکریپتنویسی عمومی ld استفاده نمایید. اگر MRI-cmdfile وجود نداشته باشد، ld آن را در دایرکتوریهای مشخصشده توسط گزینههای -L جستجو میکند.
- -d
- -dc
- -dp
- این سه گزینه معادل یکدیگرند؛ شکلهای چندگانه برای سازگاری با سایر پیونددهندهها پشتیبانی میشوند. آنها به نمادهای عمومی (common symbols) فضا اختصاص میدهند، حتی اگر یک فایل خروجی جابهجاشونده (با -r) مشخص شده باشد. دستور اسکریپت "FORCE_COMMON_ALLOCATION" نیز همین تأثیر را دارد.
- --depaudit AUDITLIB
- -P AUDITLIB
- افزودن 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 } with input sections: .data.1: size 8 .data.2: size 0x10 .data.3: size 4 results in .data.1 affected to mem1, and .data.2 and .data.3 affected to mem2, even though .data.3 would fit in mem3.این گزینه با گزارههای INSERT ناسازگار است، زیرا نحوه نگاشت بخشهای ورودی به بخشهای خروجی را تغییر میدهد.
- --enable-non-contiguous-regions-warnings
- این گزینه هشدارهایی را فعال میکند هنگامی که "--enable-non-contiguous-regions" تطابقهای بالقوه غیرمنتظرهای را در نگاشت بخشها مجاز میسازد، که به طور بالقوه میتواند منجر به کنار گذاشتن خاموش یک بخش به جای شکست در پیوند به دلیل عدم گنجایش در هر ناحیه خروجی شود.
- -e entry
- --entry=entry
- استفاده از entry به عنوان نماد صریح برای شروع اجرای برنامه، به جای نقطه ورود پیشفرض. اگر هیچ نمادی به نام entry وجود نداشته باشد، پیونددهنده تلاش میکند entry را به عنوان یک عدد تجزیه کند و از آن به عنوان آدرس ورود استفاده نماید (عدد در مبنای ۱۰ تفسیر خواهد شد؛ میتوانید از پیشوند 0x برای مبنای ۱۶ یا 0 برای مبنای ۸ استفاده کنید). برای i386 PE، شناسه entry همچنین میتواند نام تابع اصلی باشد (در صورت وجود، بدون زیرخط آغازین و/یا @number پایانی stdcall).
- --exclude-libs lib,lib,...
- فهرستی از کتابخانههای آرشیو را مشخص میکند که نمادهای موجود در آنها نباید به صورت خودکار صادر (export) شوند. نام کتابخانهها میتواند با کاما یا دونقطه از یکدیگر جدا شود. مشخص کردن "--exclude-libs ALL" نمادها را در تمام کتابخانههای آرشیو از صادرات خودکار مستثنی میکند. این گزینه فقط برای نسخههایی از پیونددهنده که ELF و PE را هدف قرار میدهند در دسترس است. برای اهداف PE، نمادهایی که صراحتاً در یک فایل .def فهرست شدهاند صرفنظر از این گزینه همچنان صادر خواهند شد. برای اهداف ELF، نمادهای متأثر از این گزینه به عنوان پنهان (hidden) تلقی میشوند.
- --exclude-modules-for-implib module,module,...
- فهرستی از فایلهای شیء یا اعضای آرشیو را مشخص میکند که نمادهای آنها نباید به صورت خودکار صادر شوند، بلکه باید به طور کامل در کتابخانه وارداتی (import library) که در طول پیوند تولید میشود کپی گردند. نامهای ماژولها میتوانند با کاما یا دونقطه از یکدیگر جدا شوند و باید دقیقاً با نام فایلهایی که توسط ld برای باز کردن فایلها استفاده میشود مطابقت داشته باشند؛ برای اعضای آرشیو، این صرفاً نام عضو است، اما برای فایلهای شیء نام فهرستشده باید شامل هر مسیری باشد که برای مشخص کردن فایل ورودی در خط فرمان پیونددهنده استفاده شده است و دقیقاً با آن مطابقت کند. نمادهایی که صراحتاً در یک فایل .def فهرست شدهاند، صرفنظر از این گزینه همچنان صادر خواهند شد. [این گزینه مختص به اهداف PE پیونددهنده است]
- -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 به جدول نمادهای پویا اضافه خواهند شد. هنگام ایجاد یک کتابخانه اشتراکی، ارجاعات به نمادهای منطبق با glob به تعاریف درون کتابخانه اشتراکی محدود (bound) نخواهند شد. این گزینه هنگام ایجاد یک کتابخانه اشتراکی و در صورتی که -Bsymbolic یا --dynamic-list مشخص نشده باشند، هیچ اثری ندارد (no-op). این گزینه تنها در بسترهای ELF که از کتابخانههای اشتراکی پشتیبانی میکنند معنادار است.
- --export-dynamic-symbol-list=file
- یک --export-dynamic-symbol برای هر الگو در فایل مشخص میکند. قالب فایل همانند گره نسخه بدون نام گره و محدوده (scope) است. برای اطلاعات بیشتر VERSION را ببینید.
- -EB
- پیوند اشیای دارای ترتیب بایت بزرگانتها (big-endian). این گزینه بر قالب خروجی پیشفرض تأثیر میگذارد.
- -EL
- پیوند اشیای دارای ترتیب بایت کوچکانتها (little-endian). این گزینه بر قالب خروجی پیشفرض تأثیر میگذارد.
- -f name
- --auxiliary=name
- هنگام
ایجاد یک
شیء
اشتراکی ELF،
فیلد داخلی
DT_AUXILIARY را روی
نام
مشخصشده
تنظیم
میکند. این
امر به
پیونددهنده
پویا اعلام
میکند که
جدول
نمادهای
شیء
اشتراکی
باید به
عنوان یک
فیلتر کمکی
بر روی جدول
نمادهای
شیء
اشتراکی name
استفاده
شود.
اگر بعداً برنامهای را با این شیء فیلتر پیوند دهید، در زمان اجرای برنامه، پیونددهنده پویا فیلد DT_AUXILIARY را مشاهده خواهد کرد. اگر پیونددهنده پویا نمادی را از شیء فیلتر حل کند، ابتدا بررسی میکند که آیا تعریفی در شیء اشتراکی name وجود دارد یا خیر. اگر وجود داشته باشد، به جای تعریف موجود در شیء فیلتر استفاده خواهد شد. شیء اشتراکی name نیازی نیست که وجود داشته باشد. بنابراین شیء اشتراکی name میتواند برای ارائه یک پیادهسازی جایگزین از توابع خاص، احتمالاً برای عیبیابی یا کارایی خاص ماشین، مورد استفاده قرار گیرد.
این گزینه میتواند بیش از یک بار مشخص شود. مدخلهای DT_AUXILIARY به همان ترتیبی که در خط فرمان ظاهر میشوند ایجاد خواهند شد.
- -F name
- --filter=name
- هنگام
ایجاد یک
شیء
اشتراکی ELF،
فیلد داخلی
DT_FILTER را روی
نام
مشخصشده
تنظیم
میکند. این
کار به
پیونددهنده
پویا
میگوید که
جدول
نمادهای
شیء
اشتراکی در
حال ایجاد
باید به
عنوان
فیلتری بر
روی جدول
نمادهای
شیء
اشتراکی name
استفاده
شود.
اگر بعداً برنامهای را در برابر این شیء فیلتر پیوند دهید، هنگام اجرای برنامه، پیونددهنده پویا فیلد DT_FILTER را مشاهده خواهد کرد. پیونددهنده پویا نمادها را طبق روال معمول بر اساس جدول نمادهای شیء فیلتر حل خواهد کرد، اما در واقع به تعاریف موجود در شیء اشتراکی name پیوند میزند. بنابراین از شیء فیلتر میتوان برای انتخاب زیرمجموعهای از نمادهای ارائهشده توسط شیء name استفاده کرد.
برخی از پیونددهندههای قدیمیتر از گزینه -F در سرتاسر زنجیره ابزار کامپایل برای تعیین قالب فایل شیء برای هر دو فایل شیء ورودی و خروجی استفاده میکردند. پیونددهنده گنو از سازوکارهای دیگری برای این منظور استفاده میکند: گزینههای -b، --format، --oformat، دستور "TARGET" در اسکریپتهای پیونددهنده، و متغیر محیطی "GNUTARGET". پیونددهنده گنو هنگامی که یک شیء اشتراکی ELF ایجاد نمیشود گزینه -F را نادیده خواهد گرفت.
- -fini=name
- هنگام ایجاد یک فایل اجرایی یا شیء اشتراکی ELF، با تنظیم DT_FINI روی آدرس تابع، نام NAME را هنگام تخلیه شدن فایل اجرایی یا شیء اشتراکی فراخوانی میکند. به طور پیشفرض، پیونددهنده از "_fini" به عنوان تابع فراخوانی استفاده مینماید.
- -g
- نادیده گرفته میشود. برای سازگاری با سایر ابزارها ارائه شده است.
- -G value
- --gpsize=value
- حداکثر اندازه اشیایی را که باید با استفاده از ثبات GP بهینهسازی شوند روی value تنظیم میکند. این مورد تنها برای قالبهای فایل شیء نظیر MIPS ELF که از قرار دادن اشیای بزرگ و کوچک در بخشهای مختلف پشتیبانی میکنند معنادار است. برای سایر قالبهای فایل شیء نادیده گرفته میشود.
- -h name
- -soname=name
- هنگام ایجاد یک شیء اشتراکی ELF، فیلد داخلی DT_SONAME را روی نام مشخصشده تنظیم میکند. هنگامی که یک فایل اجرایی با یک شیء اشتراکی که دارای فیلد DT_SONAME است پیوند داده میشود، در هنگام اجرای برنامه، پیونددهنده پویا تلاش میکند شیء اشتراکی مشخصشده توسط فیلد DT_SONAME را بارگذاری کند، نه فایلی که نام آن به پیونددهنده داده شده بود.
- -i
- انجام یک پیوند افزایشی (مشابه گزینه -r).
- -init=name
- هنگام ایجاد یک فایل اجرایی یا شیء اشتراکی ELF، با تنظیم DT_INIT روی آدرس تابع، تابع NAME را هنگام بارگذاری فایل اجرایی یا شیء اشتراکی فراخوانی میکند. به طور پیشفرض، پیونددهنده از "_init" به عنوان تابع فراخوانی استفاده میکند.
- -l namespec
- --library=namespec
- افزودن
فایل آرشیو
یا شیء
مشخصشده
توسط namespec به
فهرست
فایلهای
پیوند
شونده. این
گزینه
میتواند
به هر تعداد
بار
استفاده
شود. اگر namespec
به شکل :filename
باشد، ld در
مسیر
کتابخانه
به دنبال
فایلی به
نام filename
میگردد،
در غیر این
صورت در
مسیر
کتابخانه
فایلی با
نام libnamespec.a را
جستجو
میکند.
در سیستمهایی که از کتابخانههای اشتراکی پشتیبانی میکنند، ld همچنین ممکن است به دنبال فایلهایی غیر از libnamespec.a بگردد. به ویژه در سیستمهای ELF و SunOS، دستور ld پیش از جستجوی کتابخانهای به نام libnamespec.a، ابتدا دایرکتوری را برای کتابخانهای به نام libnamespec.so جستجو میکند. (طبق قرارداد، پسوند ".so" نشاندهنده یک کتابخانه اشتراکی است.) توجه داشته باشید که این رفتار در مورد :filename صدق نمیکند؛ این قالب همواره فایلی با نام filename را مشخص میسازد.
پیونددهنده یک آرشیو را تنها یک بار، در همان مکانی که در خط فرمان مشخص شده است، جستجو میکند. اگر آرشیو نمادی را تعریف کند که در شیئی که پیش از آرشیو در خط فرمان ظاهر شده تعریفنشده بود، پیونددهنده فایل(های) مربوطه را از آرشیو وارد میکند. اما یک نماد تعریفنشده در شیئی که بعداً در خط فرمان میآید باعث جستجوی مجدد آرشیو توسط پیونددهنده نخواهد شد.
گزینه -( را برای روشی جهت واداشتن پیونددهنده به جستجوی مکرر آرشیوها ببینید.
میتوانید یک آرشیو را چندین بار در خط فرمان فهرست کنید.
این سبک از جستجوی آرشیو برای پیونددهندههای یونیکس استاندارد است. با این حال، اگر از ld روی AIX استفاده میکنید، توجه داشته باشید که این رفتار با رفتار پیونددهنده AIX متفاوت است.
- -L searchdir
- --library-path=searchdir
- افزودن
مسیر searchdir به
فهرست
مسیرهایی
که ld برای
یافتن
کتابخانههای
آرشیو و
اسکریپتهای
کنترلی ld
جستجو
میکند.
میتوانید
این گزینه
را به هر
تعداد بار
استفاده
کنید.
دایرکتوریها
به همان
ترتیبی که
در خط فرمان
مشخص
شدهاند
جستجو
میشوند.
دایرکتوریهای
مشخصشده
در خط
فرمان، پیش
از
دایرکتوریهای
پیشفرض
جستجو
میگردند.
تمام
گزینههای
-L صرفنظر
از ترتیبی
که در آن
ظاهر
میشوند،
بر تمام
گزینههای
-l اعمال
میشوند.
گزینههای
-L بر نحوه
جستجوی
اسکریپت
پیونددهنده
توسط ld
تأثیری
ندارند مگر
اینکه
گزینه -T
مشخص شده
باشد.
اگر searchdir با "=" یا $SYSROOT آغاز شود، این پیشوند با پیشوند sysroot که توسط گزینه --sysroot کنترل میشود یا هنگام پیکربندی پیونددهنده مشخص شده است، جایگزین میگردد.
مجموعه پیشفرض مسیرهای جستجوشده (بدون تعیین با -L) به این بستگی دارد که ld از چه حالت شبیهسازی استفاده میکند و در برخی موارد به نحوه پیکربندی آن نیز وابسته است.
مسیرها را میتوان در یک اسکریپت پیوند با دستور "SEARCH_DIR" نیز مشخص کرد. دایرکتوریهایی که به این شیوه مشخص میشوند، در نقطهای که اسکریپت پیونددهنده در خط فرمان ظاهر میشود جستجو خواهند شد.
- -m emulation
- شبیهسازی
پیونددهنده
emulation.
میتوانید
شبیهسازیهای
موجود را با
گزینههای
--verbose یا -V
فهرست کنید.
اگر از گزینه -m استفاده نشود، در صورت تعریف بودن متغیر محیطی "LDEMULATION"، شبیهسازی از آن گرفته میشود.
در غیر این صورت، شبیهسازی پیشفرض به نحوه پیکربندی پیونددهنده بستگی دارد.
- --remap-inputs=pattern=filename
- --remap-inputs-file=file
- این
گزینهها
به نامهای
فایلهای
ورودی
اجازه
میدهند
قبل از تلاش
پیونددهنده
برای باز
کردن آنها
تغییر کنند.
گزینه --remap-inputs=foo.o=bar.o
باعث
میشود هر
تلاشی برای
بارگذاری
فایلی به
نام foo.o در
عوض تلاش
کند فایلی
با نام bar.o را
بارگذاری
نماید.
الگوهای
عام (wildcard) در
اولین نام
فایل مجاز
هستند،
بنابراین
--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 در اسکریپتهای پیونددهنده ارجاع داده شدهاند تأثیر میگذارند. اما از آنجا که اسکریپتهای پیونددهنده پس از خواندن کل خط فرمان پردازش میشوند، موقعیت گزینههای بازنگاشت در خط فرمان اهمیت چندانی ندارد.
اگر گزینه verbose فعال باشد، هرگونه نگاشت مطابق گزارش داده میشود، هرچند مجدداً گزینه verbose باید در خط فرمان قبل از ظاهر شدن نام فایلهای بازنگاشتشده فعال گردد.
اگر گزینههای -Map یا --print-map فعال باشند، فهرست بازنگاشت در خروجی مپ گنجانده خواهد شد.
- -M
- --print-map
- چاپ یک نقشه پیوند (link map) در خروجی استاندارد. نقشه پیوند اطلاعاتی در مورد پیوند فراهم میکند، از جمله موارد زیر:
- محل نگاشت فایلهای شیء در حافظه.
- نحوه تخصیص نمادهای عمومی (common symbols).
- تمام اعضای آرشیو که در پیوند گنجانده شدهاند، به همراه ذکر نمادی که باعث وارد شدن آن عضو آرشیو شده است.
- مقادیر
اختصاصیافته
به نمادها.
توجه - نمادهایی که مقادیر آنها توسط عبارتی محاسبه میشود که شامل ارجاع به مقدار قبلی همان نماد است، ممکن است نتیجه صحیحی در نقشه پیوند نمایش ندهند. این بدان دلیل است که پیونددهنده نتایج میانی را دور میریزد و تنها مقدار نهایی یک عبارت را حفظ میکند. در چنین شرایطی پیونددهنده مقدار نهایی را درون کروشه نمایش میدهد. بنابراین برای مثال یک اسکریپت پیونددهنده شامل:
foo = 1 foo = foo * 4 foo = foo + 8
در صورت استفاده از گزینه -M خروجی زیر را در نقشه پیوند تولید خواهد کرد:
0x00000001 foo = 0x1 [0x0000000c] foo = (foo * 0x4) [0x0000000c] foo = (foo + 0x8)
برای اطلاعات بیشتر در مورد عبارات در اسکریپتهای پیونددهنده، Expressions را ببینید.
- نحوه ادغام
ویژگیهای
گنو (GNU properties).
هنگامی که پیونددهنده بخشهای ورودی .note.gnu.property را در یک بخش خروجی .note.gnu.property ادغام میکند، برخی از ویژگیها حذف یا بهروزرسانی میشوند. این اقدامات در نقشه پیوند گزارش میگردند. برای مثال:
Removed property 0xc0000002 to merge foo.o (0x1) and bar.o (not found)
این نشان میدهد که ویژگی 0xc0000002 هنگام ادغام ویژگیها در foo.o (که مقدار ویژگی 0xc0000002 آن 0x1 است) و bar.o (که فاقد ویژگی 0xc0000002 است) از خروجی حذف شده است.
Updated property 0xc0010001 (0x1) to merge foo.o (0x1) and bar.o (0x1)
این نشان میدهد که مقدار ویژگی 0xc0010001 هنگام ادغام ویژگیها در foo.o (که مقدار ویژگی 0xc0010001 آن 0x1 است) و bar.o (که مقدار ویژگی 0xc0010001 آن 0x1 است) به 0x1 در خروجی بهروزرسانی شده است.
- در برخی
اهداف ELF،
فهرستی از
اصلاحات
درجشده
توسط --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
- چاپ (یا عدم چاپ) فهرست بخشهای دور ریختهشده و جمعآوریشده به عنوان زباله (garbage collected) در نقشه پیوند. به صورت پیشفرض فعال است.
- --print-map-locals
- --no-print-map-locals
- چاپ (یا عدم چاپ) نمادهای محلی در نقشه پیوند. متن (local) قبل از نام نمادهای محلی چاپ خواهد شد، و آنها بعد از تمام نمادهای سراسری در یک بخش مشخص فهرست میشوند. نمادهای محلی موقت (معمولاً آنهایی که با .L شروع میشوند) در خروجی گنجانده نخواهند شد. به طور پیشفرض غیرفعال است.
- -n
- --nmagic
- غیرفعالسازی تراز صفحهای بخشها (page alignment)، و غیرفعال کردن پیوند در برابر کتابخانههای اشتراکی. اگر قالب خروجی از اعداد جادویی (magic numbers) به سبک یونیکس پشتیبانی کند، خروجی را با "NMAGIC" علامتگذاری مینماید.
- -N
- --omagic
- بخشهای text و data را به صورت خواندنی و نوشتنی تنظیم میکند. همچنین قطعه data را تراز صفحهای نمیکند و پیوند با کتابخانههای اشتراکی را غیرفعال میسازد. اگر قالب خروجی از اعداد جادویی سبک یونیکس پشتیبانی کند، خروجی را به عنوان "OMAGIC" علامتگذاری مینماید. توجه: اگرچه بخش text قابلنوشتن برای اهداف PE-COFF مجاز است، اما با مشخصات قالبی که توسط مایکروسافت منتشر شده مطابقت ندارد.
- --no-omagic
- این گزینه بیشتر اثرات گزینه -N را خنثی میکند. بخش text را به صورت فقطخواندنی تنظیم کرده و قطعه data را وادار به تراز صفحهای میکند. توجه - این گزینه پیوند با کتابخانههای اشتراکی را فعال نمیکند. برای این منظور از -Bdynamic استفاده کنید.
- -o output
- --output=output
- استفاده از
output به عنوان
نام برنامه
تولیدشده
توسط ld؛
اگر این
گزینه مشخص
نشود، نام
a.out به صورت
پیشفرض
استفاده
میشود.
دستور
اسکریپت
"OUTPUT" نیز
میتواند
نام فایل
خروجی را
مشخص کند.
توجه - پیونددهنده پیش از شروع به نوشتن در فایل خروجی، آن را حذف خواهد کرد. این کار حتی اگر به دلیل خطاها مشخص شود که پیوند نمیتواند کامل شود، انجام خواهد گرفت.
توجه - پیونددهنده بررسی خواهد کرد که نام فایل خروجی با نام هیچیک از فایلهای ورودی مطابقت نداشته باشد، اما تمام بررسی همین است. به ویژه اگر فایل خروجی یک فایل منبع یا فایل مهم دیگری را رونویسی کند، هشداری صادر نمیکند. بنابراین در سیستمهای ساخت توصیه میشود از گزینه -o به عنوان آخرین گزینه در خط فرمان پیونددهنده استفاده شود. به عنوان مثال در نظر بگیرید:
ld -o $(EXE) $(OBJS) ld $(OBJS) -o $(EXE)
اگر متغیر EXE بنا به دلیلی تعریف نشده باشد، نسخه اول دستور پیونددهنده ممکن است یکی از فایلهای شیء (اولین مورد در لیست OBJS) را حذف کند، در حالی که نسخه دوم دستور پیونددهنده یک پیام خطا ایجاد کرده و چیزی را حذف نمیکند.
- --dependency-file=depfile
- نوشتن یک فایل وابستگی (dependency file) در depfile. این فایل حاوی یک قاعده مناسب برای "make" است که فایل خروجی و تمام فایلهای ورودی خواندهشده برای تولید آن را توصیف میکند. خروجی مشابه خروجی کامپایلر با -M -MP است. توجه داشته باشید که گزینهای مانند -MM در کامپایلر برای مستثنی کردن «فایلهای سیستمی» وجود ندارد (که برخلاف «سرآیندهای سیستمی» در کامپایلر، مفهومی کاملاً تعریفشده در پیونددهنده نیست). بنابراین خروجی حاصل از --dependency-file همواره مختص وضعیت دقیق نصبی است که در آن تولید شده، و نباید بدون ویرایش دقیق در makefileهای توزیعشده کپی گردد.
- -O level
- اگر level یک
مقدار عددی
بزرگتر از
صفر باشد،
ld خروجی را
بهینهسازی
میکند. این
کار ممکن
است زمان
قابلتوجهی
طول بکشد و
بنابراین
احتمالاً
تنها باید
برای
باینری
نهایی فعال
شود. در حال
حاضر این
گزینه فقط
بر تولید
کتابخانههای
اشتراکی ELF
تأثیر
میگذارد.
انتشارهای
آینده
پیونددهنده
ممکن است
استفاده
بیشتری از
این گزینه
ببرند.
همچنین در
حال حاضر
تفاوتی در
رفتار
پیونددهنده
برای
مقادیر
مختلف
غیرصفر این
گزینه وجود
ندارد. این
مورد نیز
ممکن است در
انتشارهای
آینده
تغییر کند.
اگر level صفر یا رشته fast باشد، در این صورت ld عملیات اختیاری را نادیده میگیرد، که منجر به پیوند سریعتر اما تولید باینریهای کندتر و بزرگتر میشود. در حال حاضر تنها عملیاتی که نادیده گرفته میشود، ترکیب بخشهای قابلادغام است، اما این ممکن است در آینده تغییر یابد.
اگر level رشته default یا صرفاً نویسه - باشد، رفتار پیشفرض پیونددهنده مبنی بر عدم بهینهسازی و عدم پرش از عملیات انتخاب میشود.
- -plugin name
- مشارکت
دادن یک
افزونه در
فرآیند
پیوند.
پارامتر name
نام فایل
مطلق
افزونه است.
معمولاً
این
پارامتر
هنگام
استفاده از
بهینهسازی
زمان پیوند
(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، --link-mapless، --no-link-mapless، -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
- باقی
گذاشتن
بخشها و
محتویات
بازنشانی
(relocation) در
فایلهای
اجرایی
کاملاً
پیوندیافته.
ابزارهای
تحلیل و
بهینهسازی
پس از پیوند
ممکن است به
این
اطلاعات
جهت انجام
تغییرات
صحیح در
فایلهای
اجرایی
نیاز داشته
باشند. این
کار منجر به
تولید
فایلهای
اجرایی
بزرگتر
میشود.
این گزینه در حال حاضر تنها روی بسترهای ELF پشتیبانی میشود.
- --force-dynamic
- واداشتن فایل خروجی به داشتن بخشهای پویا. این گزینه مختص اهداف VxWorks است.
- -r
- --relocatable
- تولید
خروجی
جابهجاشونده
(relocatable)---یعنی
تولید فایل
خروجی که
میتواند
به نوبه خود
به عنوان
ورودی برای
ld عمل کند.
این عمل
اغلب
پیوند
جزئی (partial linking)
نامیده
میشود. به
عنوان یک
اثر جانبی،
در
محیطهایی
که از اعداد
جادویی
استاندارد
یونیکس
پشتیبانی
میکنند،
این گزینه
همچنین عدد
جادویی
فایل خروجی
را روی
"OMAGIC"
تنظیم
میکند. اگر
این گزینه
مشخص نشود،
یک فایل
مطلق تولید
میشود.
هنگام
پیوند
برنامههای
++C، این
گزینه
ارجاعات به
سازندهها
(constructors) را حل
نمیکند؛
برای انجام
این کار از
-Ur استفاده
نمایید.
هنگامی که یک فایل ورودی قالبی یکسان با فایل خروجی ندارد، پیوند جزئی تنها در صورتی پشتیبانی میشود که آن فایل ورودی حاوی هیچ بازنشانیای نباشد. قالبهای خروجی مختلف میتوانند محدودیتهای بیشتری داشته باشند؛ به عنوان مثال برخی از قالبهای مبتنی بر "a.out" به هیچ وجه از پیوند جزئی با فایلهای ورودی در قالبهای دیگر پشتیبانی نمیکنند.
هنگامی که خروجی جابهجاشونده هم شامل محتوایی است که نیازمند بهینهسازی زمان پیوند (LTO) است و هم محتوایی که نیازی به LTO ندارد، یک بخش .gnu_object_only برای نگهداری فایل شیء جابهجاشونده ایجاد میشود، گویی -r برای تمام ورودیهای جابهجاشوندهای اعمال شده است که نیازی به LTO ندارند. هنگام پردازش یک ورودی جابهجاشونده با بخش .gnu_object_only، پیونددهنده این بخش را به عنوان یک ورودی مجزا استخراج خواهد کرد.
توجه داشته باشید که چون -r برخی از بخشها را از فایلهای ورودی مختلف با هم گروهبندی میکند، ممکن است اثرات منفی بر اندازه کد و موقعیتیابی محلی (locality) در فایل اجرایی نهایی یا کتابخانه اشتراکی بگذارد.
این گزینه همان کار -i را انجام میدهد.
- -R filename
- --just-symbols=filename
- خواندن نام
نمادها و
آدرسهای
آنها از
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 scriptfile
- --script=scriptfile
- استفاده از
scriptfile به
عنوان
اسکریپت
پیونددهنده.
این
اسکریپت
جایگزین
اسکریپت
پیشفرض ld
میشود (به
جای اضافه
شدن به آن)،
مگر اینکه
اسکریپت
حاوی
"INSERT"
باشد؛
بنابراین
commandfile باید هر
آنچه را
برای توصیف
فایل خروجی
لازم است
مشخص کند.
اگر scriptfile در پوشه جاری وجود نداشته باشد، "ld" آن را در پوشههای مشخصشده توسط هر گزینه قبلی -L جستجو میکند.
گزینههای خط فرمان که قبل از گزینه -T ظاهر میشوند میتوانند بر اسکریپت تأثیر بگذارند، اما گزینههای خط فرمان پس از آن تأثیری ندارند.
گزینههای چندگانه -T در صورتی که اسکریپت فعلی را تقویت کنند انباشته میشوند، در غیر این صورت آخرین گزینه غیرتقویتکننده -T استفاده خواهد شد.
روشهای دیگری نیز برای مشخص کردن اسکریپتهای پیونددهنده وجود دارد.
- -dT scriptfile
- --default-script=scriptfile
- استفاده از
scriptfile به
عنوان
اسکریپت
پیشفرض
پیونددهنده.
این گزینه شبیه گزینه --script است، با این تفاوت که پردازش اسکریپت تا بعد از پردازش بقیه خط فرمان به تعویق میافتد. این به گزینههایی که بعد از گزینه --default-script در خط فرمان قرار گرفتهاند اجازه میدهد بر رفتار اسکریپت پیونددهنده تأثیر بگذارند، که میتواند زمانی که خط فرمان پیونددهنده به طور مستقیم توسط کاربر کنترل نمیشود مهم باشد (مثلاً به این دلیل که خط فرمان توسط ابزار دیگری مانند gcc ساخته میشود).
- -u symbol
- --undefined=symbol
- واداشتن symbol
به وارد شدن
در فایل
خروجی به
عنوان یک
نماد
تعریفنشده.
انجام این
کار ممکن
است، برای
مثال،
پیوند دادن
ماژولهای
اضافی از
کتابخانههای
استاندارد
را فعال
کند. -u
میتواند
با
آرگومانهای
مختلف
تکرار شود
تا نمادهای
تعریفنشده
بیشتری
وارد شوند.
این گزینه
معادل
دستور
اسکریپت
پیونددهنده
"EXTERN" است.
اگر این گزینه برای واداشتن ماژولهای اضافی به کشیده شدن به درون پیوند استفاده میشود، و اگر باقی ماندن نماد به عنوان تعریفنشده یک خطا محسوب میشود، باید به جای آن از گزینه --require-defined استفاده کرد.
- --require-defined=symbol
- الزام به اینکه symbol در فایل خروجی تعریف شده باشد. این گزینه مشابه گزینه --undefined است با این تفاوت که اگر symbol در فایل خروجی تعریف نشده باشد، پیونددهنده یک خطا صادر کرده و خارج میشود. همین اثر را میتوان در یک اسکریپت پیونددهنده با استفاده از "EXTERN"، "ASSERT" و "DEFINED" در کنار یکدیگر به دست آورد. این گزینه را میتوان چندین بار برای الزام به نمادهای اضافی به کار برد.
- -Ur
- برای
برنامههایی
که از
سازندهها
یا
نابودکنندهها
(constructors یا destructors)
استفاده
نمیکنند،
یا برای
سیستمهای
مبتنی بر ELF،
این گزینه
معادل -r
است: خروجی
جابهجاشونده
تولید
میکند---یعنی
یک فایل
خروجی که به
نوبه خود
میتواند
به عنوان
ورودی برای
ld عمل کند.
اما برای
سایر
باینریها
گزینه -Ur
مشابه -r
است اما
همچنین
ارجاعات به
سازندهها
و
نابودکنندهها
را حل
میکند.
برای آن دسته از سیستمهایی که در آنها -r و -Ur رفتار متفاوتی دارند، استفاده از -Ur بر روی فایلهایی که خود با -Ur پیوند یافتهاند کار نمیکند؛ هنگامی که جدول سازنده ساخته شد، نمیتوان به آن اضافه کرد. از -Ur فقط برای آخرین پیوند جزئی و از -r برای سایر موارد استفاده کنید.
- --orphan-handling=MODE
- کنترل نحوه
مدیریت
بخشهای
یتیم (orphan sections).
بخش یتیم
بخشی است که
به طور خاص
در یک
اسکریپت
پیونددهنده
ذکر نشده
است.
شناسه MODE میتواند هر یک از مقادیر زیر را داشته باشد:
- "place"
- بخشهای یتیم بر اساس راهبرد توصیفشده در Orphan Sections در یک بخش خروجی مناسب قرار داده میشوند. گزینه --unique نیز بر نحوه قرارگیری بخشها تأثیر میگذارد.
- "discard"
- تمام بخشهای یتیم با قرار گرفتن در بخش /DISCARD/ دور ریخته میشوند.
- "warn"
- پیونددهنده بخش یتیم را همانند "place" قرار میدهد و همچنین یک هشدار صادر میکند.
- "error"
- در صورت یافتن هر بخش یتیم، پیونددهنده با یک خطا خارج خواهد شد.
حالت پیشفرض در صورت داده نشدن --orphan-handling، مقدار "place" است.
- --unique[=SECTION]
- یک بخش خروجی جداگانه برای هر بخش ورودی منطبق با SECTION ایجاد میکند، یا در صورتی که آرگومان عام اختیاری SECTION وجود نداشته باشد، برای هر بخش ورودی یتیم ایجاد میکند. بخش یتیم بخشی است که صراحتاً در یک اسکریپت پیونددهنده ذکر نشده باشد. میتوانید این گزینه را چندین بار در خط فرمان استفاده کنید؛ این گزینه از ادغام عادی بخشهای ورودی با نام مشابه جلوگیری کرده و تخصیص بخش خروجی در یک اسکریپت پیونددهنده را باطل میکند.
- -v
- --version
- -V
- نمایش شماره نسخه ld. گزینه -V همچنین شبیهسازیهای پشتیبانیشده را فهرست میکند. همچنین توضیحات --enable-linker-version را در Options,,Command-line Options ببینید که میتواند برای درج رشته نسخه پیونددهنده در یک باینری استفاده شود.
- -x
- --discard-all
- حذف تمام نمادهای محلی.
- -X
- --discard-locals
- حذف تمام نمادهای محلی موقت. (این نمادها با پیشوندهای برچسب محلی مختص سیستم شروع میشوند، معمولاً .L برای سیستمهای ELF یا L برای سیستمهای سنتی a.out.)
- -y symbol
- --trace-symbol=symbol
- چاپ نام هر
فایل
پیوندشدهای
که symbol در آن
ظاهر
میشود. این
گزینه
میتواند
به هر تعداد
بار داده
شود. در
بسیاری از
سیستمها
لازم است یک
زیرخط (underscore) به
ابتدای آن
اضافه شود.
این گزینه زمانی مفید است که یک نماد تعریفنشده در پیوند خود دارید اما نمیدانید ارجاع به آن از کجا ناشی میشود.
- -Y path
- افزودن path به مسیر جستجوی پیشفرض کتابخانه. این گزینه برای سازگاری با Solaris وجود دارد.
- -z keyword
- کلیدواژههای شناختهشده عبارتند از:
- call-nop=prefix-addr
- call-nop=suffix-nop
- call-nop=prefix-byte
- call-nop=suffix-byte
- تعیین ۱ بایت لایه درونی "NOP" (padding) هنگام تبدیل فراخوانی غیرمستقیم به یک تابع محلی تعریفشده 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 در طول پیوند جابهجاشونده. در صورت استفاده از nocommon از نوع STT_OBJECT استفاده میشود.
- common-page-size=value
- تنظیم پرکاربردترین اندازه صفحه حافظه روی value. چیدمان تصویر حافظه برای به حداقل رساندن صفحات حافظه بهینهسازی خواهد شد، مشروط بر اینکه سیستم از صفحاتی با این اندازه استفاده کند.
- defs
- گزارش ارجاعات حلنشده به نمادها از فایلهای شیء معمولی. این کار حتی اگر پیونددهنده در حال ایجاد یک کتابخانه اشتراکی غیرنمادین باشد انجام میشود. این گزینه معکوس -z undefs است.
- dynamic-undefined-weak
- nodynamic-undefined-weak
- تبدیل نمادهای ضعیف تعریفنشده (undefined weak symbols) به نمادهای پویا هنگام ساخت یک شیء پویا، مشروط بر اینکه از یک فایل شیء معمولی ارجاع داده شده باشند و به دلیل دیدهشدن نماد (visibility) یا نسخهبندی محلی نشده باشند. در صورت استفاده از nodynamic-undefined-weak آنها را پویا نکنید. اگر هیچیک از گزینهها داده نشود، یک هدف ممکن است به صورت پیشفرض هر کدام را در نظر بگیرد یا انتخاب دیگری از نمادهای ضعیف تعریفنشده را پویا سازد. همه اهداف از این گزینهها پشتیبانی نمیکنند.
- execstack
- علامتگذاری شیء به عنوان نیازمند پشته اجرایی (executable stack).
- 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 تا
نشان دهد
فایل شیء
نیازمند
اشارهگرهای
متعارف
تابع است و
نمیتواند
با
بازنشانی
کپی (copy relocation)
استفاده
شود. این
گزینه
همچنین
مستلزم
noextern-protected-data و nocopyreloc
است. برای i386 و
x86-64 پشتیبانی
میشود.
گزینه noindirect-extern-access شناسه GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS را از بخش .note.gnu.property حذف میکند.
- initfirst
- این گزینه تنها هنگام ساخت یک شیء اشتراکی معنادار است. شیء را به گونهای علامتگذاری میکند که مقداردهی اولیه زمان اجرای آن پیش از مقداردهی اولیه زمان اجرای هر شیء دیگری که همزمان به فرآیند وارد شده رخ دهد. به طور مشابه، نهاییسازی زمان اجرای شیء پس از نهاییسازی زمان اجرای سایر اشیاء انجام خواهد شد.
- interpose
- مشخص میکند که بارگذار پویا باید ترتیب جستجوی نماد خود را تغییر دهد به طوری که نمادهای موجود در این کتابخانه اشتراکی بر سایر کتابخانههای اشتراکی فاقد این علامت حاکم شوند (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
- هنگام تولید یک فایل اجرایی یا کتابخانه اشتراکی، آن را علامتگذاری میکند تا به پیونددهنده پویا بگوید حل فراخوانی تابع را به زمان فراخوانی تابع موکول کند (lazy binding)، نه زمان بارگذاری. اتصال تنبل (lazy binding) پیشفرض است.
- loadfltr
- مشخص میکند که فیلترهای شیء باید بلافاصله در زمان اجرا پردازش شوند.
- max-page-size=value
- تنظیم حداکثر اندازه صفحه حافظه پشتیبانیشده روی 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). برای x86_64 پشتیبانی میشود.
- muldefs
- مجاز دانستن تعاریف چندگانه.
- nocopyreloc
- غیرفعالسازی متغیرهای .dynbss تولیدشده توسط پیونددهنده که به جای متغیرهای تعریفشده در کتابخانههای اشتراکی استفاده میشوند. ممکن است منجر به بازنشانیهای متن پویا شود.
- nodefaultlib
- مشخص میکند که جستجوی بارگذار پویا برای وابستگیهای این شیء باید هرگونه مسیر جستجوی پیشفرض کتابخانه را نادیده بگیرد.
- nodelete
- مشخص میکند که شیء نباید در زمان اجرا تخلیه (unload) شود.
- nodlopen
- مشخص میکند که این شیء برای "dlopen" در دسترس نیست.
- nodump
- مشخص میکند که شیء توسط "dldump" قابل دامپ شدن نیست.
- noexecstack
- شیء را به عنوان عدم نیاز به پشته اجرایی علامتگذاری میکند.
- noextern-protected-data
- هنگام ساخت یک کتابخانه اشتراکی با نمادهای داده محافظتشده به عنوان خارجی رفتار نکنید. این گزینه پیشفرض بکاند پیونددهنده را لغو میکند. میتوان از آن برای دور زدن بازنشانیهای نادرست علیه نمادهای داده محافظتشده تولیدشده توسط کامپایلر استفاده کرد. بهروزرسانیهای روی نمادهای داده محافظتشده توسط ماژول دیگر برای کتابخانه اشتراکی حاصل قابل مشاهده نیستند. برای i386 و x86-64 پشتیبانی میشود.
- noreloc-overflow
- غیرفعال کردن بررسی سرریز بازنشانی (relocation overflow). اگر در زمان اجرا سرریز بازنشانی پویا وجود نداشته باشد، میتوان از این گزینه استفاده کرد. برای x86_64 پشتیبانی میشود.
- memory-seal
- nomemory-seal
- دستور به فایل اجرایی یا کتابخانه اشتراکی مبنی بر اینکه تمام قطعات PT_LOAD باید مهر و موم شوند (sealed) تا از دستکاریهای بعدی (مانند تغییر پرچمهای حفاظت، اندازه قطعه، یا حذف نگاشت) جلوگیری شود. این یک مقاومسازی امنیتی است که نیازمند پشتیبانی سیستم است. این گزینه GNU_PROPERTY_MEMORY_SEAL را در بخش .note.gnu.property تولید میکند.
- now
- هنگام تولید یک فایل اجرایی یا کتابخانه اشتراکی، آن را علامتگذاری میکند تا به پیونددهنده پویا بگوید هنگام شروع برنامه، یا زمانی که کتابخانه اشتراکی توسط dlopen بارگذاری میشود، تمام نمادها را حل کند، به جای موکول کردن حل فراخوانی تابع به زمانی که تابع برای اولین بار فراخوانی میشود.
- origin
- مشخص میکند که شیء نیازمند مدیریت $ORIGIN در مسیرها است.
- pack-relative-relocs
- nopack-relative-relocs
- تولید بازنشانی نسبی فشرده در فایلهای اجرایی مستقل از موقعیت (PIE) و کتابخانههای اشتراکی. این گزینه مدخلهای "DT_RELR"، "DT_RELRSZ" و "DT_RELRENT" را به بخش پویا اضافه میکند. هنگام ساخت فایل اجرایی وابسته به موقعیت و خروجی جابهجاشونده نادیده گرفته میشود. مقدار پیشفرض nopack-relative-relocs است که بازنشانی نسبی فشرده را غیرفعال میسازد. هنگام پیوند با کتابخانه GNU C، یک وابستگی نسخه نماد GLIBC_ABI_DT_RELR بر روی کتابخانه اشتراکی C به خروجی اضافه میشود. برای i386 و x86-64 پشتیبانی میشود.
- relro
- norelro
- ایجاد یک سرآیند قطعه "PT_GNU_RELRO" از نوع ELF در شیء. این سرآیند یک قطعه حافظه را مشخص میکند که در صورت پشتیبانی، باید پس از بازنشانی به صورت فقطخواندنی درآید. تعیین common-page-size کوچکتری از اندازه صفحه سیستم این حفاظت را بیاثر میکند. اگر از norelro استفاده شود، این قطعه ایجاد نخواهد شد.
- report-relative-reloc
- گزارش بازنشانیهای نسبی پویای تولیدشده توسط پیونددهنده. برای Linux/i386 و Linux/x86_64 پشتیبانی میشود.
- sectionheader
- nosectionheader
- تولید سرآیند بخش (section header). در صورت استفاده از nosectionheader سرآیند بخش تولید نمیشود. مقدار پیشفرض sectionheader است.
- separate-code
- noseparate-code
- ایجاد سرآیند قطعه "PT_LOAD" مجزا برای کد در شیء. این گزینه قطعهای از حافظه را مشخص میکند که فقط باید شامل دستورالعملها باشد و باید در صفحاتی کاملاً مجزا از هرگونه داده دیگر قرار گیرد. در صورت استفاده از noseparate-code این قطعه مجزا ایجاد نمیشود.
- shstk
- تولید GNU_PROPERTY_X86_FEATURE_1_SHSTK در بخش .note.gnu.property تا سازگاری با Intel Shadow Stack را نشان دهد. برای Linux/i386 و Linux/x86_64 پشتیبانی میشود.
- stack-size=value
- تعیین اندازه پشته برای قطعه "PT_GNU_STACK" در ELF. مشخص کردن صفر، ایجاد هرگونه قطعه پیشفرض با اندازه غیرصفر "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 این اثر را غیرفعال میکند و اجازه میدهد بخشها مانند زمانی که نمادهای ترکیبی خاص تعریف نشدهاند، توسط جمعآوری زباله دور ریخته شوند. این گزینه تأثیری بر تعاریف موجود در فایل شیء یا اسکریپت پیونددهنده ندارد.
- start-stop-visibility=value
- تعیین میزان دیدهشدن نماد ELF (visibility) برای نمادهای ترکیبی "__start_SECNAME" و "__stop_SECNAME". مقدار value باید دقیقاً یکی از موارد default، internal، hidden یا protected باشد. اگر گزینهای داده نشود، برای سازگاری با کاربردهای گذشته از protected استفاده میشود. با این حال به شدت توصیه میشود از -z start-stop-visibility=hidden در برنامههای جدید و کتابخانههای اشتراکی استفاده شود تا این نمادها میان اشیای اشتراکی صادر نشوند.
- text
- notext
- textoff
- گزارش خطا در صورتی که DT_TEXTREL تنظیم شده باشد، یعنی اگر شیء مستقل از موقعیت یا شیء اشتراکی دارای بازنشانیهای پویا در بخشهای فقطخواندنی باشد. در صورت استفاده از notext یا textoff خطایی گزارش نکنید.
- undefs
- عدم گزارش ارجاعات حلنشده به نمادها از فایلهای شیء معمولی، چه هنگام ایجاد یک فایل اجرایی و چه هنگام ایجاد یک کتابخانه اشتراکی. این گزینه معکوس -z defs است.
- unique-symbol
- nounique-symbol
- جلوگیری از نامهای تکراری نمادهای محلی در جدول رشته نمادها. اگر از unique-symbol استفاده شود، عبارت "."number"" به انتهای نامهای تکراری نمادهای محلی اضافه میشود. مقدار پیشفرض nounique-symbol است.
- x86-64-baseline
- x86-64-v2
- x86-64-v3
- x86-64-v4
- تعیین سطح ISA مورد نیاز x86-64 در بخش .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
- تعیین نحوه گزارش سطوح ISA مربوط به x86-64 در فایلهای جابهجاشونده ورودی. isa-level-report=none که پیشفرض است، سطوح ISA را در فایلهای ورودی گزارش نمیکند. isa-level-report=all سطوح مورد نیاز و استفادهشده را گزارش میدهد. isa-level-report=needed سطوح مورد نیاز را گزارش میدهد. isa-level-report=used سطوح استفادهشده را گزارش میدهد. برای 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 در زمان ساخت پیونددهنده غیرفعال شده باشد، هنگامی که هیچ گزینهای مشخص نشده باشد، اگر ورودیها دارای فراخوانی "___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 که این برچسب نسخه را تعریف نکرده باشد اجرا نخواهد شد. برای Linux/i386 و Linux/x86_64 پشتیبانی میشود.
- -( archives -)
- --start-group archives --end-group
- شناسه archives
باید
فهرستی از
فایلهای
آرشیو باشد.
آنها
میتوانند
نام
فایلهای
صریح یا
گزینههای
-l باشند.
آرشیوهای مشخصشده به صورت مکرر جستجو میشوند تا زمانی که هیچ ارجاع تعریفنشده جدیدی ایجاد نشود. به طور معمول، یک آرشیو تنها یک بار و به ترتیبی که در خط فرمان مشخص شده جستجو میشود. اگر نمادی در آن آرشیو برای حل یک نماد تعریفنشده که توسط شیئی در یک آرشیو بعدی ارجاع داده شده نیاز باشد، پیونددهنده قادر به حل آن نخواهد بود. با گروهبندی آرشیوها، همه آنها به طور مکرر جستجو میشوند تا زمانی که تمام ارجاعات ممکن حل گردند.
این گزینه در داخل یک جفت گزینه --start-lib/--end-lib مجاز نیست.
استفاده از این گزینه هزینه عملکردی قابلتوجهی دارد. بهتر است تنها زمانی استفاده شود که ارجاعات حلقوی اجتنابناپذیر میان دو یا چند آرشیو وجود دارد.
- --start-lib objects --end-lib
- شناسه objects
باید
فهرستی از
فایلهای
شیء باشد.
اشیای مشخصشده به گونهای تلقی میشوند که گویی اعضای یک آرشیو هستند که نام آن در مکان --start-lib در خط فرمان قرار داده شده است. تمام ویژگیهای معمول مدیریت آرشیو در پیونددهنده و گزینههای خط فرمان برای چنین آرشیو مصنوعی اعمال میشوند.
این گزینه میتواند چندین بار استفاده شود، که در این صورت با هر مجموعه از اشیای مشخصشده به عنوان یک آرشیو جداگانه رفتار خواهد شد. تو در تو کردن این گزینه مجاز نیست.
گزینههایی که بر پردازش آرشیو تأثیر میگذارند بین --start-lib و --end-lib مجاز نیستند. این گزینهها شامل موارد زیر هستند: -(/--start-group، -)/--end-group، --whole-archive و --no-whole-archive، و همچنین --pop-state در جایی که وضعیت تنظیم --whole-archive را تغییر دهد.
- --accept-unknown-input-arch
- --no-accept-unknown-input-arch
- به پیونددهنده میگوید فایلهای ورودی را که معماری آنها قابل شناسایی نیست بپذیرد. فرض بر این است که کاربر میداند چه میکند و عمداً میخواهد این فایلهای ورودی ناشناخته را پیوند دهد. این رفتار پیشفرض پیونددهنده قبل از نسخه ۲.۱۴ بود. رفتار پیشفرض از نسخه ۲.۱۴ به بعد رد چنین فایلهای ورودی است و بنابراین گزینه --accept-unknown-input-arch برای بازگرداندن رفتار قدیمی اضافه شده است.
- --as-needed
- --no-as-needed
- این گزینه
بر
برچسبهای
DT_NEEDED در ELF برای
کتابخانههای
پویای
ذکرشده در
خط فرمان
بعد از
گزینه --as-needed
تأثیر
میگذارد.
به طور
معمول
پیونددهنده
یک برچسب DT_NEEDED
برای هر
کتابخانه
پویای
ذکرشده
اضافه
میکند،
بدون در نظر
گرفتن
اینکه
کتابخانه
واقعاً
مورد نیاز
است یا خیر.
--as-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 keyword
- این گزینه برای سازگاری با SunOS نادیده گرفته میشود.
- -Bdynamic
- -dy
- پیوند در برابر کتابخانههای پویا. این گزینه تنها در بسترهایی معنادار است که کتابخانههای اشتراکی در آنها پشتیبانی میشوند. این گزینه معمولاً در چنین بسترهایی پیشفرض است. انواع مختلف این گزینه برای سازگاری با سیستمهای گوناگون است. میتوانید این گزینه را چندین بار در خط فرمان استفاده کنید: این گزینه بر جستجوی کتابخانه برای گزینههای -l که پس از آن میآیند تأثیر میگذارد.
- -Bgroup
- تنظیم پرچم "DF_1_GROUP" در مدخل "DT_FLAGS_1" در بخش پویا. این باعث میشود که پیونددهنده زمان اجرا جستجوها را در این شیء و وابستگیهای آن فقط درون گروه انجام دهد. این گزینه مستلزم --unresolved-symbols=report-all است. این گزینه تنها در بسترهای ELF که از کتابخانههای اشتراکی پشتیبانی میکنند معنادار است.
- -Bstatic
- -dn
- -static
- عدم پیوند در برابر کتابخانههای اشتراکی. این گزینه فقط در بسترهایی معنادار است که کتابخانههای اشتراکی در آنها پشتیبانی میشوند. انواع مختلف این گزینه برای سازگاری با سیستمهای گوناگون است. میتوانید این گزینه را چندین بار در خط فرمان استفاده کنید: این گزینه بر جستجوی کتابخانه برای گزینههای -l که پس از آن میآیند تأثیر میگذارد. این گزینه همچنین مستلزم --unresolved-symbols=report-all است. این گزینه میتواند همراه با -shared استفاده شود که به معنای ایجاد یک کتابخانه اشتراکی است که تمام ارجاعات خارجی آن باید با وارد کردن مدخلهایی از کتابخانههای ایستا حل شوند.
- -Bsymbolic
- هنگام ایجاد یک کتابخانه اشتراکی، ارجاعات به نمادهای سراسری را به تعاریف درون همان کتابخانه اشتراکی (در صورت وجود) پیوند میدهد. به طور معمول برای برنامهای که با یک کتابخانه اشتراکی پیوند شده، امکان بازنویسی تعاریف درون کتابخانه اشتراکی وجود دارد. این گزینه تنها در بسترهای ELF که از کتابخانههای اشتراکی پشتیبانی میکنند معنادار است.
- -Bsymbolic-functions
- هنگام ایجاد یک کتابخانه اشتراکی، ارجاعات به نمادهای توابع سراسری را به تعاریف درون همان کتابخانه اشتراکی (در صورت وجود) پیوند میدهد. این گزینه تنها در بسترهای ELF که از کتابخانههای اشتراکی پشتیبانی میکنند معنادار است.
- -Bno-symbolic
- این گزینه میتواند گزینههای قبلاً مشخصشده -Bsymbolic و -Bsymbolic-functions را لغو کند.
- --dynamic-list=dynamic-list-file
- نام یک فایل
لیست پویا
را برای
پیونددهنده
مشخص
میکند. این
گزینه
معمولاً
هنگام
ایجاد
کتابخانههای
اشتراکی
برای تعیین
فهرستی از
نمادهای
سراسری که
ارجاعات
آنها
نباید به
تعریف درون
کتابخانه
اشتراکی
متصل شود،
یا هنگام
ایجاد
باینریهای
پیوندیافته
به صورت
پویا برای
مشخص کردن
فهرستی از
نمادهایی
که باید به
جدول
نمادها در
باینری
اضافه شوند
استفاده
میشود. این
گزینه فقط
در بسترهای
ELF دارای
پشتیبانی
از
کتابخانههای
اشتراکی
معنادار
است.
قالب لیست پویا همانند گره نسخه بدون نام گره و محدوده است. برای اطلاعات بیشتر VERSION را ببینید.
- --dynamic-list-data
- گنجاندن تمام نمادهای دادههای سراسری در لیست پویا.
- --dynamic-list-cpp-new
- ارائه لیست پویای توکار برای عملگرهای new و delete در ++C. این گزینه عمدتاً برای ساخت libstdc++ اشتراکی مفید است.
- --dynamic-list-cpp-typeinfo
- ارائه لیست پویای توکار برای شناسایی نوع زمان اجرای ++C (RTTI).
- --check-sections
- --no-check-sections
- از پیونددهنده میخواهد آدرسهای بخشها را پس از تخصیص بررسی نکند تا ببیند آیا همپوشانی وجود دارد یا خیر. به طور معمول پیونددهنده این بررسی را انجام میدهد و در صورت یافتن هرگونه همپوشانی پیامهای خطای مناسبی تولید میکند. پیونددهنده بخشهای موجود در overlayها را میشناسد و برای آنها استثنا قائل میشود. رفتار پیشفرض را میتوان با سوییچ خط فرمان --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 به سایر کتابخانهها برای حل نمادهای مورد نیاز باینری خروجی جستجو خواهند شد. اما با تنظیمات پیشفرض جستجو در خود کتابخانه متوقف میشود.
- --cref
- خروجی جدول
ارجاع
متقابل (cross reference table).
اگر یک فایل
نقشه
پیونددهنده
در حال
تولید
باشد، جدول
ارجاع
متقابل در
فایل نقشه
چاپ
میشود؛ در
غیر این
صورت در
خروجی
استاندارد
چاپ خواهد
شد.
قالب جدول عمداً ساده است تا در صورت نیاز به راحتی توسط یک اسکریپت پردازش شود. نمادها بر اساس نام مرتب و چاپ میشوند. برای هر نماد فهرستی از نامهای فایل ارائه میشود. اگر نماد تعریف شده باشد، اولین فایل ذکرشده محل تعریف است. اگر نماد به عنوان مقدار عمومی تعریف شده باشد، فایلهایی که این اتفاق در آنها رخ داده در ادامه میآیند. در نهایت فایلهایی که به آن نماد ارجاع دادهاند فهرست میشوند.
- --ctf-variables
- --no-ctf-variables
- قالب اطلاعات دیباگ CTF از بخشی پشتیبانی میکند که نام و نوع متغیرهای یافتشده در برنامه را که در هیچ جدول نمادی ظاهر نمیشوند، کدگذاری میکند. این متغیرها آشکارا نمیتوانند با آدرس توسط دیباگرهای متداول جستجو شوند، بنابراین فضای استفادهشده برای نوع و نام آنها معمولاً هدر میرود: انواع معمولاً کوچک هستند اما نامها اغلب کوچک نیستند. گزینه --ctf-variables باعث تولید چنین بخشی میشود. رفتار پیشفرض را میتوان با --no-ctf-variables بازیابی کرد.
- --ctf-share-types=method
- تنظیم روش مورد استفاده برای اشتراکگذاری انواع میان واحدهای ترجمه (translation units) در CTF.
- قرار دادن تمام انواعی که تعاریف مبهم ندارند در فرهنگ لغت مشترک، جایی که دیباگرها میتوانند به راحتی به آنها دسترسی داشته باشند، حتی اگر تنها در یک واحد ترجمه رخ دهند. این حالت پیشفرض است.
- قرار دادن تنها انواعی که در چندین واحد ترجمه رخ میدهند در فرهنگ لغت مشترک: انواع با تنها یک تعریف وارد فرهنگ لغتهای اختصاصی هر واحد ترجمه میشوند. انواعی با تعاریف مبهم در چندین واحد ترجمه همواره وارد فرهنگ لغتهای اختصاصی واحد ترجمه میشوند. این کار تمایل دارد حجم CTF را افزایش دهد، اما ممکن است میزان CTF را در فرهنگ لغت مشترک کاهش دهد.
- --no-define-common
- این گزینه
از تخصیص
آدرسها به
نمادهای
عمومی (Common symbols)
جلوگیری
میکند.
دستور
اسکریپت
"INHIBIT_COMMON_ALLOCATION"
نیز همین
تأثیر را
دارد.
گزینه --no-define-common امکان جدا کردن تصمیمگیری برای تخصیص آدرس به نمادهای عمومی از نوع فایل خروجی را فراهم میسازد؛ در غیر این صورت یک نوع خروجی غیرجابهجاشونده وادار به تخصیص آدرس به نمادهای عمومی میشود. استفاده از این گزینه اجازه میدهد نمادهای عمومی که از یک کتابخانه اشتراکی ارجاع داده شدهاند، تنها در برنامه اصلی آدرسدهی شوند. این امر فضای تکراری بدون استفاده را در کتابخانه اشتراکی حذف کرده و از هرگونه سردرگمی در حل به نمونه تکراری نادرست در زمان اجرا جلوگیری مینماید.
- --force-group-allocation
- این گزینه باعث میشود پیونددهنده اعضای گروه بخش را مانند بخشهای ورودی عادی قرار داده و گروههای بخش را حذف کند. این رفتار پیشفرض برای یک پیوند نهایی است اما این گزینه میتواند برای تغییر رفتار یک پیوند جابهجاشونده (-r) استفاده شود. دستور اسکریپت "FORCE_GROUP_ALLOCATION" نیز همین اثر را دارد.
- --defsym=symbol=expression
- ایجاد یک
نماد
سراسری در
فایل
خروجی،
حاوی آدرس
مطلقی که
توسط expression
داده شده
است.
میتوانید
این گزینه
را به هر
تعداد بار
که لازم است
برای تعریف
چندین نماد
در خط فرمان
استفاده
کنید. شکل
محدودی از
محاسبات
برای expression در
این زمینه
پشتیبانی
میشود:
میتوانید
یک ثابت
هگزادسیمال
یا نام یک
نماد موجود
را بدهید،
یا از "+"
و "-"
برای جمع یا
تفریق
ثوابت
هگزادسیمال
یا نمادها
استفاده
کنید. اگر
به عبارات
پیچیدهتری
نیاز
دارید،
استفاده از
زبان فرمان
پیونددهنده
را از طریق
یک اسکریپت
در نظر
بگیرید.
توجه:
نباید هیچ
فاصله خالی
میان symbol،
علامت
مساوی ("=") و
expression وجود
داشته باشد.
پیونددهنده آرگومانهای --defsym و -T را به ترتیب پردازش میکند؛ قرار دادن --defsym قبل از -T نماد را پیش از پردازش اسکریپت پیونددهنده حاصل از -T تعریف میکند، در حالی که قرار دادن --defsym بعد از -T نماد را پس از پردازش اسکریپت تعریف خواهد کرد.
- --demangle[=style]
- --no-demangle
- این گزینهها کنترل میکنند که آیا نام نمادها در پیامهای خطا و سایر خروجیها ناهموارزدایی (demangle) شوند یا خیر. هنگامی که به پیونددهنده گفته میشود نمادها را ناهموارزدایی کند، تلاش میکند نام نمادها را به شیوهای خوانا ارائه دهد: زیرخطهای آغازین را در صورتی که توسط قالب فایل شیء استفاده شوند حذف کرده و نامهای درهمریخته (mangled) نمادهای ++C را به نامهای خوانا برای کاربر تبدیل میکند. کامپایلرهای مختلف سبکهای درهمریزی متفاوتی دارند. آرگومان سبک اختیاری ناهموارزدایی میتواند برای انتخاب یک سبک مناسب برای کامپایلر شما به کار رود. پیونددهنده به طور پیشفرض ناهموارزدایی را انجام میدهد مگر اینکه متغیر محیطی COLLECT_NO_DEMANGLE تنظیم شده باشد. این گزینهها میتوانند برای بازنویسی حالت پیشفرض استفاده شوند.
- -Ifile
- --dynamic-linker=file
- تنظیم نام پیونددهنده پویا. این گزینه تنها هنگام تولید فایلهای اجرایی ELF با پیوند پویا معنادار است. پیونددهنده پویای پیشفرض معمولاً صحیح است؛ از این گزینه استفاده نکنید مگر اینکه بدانید چه میکنید.
- --no-dynamic-linker
- هنگام تولید یک فایل اجرایی، درخواست استفاده از یک پیونددهنده پویا در زمان بارگذاری را حذف میکند. این مورد فقط برای باینریهای ELF که دارای بازنشانیهای پویا هستند معنادار است و معمولاً به کد نقطه ورودی نیاز دارد که قادر به پردازش این بازنشانیها باشد.
- --embedded-relocs
- این گزینه شبیه به گزینه --emit-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های اصلاحنشده یونیکس روی میزبان مایکروسافت ویندوز مفید است، زیرا برخی نسخههای ویندوز تصویری را که به پسوند ".exe" ختم نشود اجرا نمیکنند.
- --gc-sections
- --no-gc-sections
- فعال کردن
جمعآوری
زباله (garbage collection)
بخشهای
ورودی
استفادهنشده.
در اهدافی
که از این
گزینه
پشتیبانی
نمیکنند
نادیده
گرفته
میشود.
رفتار
پیشفرض
(عدم انجام
این
جمعآوری
زباله) را
میتوان با
تعیین --no-gc-sections
در خط فرمان
بازیابی
کرد. توجه
داشته
باشید که
جمعآوری
زباله برای
اهداف با
قالب COFF و PE
پشتیبانی
میشود،
اما
پیادهسازی
آن در حال
حاضر
آزمایشی در
نظر گرفته
میشود.
گزینه --gc-sections با بررسی نمادها و بازنشانیها تصمیم میگیرد کدام بخشهای ورودی استفاده شوند. بخشی که حاوی نماد ورود است و تمام بخشهای حاوی نمادهای تعریفنشده در خط فرمان نگهداری خواهند شد، همانطور که بخشهای حاوی نمادهای ارجاعشده توسط اشیای پویا حفظ میشوند. توجه داشته باشید که هنگام ساخت کتابخانههای اشتراکی، پیونددهنده باید فرض کند که هر نماد قابلمشاهده ارجاع داده شده است. پس از تعیین این مجموعه اولیه از بخشها، پیونددهنده به صورت بازگشتی هر بخشی را که توسط بازنشانیهای آنها ارجاع داده شده باشد، به عنوان استفادهشده علامتگذاری میکند. --entry، --undefined و --gc-keep-exported را ببینید.
این گزینه میتواند هنگام انجام یک پیوند جزئی (فعالشده با گزینه -r) تنظیم شود. در این حالت، ریشه نمادهای نگهداشتهشده باید صراحتاً توسط یکی از گزینههای --entry، --undefined یا --gc-keep-exported یا توسط یک دستور "ENTRY" در اسکریپت پیونددهنده مشخص شود.
به عنوان یک افزونه گنو، بخشهای ورودی 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.
این گزینه
در اهداف
تعبیهشده
برای داشتن
دیدی سریع
از میزان
حافظه آزاد
مفید است.
قالب خروجی
دارای یک خط
عنوان و یک
خط برای هر
ناحیه است.
هم برای
انسان
خوانا است و
هم به راحتی
توسط
ابزارها
قابل تجزیه
است. در
اینجا
نمونهای
از خروجی
آورده شده
است:
Memory region Used Size Region Size %age Used ROM: 256 KB 1 MB 25.00% RAM: 32 B 2 GB 0.00%توجه: اگر میخواهید از میزان مصرف حافظه خود پیونددهنده مطلع شوید، گزینه --stats این کار را انجام میدهد.
- --help
- چاپ خلاصهای از گزینههای خط فرمان در خروجی استاندارد و خروج.
- --target-help
- چاپ خلاصهای از تمام گزینههای مختص به هدف در خروجی استاندارد و خروج.
- -Map=mapfile
- چاپ نقشه
پیوند در
فایل mapfile.
توضیحات
گزینه -M را
در بالا
ببینید. اگر
mapfile فقط
نویسه
"-"
باشد، نقشه
در stdout نوشته
میشود.
مشخص کردن یک پوشه به عنوان mapfile باعث میشود نقشه پیونددهنده به صورت فایلی درون آن پوشه نوشته شود. معمولاً نام فایل درون پوشه به عنوان نام پایه فایل output به همراه پسوند ".map" محاسبه میشود. اما اگر از نویسه خاص "%" استفاده شود، با مسیر کامل فایل خروجی جایگزین خواهد شد. علاوه بر این اگر کاراکترهایی پس از نماد % وجود داشته باشد، دیگر ".map" به آن اضافه نخواهد شد.
-o foo.exe -Map=bar [Creates ./bar] -o ../dir/foo.exe -Map=bar [Creates ./bar] -o foo.exe -Map=../dir [Creates ../dir/foo.exe.map] -o ../dir2/foo.exe -Map=../dir [Creates ../dir/foo.exe.map] -o foo.exe -Map=% [Creates ./foo.exe.map] -o ../dir/foo.exe -Map=% [Creates ../dir/foo.exe.map] -o foo.exe -Map=%.bar [Creates ./foo.exe.bar] -o ../dir/foo.exe -Map=%.bar [Creates ../dir/foo.exe.bar] -o ../dir2/foo.exe -Map=../dir/% [Creates ../dir/../dir2/foo.exe.map] -o ../dir2/foo.exe -Map=../dir/%.bar [Creates ../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
- اگر این
گزینه
ارائه شود،
پیونددهنده
هر زمان که
با خطایی
مواجه شود،
scriptname را
فراخوانی
میکند. با
این حال در
حال حاضر
تنها دو نوع
خطا
پشتیبانی
میشوند:
نمادهای
مفقود و
کتابخانههای
مفقود. دو
آرگومان به
اسکریپت
ارسال
میشود:
کلیدواژه
"undefined-symbol" یا "missing-lib"
و name نماد
تعریفنشده
یا
کتابخانه
مفقود. هدف
این است که
اسکریپت
پیشنهادهایی
به کاربر
ارائه دهد
که نماد یا
کتابخانه
ممکن است در
کجا پیدا
شوند. پس از
پایان
اسکریپت،
پیام خطای
عادی
پیونددهنده
نمایش داده
خواهد شد.
در دسترس بودن این گزینه توسط یک سوییچ در زمان پیکربندی کنترل میشود، بنابراین ممکن است در برخی پیادهسازیها وجود نداشته باشد.
- --no-undefined-version
- به طور معمول وقتی یک نماد نسخه تعریفنشدهای دارد، پیونددهنده آن را نادیده میگیرد. این گزینه نمادهای با نسخه تعریفنشده را مجاز نمیداند و در عوض یک خطای مهلک صادر میشود.
- --default-symver
- ایجاد و استفاده از یک نسخه نماد پیشفرض (soname) برای نمادهای صادرشده فاقد نسخه.
- --default-imported-symver
- ایجاد و استفاده از یک نسخه نماد پیشفرض (soname) برای نمادهای وارداتی فاقد نسخه.
- --no-warn-mismatch
- به طور معمول اگر سعی کنید فایلهای ورودی را که بنا به دلایلی ناهماهنگ هستند (مثلاً به این دلیل که برای پردازندههای مختلف یا ترتیبهای بایت متفاوتی کامپایل شدهاند) با یکدیگر پیوند دهید، ld خطایی اعلام میکند. این گزینه به ld میگوید که باید چنین خطاهای احتمالی را بدون هشدار اجازه دهد. این گزینه باید تنها با احتیاط و در مواردی استفاده شود که اقدام خاصی انجام دادهاید که اطمینان میدهد خطاهای پیونددهنده نامناسب هستند.
- --no-warn-search-mismatch
- به طور معمول اگر ld در حین جستجوی کتابخانه به یک کتابخانه ناسازگار برخورد کند، هشدار میدهد. این گزینه هشدار را بیصدا میکند.
- --no-whole-archive
- غیرفعال کردن اثر گزینه --whole-archive برای فایلهای آرشیو بعدی. در داخل یک جفت گزینه --start-lib/--end-lib مجاز نیست.
- --no-link-mapless
- رد کردن آرشیوهایی که فاقد نمایه یا نقشه نماد برای تمام آرشیوهای بعدی ذکرشده در خط فرمان هستند. اگر با چنین فایلی مواجه شود، خطای پیوند رخ میدهد. این رفتار سنتی است.
- --noinhibit-exec
- حفظ فایل خروجی اجرایی هر زمان که هنوز قابل استفاده باشد. به طور معمول پیونددهنده در صورت مواجهه با خطا در فرآیند پیوند، فایل خروجی تولید نمیکند؛ هنگامی که هر خطایی صادر کند بدون نوشتن فایل خروجی خارج میشود.
- -nostdlib
- فقط پوشههای کتابخانهای را که صراحتاً در خط فرمان مشخص شدهاند جستجو کنید. پوشههای کتابخانه مشخصشده در اسکریپتهای پیونددهنده (از جمله اسکریپتهای مشخصشده در خط فرمان) نادیده گرفته میشوند.
- --oformat=output-format
- برنامه ld ممکن است طوری پیکربندی شده باشد که از بیش از یک نوع فایل شیء پشتیبانی کند. اگر ld شما به این روش پیکربندی شده باشد، میتوانید از گزینه --oformat برای مشخص کردن قالب باینری فایل شیء خروجی استفاده کنید. حتی در صورت پیکربندی برای قالبهای جایگزین، معمولاً نیازی به تعیین این گزینه ندارید، زیرا ld باید طوری پیکربندی شده باشد که معمولترین قالب را در هر ماشین تولید کند. شناسه output-format رشتهای متنی است که نام یک قالب خاص پشتیبانیشده توسط BFD را مشخص میکند (با objdump -i میتوانید قالبهای موجود را ببینید). دستور اسکریپت "OUTPUT_FORMAT" نیز میتواند قالب خروجی را مشخص کند، اما این گزینه آن را لغو میکند.
- --out-implib file
- ایجاد یک کتابخانه وارداتی (import library) در file متناظر با باینری در حال تولید توسط پیونددهنده (مثلاً یک DLL یا برنامه ELF). این کتابخانه وارداتی (که برای DLLها باید "*.dll.a" یا "*.a" نامیده شود) میتواند برای پیوند دادن کلاینتها با باینری تولیدشده استفاده شود؛ این رفتار امکان نادیده گرفتن مرحله مجزای ایجاد کتابخانه وارداتی (مثلاً "dlltool" برای DLLها) را فراهم میسازد. این گزینه تنها برای نسخههای PE و ELF پیونددهنده در دسترس است.
- -pie
- --pic-executable
- ایجاد یک فایل اجرایی مستقل از موقعیت (PIE). این مورد در حال حاضر تنها روی بسترهای ELF پشتیبانی میشود. فایلهای اجرایی مستقل از موقعیت توسط پیونددهنده پویا به آدرس مجازی که سیستمعامل برای آنها انتخاب میکند (که میتواند بین دفعات فراخوانی متفاوت باشد) بازنشانی میشوند. آنها در سرآیند فایل ELF با ET_DYN مشخص میشوند، اما از جهات متعددی با کتابخانههای اشتراکی تفاوت دارند. به ویژه، نمادهای تعریفشده در یک PIE به طور پیشفرض نمیتوانند توسط شیء دیگری لغو (override) شوند، آنگونه که در یک کتابخانه اشتراکی امکانپذیر است.
- -no-pie
- ایجاد یک فایل اجرایی وابسته به موقعیت. این حالت پیشفرض است.
- -qmagic
- این گزینه برای سازگاری با لینوکس نادیده گرفته میشود.
- -Qy
- این گزینه برای سازگاری با SVR4 نادیده گرفته میشود.
- --relax
- --no-relax
- گزینهای
با اثرات
وابسته به
ماشین. این
گزینه تنها
در چند هدف
پشتیبانی
میشود.
در برخی بسترها گزینه --relax بهینهسازیهای سراسری و مختص به هدف را انجام میدهد که زمانی امکانپذیر میشوند که پیونددهنده آدرسدهی را در برنامه حل کند، مانند روانسازی حالتهای آدرسدهی، ساخت دستورالعملهای جدید، انتخاب نسخههای کوتاهتر از دستورالعملهای فعلی، و ترکیب مقادیر ثابت.
در برخی بسترها این بهینهسازیهای سراسری زمان پیوند ممکن است اشکالزدایی نمادین باینری حاصل را غیرممکن کند. این مسئله در مورد پردازندههای خانواده Matsushita MN10200 و MN10300 شناخته شده است.
در بسترهایی که این ویژگی پشتیبانی میشود، گزینه --no-relax آن را غیرفعال خواهد کرد.
در بسترهایی که ویژگی پشتیبانی نمیشود، هر دو گزینه --relax و --no-relax پذیرفته میشوند اما نادیده گرفته خواهند شد.
- --retain-symbols-file=filename
- نگهداری
فقط
نمادهای
فهرستشده
در فایل filename و
دور ریختن
بقیه
نمادها.
فایل filename
صرفاً یک
فایل متنی
ساده با یک
نام نماد در
هر خط است.
این گزینه
به ویژه در
محیطهایی
(مانند VxWorks) که
یک جدول
نمادهای
سراسری
بزرگ به
تدریج
انباشته
میشود،
برای
صرفهجویی
در حافظه
زمان اجرا
مفید است.
گزینه --retain-symbols-file نمادهای تعریفنشده یا نمادهای مورد نیاز برای بازنشانی را دور نمیاندازد.
میتوانید --retain-symbols-file را تنها یک بار در خط فرمان مشخص کنید. این گزینه -s و -S را لغو میکند.
- -rpath=dir
- افزودن یک
دایرکتوری
به مسیر
جستجوی
کتابخانه
در زمان
اجرا (runtime library search path).
این مورد
هنگام
پیوند دادن
یک فایل
اجرایی ELF با
اشیای
اشتراکی
استفاده
میشود.
تمام
آرگومانهای
-rpath به
یکدیگر
متصل شده و
به
پیونددهنده
زمان اجرا
منتقل
میشوند که
از آنها
برای یافتن
اشیای
اشتراکی در
زمان اجرا
استفاده
میکند.
گزینه -rpath همچنین هنگام مکانیابی اشیای اشتراکی مورد نیاز توسط اشیای اشتراکی که صراحتاً در پیوند گنجانده شدهاند استفاده میشود؛ توضیحات گزینه -rpath-link را ببینید. جستجوی -rpath به این روش تنها توسط پیونددهندههای محلی (native) و پیونددهندههای متقاطع (cross) که با گزینه --with-sysroot پیکربندی شدهاند پشتیبانی میشود.
اگر هنگام پیوند یک فایل اجرایی ELF از -rpath استفاده نشود، محتویات متغیر محیطی "LD_RUN_PATH" در صورت تعریف بودن استفاده خواهد شد.
گزینه -rpath همچنین ممکن است در SunOS استفاده شود. به طور پیشفرض در SunOS، پیونددهنده یک مسیر جستجوی زمان اجرا از تمام گزینههای -L دادهشده تشکیل میدهد. اگر از یک گزینه -rpath استفاده شود، مسیر جستجوی زمان اجرا منحصراً با گزینههای -rpath با نادیده گرفتن گزینههای -L تشکیل خواهد شد. این کار هنگام استفاده از gcc که گزینههای -L زیادی اضافه میکند که ممکن است روی سیستمهای فایل NFS باشند، مفید است.
برای سازگاری با سایر پیونددهندههای ELF، اگر گزینه -R به جای نام فایل با نام یک پوشه دنبال شود، به عنوان گزینه -rpath تلقی خواهد شد.
- -rpath-link=dir
- هنگام
استفاده از
ELF یا SunOS، ممکن
است یک
کتابخانه
اشتراکی به
کتابخانه
دیگری نیاز
داشته باشد.
این اتفاق
زمانی رخ
میدهد که
پیوند "ld
-shared" یک
کتابخانه
اشتراکی را
به عنوان
یکی از
فایلهای
ورودی شامل
شود.
هنگامی که پیونددهنده در حین انجام یک پیوند غیراشتراکی و غیرجابهجاشونده با چنین وابستگی مواجه میشود، به طور خودکار سعی میکند کتابخانه اشتراکی مورد نیاز را پیدا کرده و در صورتی که صراحتاً گنجانده نشده باشد، آن را در پیوند قرار دهد. در چنین حالتی، چندین دایرکتوری به شرح زیر جستجو میشوند. گزینه -rpath-link اولین مجموعه از دایرکتوریها را برای جستجو مشخص میکند. این گزینه میتواند با ارائه فهرستی از نامها که با دونقطه از هم جدا شدهاند یا با تکرار چندباره در خط فرمان، دنبالهای از نامهای پوشه را مشخص کند.
توکنهای $ORIGIN و $LIB میتوانند در این پوشههای جستجو ظاهر شوند. آنها با مسیر کامل پوشه حاوی برنامه یا شیء اشتراکی برای $ORIGIN و lib (برای باینریهای ۳۲ بیتی) یا lib64 (برای باینریهای ۶۴ بیتی) برای $LIB جایگزین خواهند شد.
شکل جایگزین این توکنها - یعنی ${ORIGIN} و ${LIB} نیز میتواند استفاده شود. توکن $PLATFORM پشتیبانی نمیشود.
گزینه --rpath-link باید با احتیاط استفاده شود زیرا مسیر جستجویی را که ممکن است درون یک کتابخانه اشتراکی تعبیه شده باشد، باطل میکند.
هنگامی که به کتابخانههای اشتراکی اضافی نیاز است، پیونددهنده پوشهها را به ترتیبی که در زیر آمده برای یافتن آنها جستجو میکند. توجه داشته باشید که این فقط برای کتابخانههای اضافی مورد نیاز جهت برآورده کردن کتابخانههای اشتراکی از قبل گنجاندهشده اعمال میشود، نه برای کتابخانههایی که از طریق گزینه خط فرمان -l گنجانده شدهاند (جستجو برای کتابخانههای -l فقط در پوشههای مشخصشده توسط -L انجام میشود):
- 1.
- هر پوشه مشخصشده توسط گزینههای -rpath-link.
- 2.
- هر پوشه مشخصشده توسط گزینههای -rpath. تفاوت بین -rpath و -rpath-link در این است که پوشههای مشخصشده توسط -rpath در فایل اجرایی گنجانده شده و در زمان اجرا استفاده میشوند، در حالی که گزینه -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_RUNPATH"، مدخلهای "DT_RPATH" نادیده گرفته میشوند.
- 7.
- برای یک پیونددهنده در سیستم لینوکس، در صورت وجود فایل /etc/ld.so.conf، فهرست پوشههای یافتشده در آن فایل.
- 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" در یک اسکریپت پیشفرض پیونددهنده.
اگر کتابخانه اشتراکی مورد نیاز یافت نشود، پیونددهنده هشداری صادر کرده و پیوند را ادامه میدهد.
- --section-ordering-file=script
- این گزینه
برای تقویت
اسکریپت
فعلی
پیونددهنده
با نگاشت
اضافی
بخشهای
ورودی به
بخشهای
خروجی
استفاده
میشود. این
فایل باید
از نحوی
مشابه برای
"SECTIONS" که
در
اسکریپتهای
عادی
استفاده
میشود
پیروی کند،
اما نباید
کاری جز
قرار دادن
بخشهای
ورودی در
بخشهای
خروجی
انجام دهد.
محدودیت دوم این است که فقط میتواند به بخشهای خروجی ارجاع دهد که از قبل توسط هر اسکریپتی که در حال استفاده است تعریف شده باشند. مزیت فایل مرتبسازی بخش این است که بخشهای ورودی به ابتدای بخشهای خروجی نگاشت میشوند تا بتوانند ترتیب بخشها را تضمین کنند. برای مثال تصور کنید اسکریپت پیشفرض به شکل زیر است:
SECTIONS { .text : { *(.text.hot) ; *(.text .text.*) } .data : { *(.data.big) ; *(.data .data.*) } }حال اگر یک فایل مرتبسازی بخش مانند زیر استفاده شود:
.text : { *(.text.first) ; *(.text.z*) } .data : { foo.o(.data.first) ; *(.data.small) }این معادل با اسکریپت پیونددهندهای مانند زیر خواهد بود:
SECTIONS { .text : { *(.text.first) ; *(.text.z*) ; *(.text.hot) ; *(.text .text.*) } .data : { foo.o(.data.first) ; *(.data.small) ; *(.data.big) ; *(.data .data.*) } }مزیت این فایل این است که میتوان از آن برای مرتبسازی بخشهای مهم بدون نگرانی در مورد سایر بخشها یا نواحی حافظه استفاده کرد.
- ایجاد یک کتابخانه اشتراکی. این مورد در حال حاضر تنها روی بسترهای ELF، XCOFF و SunOS پشتیبانی میشود. در SunOS، اگر گزینه -e استفاده نشود و نمادهای تعریفنشده در پیوند وجود داشته باشند، پیونددهنده به طور خودکار یک کتابخانه اشتراکی ایجاد خواهد کرد.
- --sort-common
- --sort-common=ascending
- --sort-common=descending
- این گزینه به ld میگوید هنگام قرار دادن نمادهای عمومی در بخشهای خروجی مناسب، آنها را بر اساس تراز به ترتیب صعودی یا نزولی مرتب کند. ترازهای نمادهای مورد بررسی عبارتند از ۱۶ بایتی یا بزرگتر، ۸ بایتی، ۴ بایتی، ۲ بایتی و ۱ بایتی. این کار برای جلوگیری از ایجاد شکاف میان نمادها به دلیل محدودیتهای تراز است. اگر ترتیبی مشخص نشود، ترتیب نزولی فرض میشود.
- --sort-section=name
- اعمال "SORT_BY_NAME" بر تمام الگوهای عام بخش در اسکریپت پیونددهنده.
- --sort-section=alignment
- اعمال "SORT_BY_ALIGNMENT" بر تمام الگوهای عام بخش در اسکریپت پیونددهنده.
- --spare-dynamic-tags=count
- مشخص کردن تعداد اسلاتهای خالی برای باقی گذاشتن در بخش .dynamic اشیای اشتراکی ELF. اسلاتهای خالی ممکن است توسط ابزارهای پسپردازش مانند prelinker مورد نیاز باشند. مقدار پیشفرض ۵ است.
- --split-by-file[=size]
- مشابه --split-by-reloc اما هنگام رسیدن به size یک بخش خروجی جدید برای هر فایل ورودی ایجاد میکند. مقدار size در صورت داده نشدن به طور پیشفرض ۱ است.
- --split-by-reloc[=count]
- تلاش میکند بخشهای اضافی در فایل خروجی ایجاد کند تا هیچ بخش خروجی واحدی در فایل حاوی بیش از count بازنشانی نباشد. این گزینه هنگام تولید فایلهای جابهجاشونده عظیم برای بارگیری در هستههای بلادرنگ خاص با قالب فایل شیء COFF مفید است، زیرا COFF نمیتواند بیش از ۶۵۵۳۵ بازنشانی را در یک بخش واحد نمایش دهد. مقدار پیشفرض ۳۲۷۶۸ است.
- --stats[=filename]
- محاسبه و
نمایش آمار
درباره
عملکرد
پیونددهنده،
مانند زمان
اجرا و مصرف
حافظه.
اگر آرگومان اختیاری filename ارائه نشود، تنها اطلاعات اولیه گزارش شده و به جریان خروجی خطای استاندارد (stderr) ارسال میشود. اگر آرگومان filename ارائه شود، اطلاعات گسترده در فایل نامگذاریشده نوشته میشود. اگر filename صرفاً نماد - باشد، اطلاعات گسترده به stdout ارسال خواهد شد. اگر filename با + شروع شود، فایل در حالت الحاق (append) باز میشود.
اگر متغیر محیطی "LD_STATS" تعریف شده باشد، همانند گزینه --stats عمل میکند. در صورت تعارض بین متغیر محیطی و گزینه، گزینه --stats اولویت دارد.
اطلاعات گسترده شامل زمان CPU استفادهشده، اندازه حداکثر مجموعه مقیم (RSS)، زمان اجرای کاربری و سیستمی، و مصرف کل حافظه است. خروجی گسترده شبیه به نمونه زیر است:
Stats: linker version: (GNU Binutils) 2.44.50.20250401 Stats: linker started: Wed Apr 2 09:36:41 2025 Stats: args: ld -z norelro -z nomemory-seal -z no-separate-code -o a.out [...] Stats: phase cpu time rss user time system time memory Stats: name (microsec) (KiB) (seconds) (seconds) (KiB) Stats: ALL 390082 217740 0 0 25219440 Stats: ctf processing 12 0 0 0 0 Stats: string merge 1324 0 0 0 406544 Stats: parsing 349 288 0 0 119792 Stats: plugins 1 0 0 0 0 Stats: processing files 259616 214524 0 0 31569120 Stats: write 116493 0 0 0 48096
- --no-stats
- غیرفعال کردن گزارش آمار مصرف در صورتی که از طریق گزینه خط فرمان --stats یا متغیر محیطی LD_STATS فعال شده باشد.
- --sysroot=directory
- استفاده از directory به عنوان مکان sysroot، با باطل کردن پیشفرض زمان پیکربندی. این گزینه تنها توسط پیونددهندههایی پشتیبانی میشود که با --with-sysroot پیکربندی شدهاند.
- --task-link
- توسط اهداف مبتنی بر COFF/PE برای ایجاد یک فایل شیء task-linked استفاده میشود که در آن تمام نمادهای سراسری به ایستا تبدیل شدهاند.
- --traditional-format
- برای برخی اهداف، خروجی ld از جهاتی با خروجی پیونددهندههای سنتی متفاوت است. این سوییچ از ld میخواهد از قالب سنتی استفاده کند. برای مثال در SunOS، پیونددهنده ورودیهای تکراری را در جدول رشته نمادها ترکیب میکند که میتواند اندازه فایل خروجی را با اطلاعات اشکالزدایی تا بیش از ۳۰ درصد کاهش دهد، اما برنامه "dbx" نمیتواند آن را بخواند. سوییچ --traditional-format به ld میگوید ورودیهای تکراری را ترکیب نکند.
- --section-start=sectionname=org
- مکانیابی یک بخش در فایل خروجی در آدرس مطلق ارائهشده توسط org. میتوانید این گزینه را به هر تعداد بار که لازم است برای مکانیابی چندین بخش در خط فرمان استفاده کنید. org باید یک عدد صحیح هگزادسیمال منفرد باشد؛ برای سازگاری با سایر پیونددهندهها میتوانید 0x آغازین را حذف کنید. نباید هیچ فاصله خالی میان sectionname، علامت مساوی ("=") و org وجود داشته باشد.
- --image-base=org
- هنگام
استفاده از
ELF، مشابه -Ttext-segment
است که هر
دو گزینه
آدرس پایه
باینری
اجرایی ELF را
تنظیم
میکنند.
هنگام استفاده از PE، از org به عنوان آدرس پایه برنامه یا dll خود استفاده کنید. این پایینترین مکان حافظه است که هنگام بارگذاری برنامه یا dll استفاده خواهد شد. پیشفرض 0x400000 برای فایلهای اجرایی و 0x10000000 برای dllها است.
- -Tbss=org
- -Tdata=org
- -Ttext=org
- مشابه --section-start، با ".bss"، ".data" یا ".text" به عنوان sectionname.
- -Ttext-segment=org
- هنگام ایجاد یک فایل اجرایی ELF، آدرس اولین بایت قطعه اول را تنظیم میکند.
- -Trodata-segment=org
- هنگام ایجاد یک فایل اجرایی یا شیء اشتراکی ELF برای هدفی که در آن دادههای فقطخواندنی در قطعه اختصاصی خود مجزا از کد اجرایی قرار دارند، آدرس اولین بایت قطعه داده فقطخواندنی را تنظیم میکند.
- -Tldata-segment=org
- هنگام ایجاد یک فایل اجرایی یا شیء اشتراکی ELF برای مدل حافظه متوسط x86-64، آدرس اولین بایت قطعه ldata را تنظیم میکند.
- --unresolved-symbols=method
- تعیین نحوه مدیریت نمادهای حلنشده. چهار مقدار ممکن برای method وجود دارد:
- ignore-all
- عدم گزارش هیچ نماد حلنشده.
- report-all
- گزارش تمام نمادهای حلنشده. این حالت پیشفرض است.
- ignore-in-object-files
- گزارش نمادهای حلنشده موجود در کتابخانههای اشتراکی، اما نادیده گرفتن آنها اگر از فایلهای شیء معمولی بیایند.
- ignore-in-shared-libs
- گزارش نمادهای حلنشده از فایلهای شیء معمولی، اما نادیده گرفتن آنها اگر از کتابخانههای اشتراکی بیایند.
رفتار برای کتابخانههای اشتراکی به تنهایی میتواند توسط گزینه --[no-]allow-shlib-undefined کنترل شود. گزینه --warn-unresolved-symbols میتواند خطاها را به هشدار تبدیل کند.
- --dll-verbose
- --verbose[=NUMBER]
- نمایش شماره نسخه برای ld و فهرست کردن شبیهسازیهای پیونددهنده پشتیبانیشده. نمایش اینکه کدام فایلهای ورودی باز میشوند یا نمیشوند. نمایش اسکریپت پیونددهنده مورد استفاده. اگر آرگومان اختیاری NUMBER بزرگتر از ۱ باشد، وضعیت نماد افزونه نیز نمایش داده خواهد شد.
- --version-script=version-scriptfile
- مشخص کردن نام یک اسکریپت نسخه برای پیونددهنده. این گزینه معمولاً هنگام ایجاد کتابخانههای اشتراکی برای تعیین اطلاعات تکمیلی در مورد سلسلهمراتب نسخه برای کتابخانه در حال ایجاد استفاده میشود. این گزینه فقط در بسترهای ELF که از کتابخانههای اشتراکی پشتیبانی میکنند به طور کامل پشتیبانی میشود؛ VERSION را ببینید.
- --warn-common
- هشدار
هنگام
ترکیب یک
نماد عمومی
(common symbol) با یک
نماد عمومی
دیگر یا با
یک تعریف
نماد.
پیونددهندههای
یونیکس این
عمل نسبتاً
سهلانگارانه
را مجاز
میدانند،
اما
پیونددهندهها
در برخی
سیستمعاملهای
دیگر چنین
اجازهای
نمیدهند.
این گزینه
به شما
اجازه
میدهد تا
مشکلات
بالقوه
ناشی از
ترکیب
نمادهای
سراسری را
بیابید.
متأسفانه
برخی از
کتابخانههای
C از این روش
استفاده
میکنند،
بنابراین
ممکن است
هشدارهایی
در مورد
نمادها در
کتابخانهها
و همچنین در
برنامههای
خود دریافت
کنید.
سه نوع نماد سراسری وجود دارد که در اینجا با مثالهای C نشان داده شده است:
- int i = 1;
- یک تعریف (definition)، که در بخش دادههای مقداردهیشده (initialized data) فایل خروجی قرار میگیرد.
- extern int i;
- یک ارجاع تعریفنشده، که فضایی اختصاص نمیدهد. باید در جایی یک تعریف یا یک نماد عمومی برای متغیر وجود داشته باشد.
- int i;
- یک نماد عمومی (common symbol). اگر برای یک متغیر فقط نماد(های) عمومی وجود داشته باشد، در ناحیه دادههای مقداردهینشده فایل خروجی قرار میگیرد. پیونددهنده چندین نماد عمومی برای یک متغیر را در یک نماد واحد ادغام میکند. اگر اندازههای متفاوتی داشته باشند، بزرگترین اندازه را انتخاب میکند. اگر تعریفی از همان متغیر وجود داشته باشد، پیونددهنده نماد عمومی را به یک اعلان تبدیل مینماید.
گزینه --warn-common میتواند پنج نوع هشدار تولید کند. هر هشدار شامل یک جفت خط است: خط اول نمادی را که به تازگی با آن مواجه شده توصیف میکند، و خط دوم نماد قبلی با همان نام را توصیف میکند. یک یا هر دو نماد یک نماد عمومی خواهند بود:
- 1.
- تبدیل یک
نماد عمومی
به یک
ارجاع،
زیرا از قبل
تعریفی
برای نماد
وجود دارد.
<file>(<section>): warning: common of `<symbol>' overridden by definition <file>(<section>): warning: defined here
- 2.
- تبدیل یک
نماد عمومی
به یک
ارجاع،
زیرا
تعریفی
بعدی برای
نماد پیدا
شده است.
<file>(<section>): warning: definition of `<symbol>' overriding common <file>(<section>): warning: common is here
- 3.
- ادغام یک
نماد عمومی
با یک نماد
عمومی
هماندازه
قبلی.
<file>(<section>): warning: multiple common of `<symbol>' <file>(<section>): warning: previous common is here
- 4.
- ادغام یک
نماد عمومی
با یک نماد
عمومی
بزرگتر
قبلی.
<file>(<section>): warning: common of `<symbol>' overridden by larger common <file>(<section>): warning: larger common is here
- 5.
- ادغام یک
نماد عمومی
با یک نماد
عمومی
کوچکتر
قبلی.
<file>(<section>): warning: common of `<symbol>' overriding smaller common <file>(<section>): warning: smaller common is here
- --warn-constructors
- هشدار در صورت استفاده از هر سازنده سراسری. این گزینه تنها برای چند قالب فایل شیء مفید است. برای قالبهایی مانند COFF یا ELF، پیونددهنده نمیتواند استفاده از سازندههای سراسری را تشخیص دهد.
- --warn-execstack
- --warn-execstack-objects
- --no-warn-execstack
- در بسترهای ELF اگر از پیونددهنده خواسته شود فایل خروجی حاوی پشته اجرایی (executable stack) ایجاد کند، ممکن است پیامهای هشدار تولید نماید. سه حالت ممکن وجود دارد:
- 1.
- هیچ هشداری تولید نشود.
- 2.
- همیشه هشدار تولید شود، حتی اگر پشته اجرایی از طریق گزینه خط فرمان -z execstack درخواست شده باشد.
- 3.
- فقط در صورتی هشدار تولید شود که یک فایل شیء پشته اجرایی را درخواست کند، اما نه زمانی که گزینه -z execstack استفاده شده باشد.
حالت پیشفرض به نحوه پیکربندی پیونددهنده در زمان ساخت بستگی دارد. گزینه --no-warn-execstack همواره پیونددهنده را در حالت بدون هشدار قرار میدهد. گزینه --warn-execstack پیونددهنده را در حالت همواره هشدار قرار میدهد. گزینه --warn-execstack-objects پیونددهنده را در حالت هشدار فقط برای فایلهای شیء قرار میدهد.
- --error-execstack
- --no-error-execstack
- اگر پیونددهنده قصد تولید پیام هشدار درباره پشته اجرایی داشته باشد، گزینه --error-execstack آن هشدار را به خطا تبدیل میکند. گزینه --no-error-execstack رفتار پیشفرض تولید پیامهای هشدار را بازیابی خواهد کرد.
- --warn-multiple-gp
- هشدار در صورتی که مقادیر چندگانه اشارهگر سراسری (global pointer) در فایل خروجی مورد نیاز باشد. این فقط برای پردازندههای خاصی مانند Alpha معنادار است.
- --warn-once
- تنها یک بار هشدار دادن برای هر نماد تعریفنشده، به جای یک بار به ازای هر ماژولی که به آن ارجاع میدهد.
- --warn-rwx-segments
- --no-warn-rwx-segments
- هشدار در
صورتی که
پیونددهنده
یک قطعه
قابلبارگذاری
با اندازه
غیرصفر
ایجاد کند
که هر سه
پرچم
دسترسی
خواندن،
نوشتن و
اجرا را
داشته باشد.
چنین
قطعهای یک
آسیبپذیری
امنیتی
بالقوه به
شمار
میرود.
علاوه بر
این، اگر یک
قطعه حافظه
محلی رشته (TLS)
با پرچم
مجوز اجرا
تنظیمشده
ایجاد شود،
بدون در نظر
گرفتن
اینکه آیا
پرچمهای
خواندن و/یا
نوشتن
تنظیم
شدهاند یا
خیر،
هشدارها
صادر
خواهند شد.
این هشدارها به طور پیشفرض فعال هستند. میتوان آنها را با گزینه --no-warn-rwx-segments غیرفعال کرد.
- --error-rwx-segments
- --no-error-rwx-segments
- اگر پیونددهنده بخواهد یک پیام هشدار در مورد یک قطعه اجرایی و قابلنوشتن یا یک قطعه TLS اجرایی صادر کند، گزینه --error-rwx-segments این هشدار را به یک خطا تبدیل میکند. گزینه --no-error-rwx-segments رفتار پیشفرض صدور پیام هشدار را بازیابی میکند.
- --warn-section-align
- هشدار در صورتی که آدرس یک بخش خروجی به دلیل تراز تغییر کند.
- --warn-textrel
- هشدار در صورتی که پیونددهنده DT_TEXTREL را به یک باینری اجرایی مستقل از موقعیت یا شیء اشتراکی اضافه کند.
- --warn-alternate-em
- هشدار در صورتی که یک شیء دارای کد ماشین جایگزین ELF باشد.
- --warn-unresolved-symbols
- اگر پیونددهنده بخواهد یک نماد حلنشده را گزارش دهد (گزینه --unresolved-symbols را ببینید)، به طور معمول یک خطا ایجاد میکند. این گزینه باعث میشود به جای آن یک هشدار تولید کند.
- --error-unresolved-symbols
- رفتار پیشفرض پیونددهنده مبنی بر تولید خطا هنگام گزارش نمادهای حلنشده را بازیابی میکند.
- --whole-archive
- برای هر
آرشیو
ذکرشده در
خط فرمان پس
از گزینه
--whole-archive، تمام
فایلهای
شیء موجود
در آرشیو را
در پیوند
قرار
میدهد، به
جای اینکه
آرشیو را
برای یافتن
فایلهای
شیء مورد
نیاز جستجو
کند. این
گزینه
معمولاً
برای تبدیل
یک فایل
آرشیو به یک
کتابخانه
اشتراکی
استفاده
میشود و
وادار
میکند که
هر شیء در
کتابخانه
اشتراکی
حاصل
گنجانده
شود. این
گزینه
میتواند
بیش از یک
بار
استفاده
شود.
این گزینه در داخل یک جفت گزینه --start-lib/--end-lib مجاز نیست.
دو نکته هنگام استفاده از این گزینه از طریق gcc: نخست، gcc این گزینه را نمیشناسد، بنابراین باید از -Wl,-whole-archive استفاده کنید. دوم، فراموش نکنید که پس از لیست آرشیوهای خود از -Wl,-no-whole-archive استفاده کنید، زیرا gcc لیست آرشیوهای خود را به پیوند شما اضافه میکند و ممکن است نخواهید این پرچم بر آنها نیز تأثیر بگذارد.
- --link-mapless
- پذیرش آرشیوهایی که فاقد نمایه یا نقشه نماد برای تمام آرشیوهای بعدی ذکرشده در خط فرمان هستند. در صورت مفقود بودن، چنین نمایهای به صورت داخلی در لحظه با هزینه عملکردی ساخته میشود. این حالت پیشفرض است.
- --wrap=symbol
- استفاده از
یک تابع
بستهبندیکننده
(wrapper function) برای 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" را فراخوانی خواهد کرد.
تنها ارجاعات تعریفنشده توسط پیونددهنده جایگزین میشوند. بنابراین ارجاعات داخلی واحد ترجمه به 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" و سرآیند قطعه "PT_GNU_EH_FRAME" در ELF.
- --no-ld-generated-unwind-info
- درخواست ایجاد اطلاعات بازپیچی (unwind info) ".eh_frame" برای بخشهای کد تولیدشده توسط پیونددهنده مانند PLT. در صورت پشتیبانی از اطلاعات بازپیچی تولیدشده توسط پیونددهنده، این گزینه به طور پیشفرض روشن است.
- --discard-sframe
- دور ریختن اطلاعات ردگیری پشته ".sframe" از خروجی. این گزینه همچنین ایجاد دادههای ردگیری پشته SFrame را برای بخشهای کد تولیدشده توسط پیونددهنده مانند PLT ممنوع میکند. این گزینه به طور پیشفرض خاموش است.
- --enable-new-dtags
- --disable-new-dtags
- این پیونددهنده میتواند برچسبهای پویای جدید را در ELF ایجاد کند. اما سیستمهای قدیمیتر ELF ممکن است آنها را متوجه نشوند. اگر --enable-new-dtags را مشخص کنید، برچسبهای پویای جدید در صورت نیاز ایجاد میشوند و برچسبهای پویای قدیمی حذف خواهند شد. اگر --disable-new-dtags را مشخص کنید، هیچ برچسب پویای جدیدی ایجاد نمیشود. به طور پیشفرض برچسبهای جدید ایجاد نمیشوند.
- --hash-size=number
- تنظیم اندازه پیشفرض جداول هش پیونددهنده روی یک عدد اول نزدیک به number. افزایش این مقدار میتواند مدت زمان انجام وظایف پیونددهنده را به بهای افزایش نیازهای حافظهای پیونددهنده کاهش دهد. کاهش این مقدار نیز نیاز به حافظه را به بهای کاهش سرعت کم میکند. مقدار پیشفرض در شرایط عادی ۴۰۵۱ و در صورت استفاده از گزینه خط فرمان --reduce-memory-overheads برابر ۱۰۲۱ است.
- --hash-style=style
- تنظیم نوع جدول(های) هش پیونددهنده. style میتواند "sysv" برای بخش کلاسیک ".hash" در ELF، یا "gnu" برای بخش جدید ".gnu.hash" سبک گنو، یا "both" برای هر دو جدول هش باشد. پیشفرض در اکثر سیستمهای مبتنی بر لینوکس "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 یا zstd کنترل
میکنند.
گزینه --compress-debug-sections=none بخشهای اشکالزدایی DWARF را فشرده نمیکند. گزینه --compress-debug-sections=zlib-gnu بخشهای DWARF را فشرده کرده و نام آنها را طوری تغییر میدهد که به جای .debug با .zdebug شروع شوند. گزینه --compress-debug-sections=zlib-gabi نیز بخشهای DWARF را فشرده میکند اما به جای تغییر نام، پرچم SHF_COMPRESSED را در سرآیند بخشها تنظیم مینماید.
گزینه --compress-debug-sections=zlib نام مستعاری برای --compress-debug-sections=zlib-gabi است.
گزینه --compress-debug-sections=zstd بخشهای اشکالزدایی DWARF را با استفاده از zstd فشرده میکند.
این گزینه هرگونه فشردهسازی در بخشهای اشکالزدایی ورودی را لغو میکند.
- --reduce-memory-overheads
- این گزینه
نیازهای
حافظه در
زمان اجرای
ld را به بهای
سرعت پیوند
کاهش
میدهد. این
گزینه برای
انتخاب
الگوریتم
قدیمی O(n^2) جهت
تولید فایل
نقشه پیوند
به جای
الگوریتم
جدید O(n) (که
حدود ۴۰
درصد حافظه
بیشتری
برای
ذخیرهسازی
نمادها
مصرف
میکند)
معرفی شد.
اثر دیگر این سوییچ تنظیم اندازه پیشفرض جدول هش روی ۱۰۲۱ است که باز هم به بهای طولانیتر شدن زمان اجرای پیونددهنده در مصرف حافظه صرفهجویی میکند.
- --max-cache-size=size
- برنامه ld معمولاً اطلاعات بازنشانی و جداول نمادهای فایلهای ورودی را در حافظه با اندازه نامحدود کش میکند. این گزینه حداکثر اندازه کش را روی size تنظیم میکند. اگر از گزینه خط فرمان --no-keep-memory استفاده شده باشد، پیونددهنده طوری عمل میکند که گویی حداکثر اندازه کش روی ۰ تنظیم شده است، یعنی چیزی حفظ نمیشود.
- --build-id
- --build-id=style
- درخواست
ایجاد یک
بخش
یادداشت ELF
به نام
".note.gnu.build-id" یا
یک بخش COFF به
نام ".buildid".
محتویات
این
یادداشت
بیتهای
یکتایی
هستند که
این فایل
پیوندیافته
را مشخص
میکنند.
پارامتر style
میتواند
"uuid" (برای
استفاده از
۱۲۸ بیت
تصادفی)،
"sha1" (برای
استفاده از
هش ۱۶۰ بیتی
SHA1)، "md5"
(برای
استفاده از
هش ۱۲۸ بیتی
MD5)، یا "xx"
(برای
استفاده از
هش ۱۲۸ بیتی
XXHASH بر روی
بخشهای
هنجاری
خروجی)، یا
"0xhexstring"
(برای
استفاده از
رشته بیتی
دلخواه
مشخصشده
با تعداد
زوجی از
ارقام
هگزادسیمال)
باشد. اگر style
حذف شود، از
"sha1"
استفاده
میشود.
سبکهای "md5"، "sha1" و "xx" شناسهای تولید میکنند که در یک فایل خروجی همسان همواره یکسان است، اما تقریباً به طور قطع در میان تمام فایلهای خروجی غیرهمسان یکتا خواهد بود.
ارسال "none" برای style تنظیمات حاصل از گزینههای قبلی "--build-id" را غیرفعال میکند.
- --package-metadata=JSON
- درخواست ایجاد یک بخش یادداشت ELF به نام ".note.package". محتویات این یادداشت مطابق با مشخصات متادیتای بسته در قالب JSON است. برای اطلاعات بیشتر ببینید: https://systemd.io/ELF_PACKAGE_METADATA
پیونددهنده PE از گزینه -shared پشتیبانی میکند که باعث میشود خروجی به جای یک فایل اجرایی معمولی، یک کتابخانه با پیوند پویا (DLL) باشد. هنگام استفاده از این گزینه باید نام خروجی را "*.dll" بگذارید. علاوه بر این، پیونددهنده به طور کامل از فایلهای استاندارد "*.def" پشتیبانی میکند که میتوانند در خط فرمان مانند یک فایل شیء مشخص شوند.
علاوه بر گزینههای مشترک برای همه اهداف، پیونددهنده PE از گزینههای خط فرمان اضافی مختص به هدف PE پشتیبانی میکند. گزینههای دارای مقدار میتوانند با فاصله یا علامت مساوی از مقادیر خود جدا شوند.
- --add-stdcall-alias
- در صورت تعیین، نمادهای دارای پسوند stdcall (@nn) به همان صورت موجود و همچنین با پسوند حذفشده صادر خواهند شد. [این گزینه مختص به اهداف PE پیونددهنده است]
- --base-file file
- استفاده از file به عنوان نام فایلی برای ذخیره آدرسهای پایه تمام بازنشانیهای مورد نیاز جهت تولید DLL با dlltool. [این گزینه مختص به اهداف PE پیونددهنده است]
- --dll
- ایجاد یک DLL به جای یک فایل اجرایی معمولی. همچنین میتوانید از -shared استفاده کرده یا یک "LIBRARY" در فایل ".def" مشخص کنید. [این گزینه مختص به اهداف PE پیونددهنده است]
- --enable-long-section-names
- --disable-long-section-names
- انواع PE از قالب شیء COFF افزونهای اضافه میکنند که استفاده از نامهای بخش طولانیتر از هشت کاراکتر (محدودیت عادی COFF) را مجاز میسازد. به طور پیشفرض، این نامها فقط در فایلهای شیء مجاز هستند. به عنوان یک افزونه گنو، میتوان با استفاده از این دو گزینه اجازه استفاده از آنها را در تصاویر اجرایی نیز صادر کرد یا در فایلهای شیء غیرمجاز ساخت. [این گزینه مختص به اهداف PE پیونددهنده است]
- --enable-stdcall-fixup
- --disable-stdcall-fixup
- اگر پیوند با نمادی مواجه شود که نتواند آن را حل کند، با جستجوی نماد تعریفشده دیگری که فقط در قالب نام نماد تفاوت دارد (cdecl در برابر stdcall)، تلاش به «پیوند فازی» (fuzzy linking) میکند و نماد را با پیوند به تطابق پیدا شده حل مینماید. اگر --enable-stdcall-fixup را مشخص کنید این ویژگی فعال است و هشداری چاپ نمیشود. اگر --disable-stdcall-fixup را مشخص کنید این ویژگی غیرفعال است و چنین عدم تطابقهایی خطا محسوب میشوند. [این گزینه مختص به اهداف PE پیونددهنده است]
- --leading-underscore
- --no-leading-underscore
- برای بیشتر اهداف پیشوند نماد پیشفرض یک زیرخط (underscore) است. با این گزینه میتوان پیشوند زیرخط پیشفرض را غیرفعال یا فعال کرد. [این گزینه مختص به اهداف PE پیونددهنده است]
- --export-all-symbols
- در صورت تعیین، تمام نمادهای سراسری موجود در اشیای استفادهشده برای ساخت یک DLL صادر خواهند شد. توجه داشته باشید که اگر نماد صادرشده دیگری وجود نداشته باشد، این حالت پیشفرض است. [این گزینه مختص به اهداف PE پیونددهنده است]
- --exclude-symbols symbol,symbol,...
- تعیین فهرستی از نمادها که نباید به طور خودکار صادر شوند. نام نمادها میتواند با کاما یا دونقطه از یکدیگر جدا شود. [این گزینه مختص به اهداف PE پیونددهنده است]
- --exclude-all-symbols
- مشخص میکند که هیچ نمادی نباید به طور خودکار صادر شود. [این گزینه مختص به اهداف PE پیونددهنده است]
- --file-alignment
- تعیین تراز فایل. بخشها در فایل همواره در آفستهای فایلی که مضاربی از این عدد هستند آغاز میشوند. پیشفرض ۵۱۲ است. [این گزینه مختص به اهداف PE پیونددهنده است]
- --heap reserve
- --heap reserve,commit
- تعیین تعداد بایتهای حافظه برای رزرو (و به صورت اختیاری متعهد کردن یا commit) جهت استفاده به عنوان هیپ (heap) برای این برنامه. پیشفرض ۱ مگابایت رزرو و ۴ کیلوبایت متعهد است. [این گزینه مختص به اهداف PE پیونددهنده است]
- --kill-at
- در صورت تعیین، پسوندهای stdcall (@nn) قبل از صدور نمادها حذف خواهند شد. [این گزینه مختص به اهداف PE پیونددهنده است]
- --large-address-aware
- در صورت تعیین، بیت مربوطه در فیلد "Characteristics" در سرآیند COFF تنظیم میشود تا نشان دهد این باینری اجرایی از آدرسهای مجازی بزرگتر از ۲ گیگابایت پشتیبانی میکند. [این گزینه مختص به هدف i386 PE پیونددهنده است]
- --disable-large-address-aware
- اثر گزینه قبلی --large-address-aware را لغو میکند. [این گزینه مختص به هدف i386 PE پیونددهنده است]
- --major-image-version value
- تنظیم شماره اصلی (major) نسخه تصویر ("image version"). پیشفرض ۱ است. [این گزینه مختص به اهداف PE پیونددهنده است]
- --major-os-version value
- تنظیم شماره اصلی نسخه سیستمعامل. پیشفرض ۴ است. [این گزینه مختص به اهداف PE پیونددهنده است]
- --major-subsystem-version value
- تنظیم شماره اصلی نسخه زیرسیستم. پیشفرض ۴ است. [این گزینه مختص به اهداف PE پیونددهنده است]
- --minor-image-version value
- تنظیم شماره فرعی (minor) نسخه تصویر. پیشفرض ۰ است. [این گزینه مختص به اهداف PE پیونددهنده است]
- --minor-os-version value
- تنظیم شماره فرعی نسخه سیستمعامل. پیشفرض ۰ است. [این گزینه مختص به اهداف PE پیونددهنده است]
- --minor-subsystem-version value
- تنظیم شماره فرعی نسخه زیرسیستم. پیشفرض ۰ است. [این گزینه مختص به اهداف PE پیونددهنده است]
- --output-def file
- پیونددهنده فایل file را ایجاد خواهد کرد که حاوی یک فایل DEF متناظر با DLL در حال تولید توسط پیونددهنده است. این فایل DEF (که باید "*.def" نامیده شود) میتواند برای ایجاد یک کتابخانه وارداتی با "dlltool" استفاده شود. [این گزینه مختص به اهداف PE پیونددهنده است]
- --enable-auto-image-base
- --enable-auto-image-base=value
- انتخاب خودکار آدرس پایه تصویر برای DLLها، به طور اختیاری با شروع از مقدار پایه value، مگر اینکه با آرگومان "--image-base" مشخص شده باشد. [این گزینه مختص به اهداف PE پیونددهنده است]
- --disable-auto-image-base
- عدم تولید خودکار یک آدرس پایه تصویر یکتا. اگر آدرس پایهای توسط کاربر تعیین نشده باشد، از پیشفرض بستر استفاده میشود. [این گزینه مختص به اهداف PE پیونددهنده است]
- --dll-search-prefix string
- هنگام پیوند پویا به یک dll بدون کتابخانه وارداتی، جستجوی "<string><basename>.dll" در اولویت نسبت به "lib<basename>.dll" قرار میگیرد. [این گزینه مختص به اهداف PE پیونددهنده است]
- --enable-auto-import
- انجام
پیوند
هوشمندانه
"_symbol" به
"__imp__symbol"
برای
واردات DATA از
DLLها، و در
نتیجه
امکان دور
زدن
سازوکار dllimport
در سمت
کاربر و
ارجاع به
نامهای
نمادهای
نامتقارن.
[این گزینه
مختص به
اهداف PE
پیونددهنده
است]
(مثالها و توضیحات تکمیلی پیرامون رفع خطای آدرسدهی با آفست ثابت در کدهای ++C/C):
extern type extern_array[]; extern_array[1] --> { volatile type *t=extern_array; t[1] }یا:
extern struct s extern_struct; extern_struct.field --> { volatile struct s *t=&extern_struct; t->field } - --disable-auto-import
- عدم تلاش برای انجام پیوند هوشمندانه "_symbol" به "__imp__symbol" برای واردات DATA از DLLها. [این گزینه مختص به اهداف PE پیونددهنده است]
- --enable-runtime-pseudo-reloc
- اگر کد شما حاوی عبارات توصیفشده در بخش --enable-auto-import باشد، این سوییچ برداری از «شبهبازنشانیهای زمان اجرا» ایجاد میکند که میتواند توسط محیط زمان اجرا برای تنظیم ارجاعات به چنین دادههایی در کد کلاینت استفاده شود. [این گزینه مختص به اهداف PE پیونددهنده است]
- --disable-runtime-pseudo-reloc
- عدم ایجاد شبهبازنشانیها برای واردات DATA با آفست غیرصفر از DLLها. [این گزینه مختص به اهداف PE پیونددهنده است]
- --enable-extra-pe-debug
- نمایش اطلاعات اشکالزدایی اضافی مرتبط با thunking نمادهای واردات خودکار. [این گزینه مختص به اهداف PE پیونددهنده است]
- --section-alignment
- تنظیم تراز بخشها. بخشها در حافظه همواره در آدرسهایی که مضربی از این عدد باشند آغاز خواهند شد. پیشفرض 0x1000 است. [این گزینه مختص به اهداف PE پیونددهنده است]
- --stack reserve
- --stack reserve,commit
- تعیین تعداد بایتهای حافظه برای رزرو (و به صورت اختیاری متعهد کردن یا commit) جهت استفاده به عنوان پشته (stack) برای این برنامه. پیشفرض ۲ مگابایت رزرو و ۴ کیلوبایت متعهد است. [این گزینه مختص به اهداف PE پیونددهنده است]
- --subsystem which
- --subsystem which:major
- --subsystem which:major.minor
- مشخص کردن
زیرسیستمی
که برنامه
شما تحت آن
اجرا خواهد
شد. مقادیر
مجاز برای
which عبارتند
از "native"،
"windows"،
"console"،
"posix" و
"xbox".
همچنین
میتوانید
نسخه
زیرسیستم
را به صورت
اختیاری
تنظیم کنید.
مقادیر
عددی نیز
برای which
پذیرفته
میشوند.
[این گزینه
مختص به
اهداف PE
پیونددهنده
است]
گزینههای زیر پرچمهایی را در فیلد "DllCharacteristics" از سرآیند فایل PE تنظیم میکنند: [این گزینهها مختص به اهداف PE پیونددهنده هستند]
- --high-entropy-va
- --disable-high-entropy-va
- تصویر با
تصادفیسازی
چیدمان
فضای آدرس
۶۴ بیتی (ASLR)
سازگار است.
این گزینه
برای
تصاویر ۶۴
بیتی PE در
اهداف MinGW به
طور
پیشفرض
فعال است.
این گزینه همچنین مستلزم --dynamicbase و --enable-reloc-section است. [این گزینه مختص به نسخههای ۶۴ بیتی PE پیونددهنده است]
- --dynamicbase
- --disable-dynamicbase
- آدرس پایه تصویر ممکن است با استفاده از تصادفیسازی چیدمان فضای آدرس (ASLR) جابهجا شود. این گزینه به طور پیشفرض برای اهداف MinGW فعال است. همچنین مستلزم --enable-reloc-section است.
- --forceinteg
- --disable-forceinteg
- بررسیهای صحت کد اجباری میشوند. به طور پیشفرض غیرفعال است.
- --nxcompat
- --disable-nxcompat
- تصویر با ویژگی پیشگیری از اجرای دادهها (DEP) سازگار است. این گزینه برای اهداف MinGW به طور پیشفرض فعال است.
- --no-isolation
- --disable-no-isolation
- اگرچه تصویر جداسازی (isolation) را متوجه میشود، تصویر را جدا نکنید. به طور پیشفرض غیرفعال است.
- --no-seh
- --disable-no-seh
- تصویر از SEH استفاده نمیکند. هیچ گرداننده SEH از این تصویر فراخوانی نمیشود. به طور پیشفرض غیرفعال است.
- --no-bind
- --disable-no-bind
- این تصویر را مقید (bind) نکنید. به طور پیشفرض غیرفعال است.
- --wdmdriver
- --disable-wdmdriver
- درایور از مدل درایور مایکروسافت ویندوز (WDM) استفاده میکند. به طور پیشفرض غیرفعال است.
- --tsaware
- --disable-tsaware
- تصویر نسبت به سرور ترمینال (Terminal Server) آگاه است. به طور پیشفرض غیرفعال است.
- --insert-timestamp
- --no-insert-timestamp
- درج برچسب
زمانی
واقعی در
تصویر. این
رفتار
پیشفرض
است. گزینه
--no-insert-timestamp
میتواند
برای درج
مقدار صفر
برای برچسب
زمانی
استفاده
شود تا
اطمینان
حاصل گردد
که
باینریهای
تولیدشده
از
سورسهای
یکسان
مقایسهای
یکسان
خواهند
داشت.
اگر --insert-timestamp فعال باشد، زمان درجشده یا زمان انجام پیوند است یا در صورتی که متغیر محیطی "SOURCE_DATE_EPOCH" تعریف شده باشد، تعداد ثانیههای گذشته از مبدأ زمان یونیکس خواهد بود.
- --enable-reloc-section
- --disable-reloc-section
- ایجاد جدول بازنشانی پایه، که در صورتی که تصویر در یک پایه تصویر متفاوتی از آنچه در سرآیند PE مشخص شده بارگذاری شود لازم است. این گزینه به طور پیشفرض فعال است.
هدف C6X uClinux از یک قالب باینری به نام DSBT برای پشتیبانی از کتابخانههای اشتراکی استفاده میکند. هر کتابخانه اشتراکی در سیستم باید دارای نمایه یکتایی باشد؛ تمام فایلهای اجرایی از نمایه ۰ استفاده میکنند.
- --dsbt-size size
- تنظیم تعداد مدخلها در DSBT فایل اجرایی یا کتابخانه اشتراکی فعلی روی size. پیشفرض ایجاد جدولی با ۶۴ مدخل است.
- --dsbt-index index
- تنظیم
نمایه DSBT
فایل
اجرایی یا
کتابخانه
اشتراکی
فعلی روی index.
پیشفرض ۰
است که برای
تولید
فایلهای
اجرایی
مناسب است.
سوییچ --no-merge-exidx-entries ادغام مدخلهای مجاور exidx را در اطلاعات بازپیچی فریم غیرفعال میکند.
- --branch-stub
- فعال کردن ریلکسیشن انشعاب پیونددهنده با درج بخشهای استاب انشعاب در صورت نیاز به گسترش محدوده انشعابات. این گزینه معمولاً مورد نیاز نیست زیرا C-SKY از دستورالعملهای انشعاب و فراخوانی که به کل محدوده حافظه دسترسی دارند پشتیبانی میکند.
- --stub-group-size=N
- امکان کنترل دقیقتر بر ایجاد استاب انشعاب پیونددهنده. حداکثر اندازه گروهی از بخشهای ورودی را که میتوانند توسط یک بخش استاب مدیریت شوند روی N تنظیم میکند.
پیونددهندههای 68HC11 و 68HC12 از گزینههای خاصی برای کنترل نگاشت تعویض بانک حافظه و تولید کد ترامپولین پشتیبانی میکنند.
- --no-trampoline
- غیرفعال کردن تولید ترامپولین. به طور پیشفرض یک ترامپولین برای هر تابع دور که با استفاده از دستور "jsr" فراخوانی میشود تولید میگردد.
- --bank-window name
- نام ناحیه حافظه در مشخصات MEMORY که پنجره بانک حافظه را توصیف میکند به پیونددهنده نشان میدهد.
گزینههای زیر برای کنترل مدیریت تولید GOT هنگام پیوند برای اهداف 68K پشتیبانی میشوند.
- --got=type
- مشخص کردن طرح تولید GOT برای استفاده توسط پیونددهنده. مقدار type باید یکی از موارد single، negative، multigot یا target باشد. برای اطلاعات بیشتر به مدخل Info برای ld مراجعه کنید.
گزینههای زیر برای کنترل تولید دستورالعملهای microMIPS و بررسیهای بازنشانی انشعاب برای گذارهای حالت ISA هنگام پیوند برای اهداف MIPS پشتیبانی میشوند.
- --insn32
- --no-insn32
- این گزینهها انتخاب دستورالعملهای microMIPS مورد استفاده در کدهای تولیدشده توسط پیونددهنده (مانند PLT) را کنترل میکنند. اگر --insn32 استفاده شود، پیونددهنده تنها از کدگذاریهای دستورالعمل ۳۲ بیتی استفاده میکند.
- --ignore-branch-isa
- --no-ignore-branch-isa
- این گزینهها بررسیهای بازنشانی انشعاب برای گذارهای نامعتبر حالت ISA را کنترل میکنند.
- --compact-branches
- --no-compact-branches
- این گزینهها تولید دستورالعملهای فشرده توسط پیونددهنده را در مدخلهای PLT برای MIPS R6 کنترل میکنند.
برای هدف pdp11-aout، سه نوع از قالب خروجی را میتوان با گزینههای زیر انتخاب کرد. نوع پیشفرض برای pdp11-aout گزینه --omagic است، در حالی که برای سایر اهداف --nmagic پیشفرض است. گزینه --imagic تنها برای هدف pdp11-aout تعریف شده است.
- -N
- --omagic
- علامتگذاری خروجی به عنوان "OMAGIC" (0407) در سرآیند a.out تا نشان دهد که قطعه text نباید در برابر نوشتن محافظت شود و به اشتراک گذاشته شود. از آنجا که هر دو بخش text و data قابل خواندن و نوشتن هستند، بخش data بلافاصله پس از قطعه text تخصیص داده میشود. این قدیمیترین قالب برای برنامههای اجرایی PDP11 است.
- -n
- --nmagic
- علامتگذاری خروجی به عنوان "NMAGIC" (0410) در سرآیند a.out تا نشان دهد که در هنگام اجرای فایل خروجی، بخش text فقطخواندنی و میان تمام فرآیندهایی که همان فایل را اجرا میکنند قابل اشتراک خواهد بود. این شامل انتقال نواحی داده به اولین مرز صفحه ۸ کیلوبایتی ممکن پس از پایان text است. این گزینه قالب pure executable ایجاد میکند.
- -z
- --imagic
- علامتگذاری خروجی به عنوان "IMAGIC" (0411) در سرآیند a.out تا نشان دهد که در هنگام اجرای فایل خروجی، نواحی text و data برنامه با استفاده از ویژگی فضای داده و دستورالعمل مجزا در واحد مدیریت حافظه مدلهای بزرگتر PDP11 در فضاهای آدرس جداگانه بارگذاری خواهند شد. این کار فضای آدرس در دسترس برنامه را دو برابر میکند. قطعه text مجدداً محض، محافظتشده در برابر نوشتن و قابلاشتراک است. این گزینه یک قالب separate executable ایجاد میکند.
- --no-omagic
- معادل --nmagic برای pdp11-aout.
محیط (ENVIRONMENT)
میتوانید رفتار ld را با متغیرهای محیطی "GNUTARGET"، "LDEMULATION" و "COLLECT_NO_DEMANGLE" تغییر دهید.
متغیر "GNUTARGET" قالب شیء فایل ورودی را در صورتی که از -b (یا مترادف آن --format) استفاده نکنید، تعیین میکند. مقدار آن باید یکی از نامهای BFD برای یک قالب ورودی باشد. اگر "GNUTARGET" در محیط وجود نداشته باشد، ld از قالب طبیعی هدف استفاده میکند. اگر "GNUTARGET" روی "default" تنظیم شده باشد، BFD تلاش میکند قالب ورودی را با بررسی فایلهای باینری ورودی کشف کند؛ این روش معمولاً موفق میشود، اما ابهامات بالقوهای وجود دارد، زیرا هیچ روشی برای اطمینان از یکتا بودن عدد جادویی استفادهشده برای تعیین قالبهای فایل شیء وجود ندارد. با این حال، رویه پیکربندی برای BFD در هر سیستم، قالب سنتی آن سیستم را در ابتدای لیست جستجو قرار میدهد، بنابراین ابهامات به نفع شیوه سنتی حل میشوند.
متغیر "LDEMULATION" شبیهسازی پیشفرض را در صورتی که از گزینه -m استفاده نکنید تعیین میکند. شبیهسازی میتواند جنبههای مختلفی از رفتار پیونددهنده، به ویژه اسکریپت پیشفرض پیونددهنده را تحت تأثیر قرار دهد. میتوانید شبیهسازیهای موجود را با گزینههای --verbose یا -V فهرست کنید. اگر گزینه -m استفاده نشود و متغیر محیطی "LDEMULATION" تعریف نشده باشد، شبیهسازی پیشفرض به نحوه پیکربندی پیونددهنده بستگی خواهد داشت.
به طور معمول، پیونددهنده به صورت پیشفرض نام نمادها را ناهموارزدایی (demangle) میکند. اما اگر متغیر "COLLECT_NO_DEMANGLE" در محیط تنظیم شده باشد، پیشفرض عدم ناهموارزدایی نمادها خواهد بود. این متغیر محیطی به شیوه مشابهی توسط برنامه لفاف پیونددهنده "gcc" استفاده میشود. حالت پیشفرض میتواند توسط گزینههای --demangle و --no-demangle باطل شود.
اگر گزینه مختص PE/COFF یعنی --insert-timestamp فعال باشد و متغیر محیطی SOURCE_DATE_EPOCH تعریف شده باشد، مقدار برچسب زمانی در این متغیر به جای زمان جاری در سرآیند COFF درج خواهد شد.
اگر متغیر محیطی "LD_STATS" تعریف شده باشد، اطلاعات مصرف منابع پیونددهنده ثبت خواهد شد، درست مانند اینکه از گزینه --stats استفاده شده باشد. اگر متغیر "LD_STATS" دارای مقدار رشتهای باشد، از آن به عنوان نام فایلی که اطلاعات باید در آن ذخیره شوند استفاده خواهد شد؛ در غیر این صورت اطلاعات به جریان خروجی استاندارد ارسال میگردد.
همچنین ببینید (SEE ALSO)
ar(1)، nm(1)، objcopy(1)، objdump(1)، readelf(1) و مدخلهای Info برای binutils و ld.
کپیرایت (COPYRIGHT)
کپیرایت © 1991-2026 بنیاد نرمافزار آزاد (Free Software Foundation, Inc.)
مجوز کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نسخه ۱.۳ یا هر نسخه بعدی منتشرشده توسط بنیاد نرمافزار آزاد اعطا میشود؛ بدون بخشهای تغییرناپذیر، بدون متون روی جلد، و بدون متون پشت جلد. یک نسخه از این مجوز در بخش با عنوان «GNU Free Documentation License» گنجانده شده است.
| 2026-07-26 | binutils-2.47 |