لینوکس / یونیکس فرمان: شناسه

نام

ld - استفاده از LD ، لینک دهنده گنو

خلاصه

ld [ گزینه ] objfile ...

شرح

ld ترکیبی از تعدادی از شی ها و فایل های آرشیو، داده های خود را نقل مکان می کند و مراجع نمادین را پیوند می دهد. معمولا آخرین گام در کامپایل یک برنامه، اجرای ld است .

ld قبول فایل های فرمان زبان لینکر نوشته شده در یک superset از AT & T لینک ویرایشگر فرمان زبان نحو، برای ارائه کنترل صریح و کامل بر روند پیوند.

صفحه man این زبان فرمان را توصیف نمی کند؛ ورودی ld را در "info" یا کتابچه راهنمای ld: linker GNU مشاهده کنید ، برای جزئیات کامل در مورد زبان فرمان و سایر جنبه های linker GNU.

این نسخه از ld از کتابخانه های عمومی BFD برای کار در فایل های شیء استفاده می کند. این اجازه می دهد تا ld به خواندن، ترکیب و نوشتن پرونده های شی در بسیاری از فرمت های مختلف - مثلا COFF یا "a.out". فرمت های مختلف ممکن است با هم مرتبط شوند تا هرگونه نوع فایل موجود را تولید کنند.

به غیر از انعطاف پذیری آن، لینک دهنده گنو مفیدتر از سایر لینکرها در ارائه اطلاعات تشخیصی است. بسیاری از لینکرها بلافاصله پس از برخورد با یک خطا رها می شوند؛ هر زمان که امکان دارد، ld همچنان اجرا می شود، به شما این امکان را می دهد که خطاهای دیگر (و یا در بعضی موارد برای دریافت یک فایل خروجی به رغم خطا) را شناسایی کنید.

لینوکس GNU به معنای پوشش دادن طیف وسیعی از موقعیتهاست و به همان اندازه که ممکن است با سایر لینکرها سازگار باشد. در نتیجه شما گزینه های زیادی برای کنترل رفتار خود دارید.

گزینه ها

لینکر از فراخوانی گزینه های خط فرمان پشتیبانی می کند، اما در عمل واقعی تعداد کمی از آنها در هر زمینه خاص مورد استفاده قرار می گیرند. به عنوان مثال، استفاده مکرر از ld این است که لینک استاندارد یونیکس شیء را بر روی یک استاندارد، پشتیبانی از سیستم یونیکس . در چنین سیستمی، برای پیوند یک فایل "hello.o":

ld -o <خروجی> /lib/crt0.o hello.o -lc

این به ld می گوید برای تولید فایل به نام خروجی به عنوان نتیجه پیوند فایل "/lib/crt0.o" با "hello.o" و کتابخانه "libc.a"، که از دایرکتوری های جستجوی استاندارد آمده است. (بحث در مورد گزینه -l زیر را ببینید.)

برخی از گزینه های خط فرمان برای ld ممکن است در هر نقطه ای از خط فرمان مشخص شود. با این حال، گزینه هایی که به پرونده ها اشاره دارند، مانند -l یا -T ، فایل را در نقطه ای که گزینه در خط فرمان به نظر می رسد نسبت به فایل های شی و سایر گزینه های فایل خوانده می شود. تکرار گزینه های غیر فایلی با یک استدلال متفاوت دیگر تاثیری نخواهد داشت و یا رویدادهای قبلی (که بیشتر به سمت چپ در خط فرمان) است، از آن گزینه منع می شود. گزینه هایی که ممکن است به طور معنی دار بیش از یک بار مشخص شود در شرح زیر ذکر شده است.

استدلال های غیر گزینه عبارتند از فایل های شی یا بایگانی که باید با یکدیگر مرتبط شوند. آنها ممکن است با گزینه های خط فرمان پیروی کنند، پیش از آن یا مخلوط شوند، مگر اینکه یک آرگومان فایل شیء بین گزینه و بحث آن قرار نگیرد.

معمولا لینکر با حداقل یک فایل شیء فراخوانی می شود، اما شما می توانید اشکال دیگری از فایل های ورودی باینری را با استفاده از -l ، -R ، و زبان فرمان اسکریپت مشخص کنید. اگر هیچ فایل ورودی باینری مشخص نشده باشد، لینکر هیچ خروجی تولید نمی کند و پیام را بدون فید ورودی مسدود می کند .

اگر لینکر نمیتواند فرمت یک فایل شیء را تشخیص دهد، فرض بر این است که یک اسکریپت لینکر است. یک اسکریپت مشخص شده در این روش اسکریپت اصلی لینکر استفاده شده برای پیوند (یا اسکریپت لینک دهنده پیش فرض یا یک مشخص شده با استفاده از -T ) را تقویت می کند. این ویژگی لینک دهنده را قادر می سازد تا در برابر یک فایل که به نظر می رسد یک شی یا یک آرشیو است، لینک شود، اما در واقع فقط برخی از مقادیر نمادین را تعریف می کند، یا از "INPUT" یا "GROUP" برای بارگذاری اشیاء دیگر استفاده می کند. توجه داشته باشید که مشخص کردن یک اسکریپت به این شیوه صرفا اسکریپت لینکر اصلی را تقویت می کند؛ از گزینه -T برای جایگزینی اسکریپت لینک پیش فرض به طور کامل استفاده کنید.

برای گزینه هایی که اسمشان یک حرف است، استدلال گزینه باید یا گزینه ای را بدون دخالت فضای سفید دنبال کند یا به عنوان استدلال جداگانه بلافاصله پس از گزینه ای که به آنها نیاز دارد، داده شود.

برای گزینه هایی که اسم چند حرف هستند، هر دو تیک یا دو می توانند از نام گزینه استفاده کنند. به عنوان مثال، -trace-symbol و --trace-symbol معادل هستند. توجه - یک استثنا در این قانون وجود دارد. گزینه های چندگانه ای که با حروف کوچک "o" شروع می شود تنها می تواند توسط دو خط تیره پیش برود. این برای کاهش سردرگمی با گزینه -o است . بنابراین برای مثال magic مجموعه ای از نام فایل خروجی به جادو می دهد در حالی که magic مجموعه ای از پرچم NMAGIC در خروجی است.

Arguments to گزینه های چند جمله ای باید از نام گزینه با علامت برابر شود، یا به عنوان استدلال جداگانه بلافاصله پس از گزینه ای که برای آنها نیاز است، داده شود. برای مثال، trace-symbol foo و --trace-symbol = foo معادل هستند. اختصارات منحصر به فرد از نام گزینه های چندگانه پذیرفته شده است.

توجه داشته باشید - اگر لینکر به طور غیرمستقیم توسط یک راننده کامپایلر (به عنوان مثال gcc ) مورد استفاده قرار گیرد، تمام گزینه های خط فرمان linker باید توسط -Wl پیشوند (یا هر چیز دیگری برای راننده کامپایل خاص) مناسب باشد:

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

این مهم است، زیرا در غیر این صورت، برنامه راننده کامپایلنت ممکن است گزینه های لینکر را به طور صریح کاهش دهد و باعث ایجاد یک پیوند بد شود.

در اینجا یک جدول از کلیدهای کلی خط فرمان پذیرفته شده توسط لینوکس گنو است:

کلمه کلیدی

این گزینه برای سازگاری HP / UX پشتیبانی می شود. آرگومان کلمه کلیدی باید یکی از آرشیو رشته ها ، به اشتراک گذاشته شده یا پیش فرض باشد. -archive به طور عملی معادل با -static است ، و دو کلمه کلیدی دیگر به لحاظ عملکردی برابر با -dynamic هستند . این گزینه ممکن است از هر تعداد بار استفاده شود.

- یک معماری

- معماری = معماری

در نسخه فعلی ld ، این گزینه تنها برای خانواده معماری Intel 960 مفید است. در آن پیکربندی ld ، استدلال معماری معماری خاصی را در خانواده 960 شناسایی می کند و برخی از حفاظت ها را تغییر می دهد و مسیر جستجوی آرشیو را تغییر می دهد.

انتشار های آینده از LD ممکن است از قابلیت های مشابه برای خانواده های معماری دیگر پشتیبانی کند.

-b ورودی فرمت

--format = ورودی فرمت

ld ممکن است پیکربندی شده برای پشتیبانی از بیش از یک نوع فایل شی. اگر ld شما با این روش پیکربندی شده است، می توانید از گزینه -b برای مشخص کردن فرمت باینری برای فایل های شیء ورودی که این گزینه را در خط فرمان دنبال می کنید استفاده کنید. حتی هنگامی که ld پیکربندی شده برای پشتیبانی از فرمت های شیء جایگزین، شما معمولا نمی خواهید این را مشخص کنید، چرا که ld باید پیکربندی شود که به عنوان فرمت ورودی پیش فرض معمول ترین فرمت در هر دستگاه باشد. ورودی فرمت یک رشته متن است، نام فرمت خاصی که توسط کتابخانه های BFD پشتیبانی می شود. (شما می توانید فرمت های دودویی موجود را با objdump -i لیست کنید)

شما ممکن است بخواهید از این گزینه استفاده کنید اگر فایل ها با یک فرمت دودویی غیر معمول ایجاد می شود. شما همچنین می توانید با استفاده از b -input-format قبل از هر گروه از فایل های شی در یک فرمت خاص، بطور صریح (هنگام اتصال فایل های شیء از فرمت های مختلف)، بطور صریح (هنگام اتصال فایل های شیء از فرمت های مختلف) استفاده کنید.

فرمت پیش فرض از متغیر محیطی "GNUTARGET" گرفته شده است.

شما همچنین می توانید فرمت ورودی از یک اسکریپت را با استفاده از فرمان "TARGET" تعریف کنید.

-c فرماندهی MRI

--mri-script = MRI-commandfile

برای سازگاری با لینکرهای تولید شده توسط MRI، Ld فایلهای اسکریپتی را که در زبان فرمان متناوب، محدود شده است، در قسمت های فایل اسکریپت سازگار MRI در اسناد GNU ld قابل قبول است. معرفی فایل های اسکریپت MRI با گزینه -c ؛ از گزینه -T برای اجرای اسکریپت های لینکر نوشته شده در زبان اسکریپتی عمومی LD استفاده کنید. اگر MRI-cmdfile وجود نداشته باشد، ld آن را در دایرکتوری های مشخص شده توسط گزینه های -L جستجو می کند.

-d

-dc

-dp

این سه گزینه معادل هستند؛ فرم های متعدد برای سازگاری با دیگر لینک ها پشتیبانی می شوند. آنها فضای علامت های مشترک را حتی اگر یک فایل خروجی متحرک مشخص شده اند (با -r ) تعیین می کنند. فرمان اسکریپت "FORCE_COMMON_ALLOCATION" اثر مشابهی دارد.

ورودی

--enter = ورود

استفاده از ورود به عنوان نماد صریح برای شروع اجرای برنامه، به جای نقطه ورود پیش فرض. اگر هیچ سمتی به نام ورودی وجود نداشته باشد، لینکر سعی خواهد کرد پارامتر ورودی به عنوان یک عدد را داشته باشد و از آن به عنوان آدرس ورودی استفاده کند (شماره در پایه 10 تفسیر خواهد شد؛ شما ممکن است از 0x پیش فرض برای پایه 16 استفاده کنید یا یک پیشوند 0 برای پایه 8).

-E

- صادرات پویا

هنگام ایجاد یک اجرایی مرتبط به صورت پویا، تمام نمادها را به جدول نمادین پویا اضافه کنید. جدول نماد پویا مجموعه ای از نمادها است که از اشیاء پویا در زمان اجرا قابل مشاهده است.

اگر از این گزینه استفاده نکنید، جدول نماد پویا به طور معمول فقط شامل آن نمادهای است که توسط بعضی از شیء پویا اشاره شده در لینک اشاره دارد.

اگر از "dlopen" برای بارگذاری یک شیء پویا استفاده کنید که باید به نمادها تعریف شده توسط برنامه مراجعه کند، به جای اینکه شیء پویای دیگری باشد، احتمالا باید هنگام استفاده از پیوند برنامه خود از این گزینه استفاده کنید.

شما همچنین می توانید از اسکریپت نسخه برای کنترل آنچه نمادها باید به جدول نماد پویا اضافه کنید اگر فرمت خروجی آن را پشتیبانی می کند استفاده کنید. توصیف --version-script را در @ ref {VERSION} مشاهده کنید.

-EB

لینک اشیاء بزرگ اندی این بر فرمت خروجی پیش فرض تاثیر می گذارد.

-EL

پیوندهای اشیاء کمی اندی این بر فرمت خروجی پیش فرض تاثیر می گذارد.

-f

- نام تجارتی

هنگام ایجاد یک شیء مشترک ELF، زمینه DT_AUXILIARY داخلی را به نام مشخص شده تنظیم کنید. این به لینک دهنده پویا می گوید که جدول نماد شیء مشترک باید به عنوان یک فیلتر کمکی در جدول نماد نام مشترک مورد استفاده قرار گیرد.

اگر بعدا یک برنامه را در برابر این شی فیلتری پیوند دهید، پس وقتی برنامه را اجرا میکنید، لینک دهنده پویا فیلد DT_AUXILIARY را میبیند. اگر لینک دهنده پویا هر سمبل را از شی فیلتر بگیرد، ابتدا بررسی می کند که آیا یک تعریف در نام مشترک مشترک وجود دارد. اگر یک وجود داشته باشد، به جای تعریف در شی فیلتر استفاده می شود. نام مشترک مشترک باید وجود نداشته باشد. بنابراین، نام مشترک مشترک ممکن است برای ارائه اجرای دیگری از توابع خاص، شاید برای اشکال زدایی و یا برای عملکرد خاص دستگاه استفاده شود.

این گزینه ممکن است بیش از یک بار مشخص شود. نوشته های DT_AUXILIARY در ترتیبی که در خط فرمان ظاهر می شوند ایجاد می شود.

نام F

- نام فیلتر

هنگام ایجاد یک شیء مشترک ELF، فیلد داخلی DT_FILTER را به نام مشخص شده تنظیم کنید. این به لینک دهنده پویا می گوید که جدول نماد شی مشترک که در حال ایجاد است باید به عنوان یک فیلتر در جدول نماد نام مشترک مورد استفاده قرار گیرد.

اگر بعدا یک برنامه را در برابر این شی فیلتری پیوند دهید، پس هنگام اجرای برنامه، لینک دهنده پویا فیلد DT_FILTER را می بیند. لینک دهنده پویا نمادها را با توجه به جدول نماد شیء فیلتر به طور معمول برطرف می کند، اما در واقع به تعاریف موجود در نام مشترک مشترک پیوند پیدا می کند. بنابراین شی فیلتر میتواند برای انتخاب زیر مجموعه ای از نمادهای ارائه شده توسط نام شی مورد استفاده قرار گیرد.

برخی از لینکنترهای قدیمی از گزینه -F در یک toolchain کامپایل استفاده می کنند که برای مشخص کردن فرمت فایل شیء برای هر دو فایل ورودی و خروجی خروجی استفاده می شود. لینوکس GNU برای این منظور از مکانیزم های دیگر استفاده می کند: گزینه های -b ، --format ، --oformat ، دستور TARGET در اسکریپت های لینکر و متغیر محیط GNUTARGET. لینک دهنده گنو گزینه " -F" را هنگام ایجاد یک شیء مشترک ELF ایجاد نمی کند.

نام فین

هنگام ایجاد یک اشیاء اجرایی یا مشترک ELF، هنگامیکه اشیاء اجرایی یا مشترک مورد تخلیه قرار می گیرند، NAME را با آدرس DT_FINI به آدرس تابع، تماس بگیرید. به طور پیش فرض، لینکر از "_fini" به عنوان تابع فراخوانی استفاده می کند.

-g

نادیده گرفته شده ارائه شده برای سازگاری با سایر ابزارها

-G ارزش

- gpsize = مقدار

حداکثر اندازه اشیا را با استفاده از ثبت نام GP برای اندازه گیری بهینه سازی کنید. این فقط برای فرمت های فایل شی مانند MIPS ECOFF معنی دار است که از قرار دادن اشیای بزرگ و کوچک در بخش های مختلف پشتیبانی می کند. این برای سایر فرمت های فایل شیء نادیده گرفته شده است.

نام او

-someana = نام

هنگام ایجاد یک شیء مشترک ELF، فیلد داخلی DT_SONAME را روی نام مشخص شده تنظیم کنید. هنگامی که اجرایی با یک شیء مشترک که دارای فیلد DT_SONAME است مرتبط می شود، پس وقتی اجرای اجرایی اجرا می شود، لینک دهنده پویا تلاش خواهد کرد که یک شی مشترک را که توسط فیلد DT_SONAME مشخص شده است بجای استفاده از نام فایل داده شده به لینک دهنده بارگذاری کند.

-من

پیوند افزایشی را انجام دهید (همانند گزینه -r ).

نام نام خانوادگی

هنگام ایجاد یک اشیاء اجرایی یا مشترک ELF، هنگامیکه اشیاء اجرایی یا مشترک مورد لود قرار می گیرند، NAME را با آدرس DT_INIT به آدرس تابع فراخوانی کنید. به طور پیش فرض، لینکر از "_init" به عنوان تابع فراخوانی استفاده می کند.

-l بایگانی

--library = بایگانی

آرشیو فایل بایگانی را به لیست فایلها برای پیوند اضافه کنید. این گزینه ممکن است از هر تعداد بار استفاده شود. ld لیست مسیر خود را برای وقایع "libarchive.a" برای هر بایگانی تعیین می کند.

در سیستم هایی که از کتابخانه های اشتراکی پشتیبانی می کنند، ld همچنین می تواند برای کتابخانه ها با پسوند های غیر از ".a" جستجو کند. به طور خاص، در سیستم های ELF و SunOS، ld یک دایرکتوری برای یک کتابخانه با پسوند ".so" را جستجو می کند قبل از جستجوی یک با پسوند ".a". با هماهنگی، پسوند ".so" یک کتابخانه به اشتراک گذاشته شده را نشان می دهد.

لینکر یک بایگانی را فقط یکبار در مکان مورد نظر در خط فرمان مشخص میکند. اگر آرشیو یک سمبل را تعیین می کند که در برخی از شیئ هایی که قبل از آرشیو در خط فرمان ظاهر می شود تعریف نشده است، لینکر فایل های مناسب را از بایگانی شامل می شود. با این حال، یک نماد undefined در یک شیء که بعدا در خط فرمان ظاهر می شود، باعث نمی شود که لینکر دوباره جستجو کند.

- ( گزینه ای برای راه اندازی لینکر برای چندین بار بایگانی جستجو کنید.

چندین بار در یک خط فرمان یک بایگانی را لیست کنید.

این نوع جستجوی آرشیو برای لینکرهای یونیکس استاندارد است. با این حال، اگر از ld onAIX استفاده می کنید، توجه داشته باشید که از رفتار لینک دهنده AIX متفاوت است.

-L searchdir

- library path = searchdir

اضافه کردن path searchdir به لیست مسیرهایی که ld برای آرشیو کتابخانه ها و اسکریپت های کنترل ld جستجو خواهند کرد. شما می توانید از این گزینه هر بار استفاده کنید. دایرکتوری ها به ترتیب در آنها در خط فرمان مشخص می شوند. راهنماهای مشخص شده در خط فرمان قبل از دایرکتوری پیش فرض جستجو می شوند. تمام گزینه های -L به تمام گزینه های -l اعمال می شوند، صرف نظر از نظم که در آن گزینه ها ظاهر می شوند.

اگر searchdir با "=" آغاز می شود، پس از آن "=" با پیشوند sysroot جایگزین می شود، مسیر مشخص شده زمانی که لینکر پیکربندی شده است.

مجموعه پیش فرض مسیرهای جستجو شده (بدون اینکه با -L مشخص شود) بستگی دارد که حالت شبیه سازی ld استفاده می کند و در بعضی موارد نیز بر روی نحوه پیکربندی آن تنظیم شده است.

مسیرها را می توان در یک اسکریپت لینک با دستور "SEARCH_DIR" مشخص کرد. راهنماها مشخص شده در این روش در نقطه ای است که اسکریپت لینکر در خط فرمان نمایش داده می شود.

شبیه سازی -m

لینک کردن شبیه سازی را تقلید کنید . شما می توانید شبیه سازی های موجود را با گزینه های --verbose یا -V لیست کنید .

اگر گزینه -m استفاده نشود، شبیه سازی از متغیر محیط "LDEMULATION" گرفته شده است، اگر تعریف شده باشد.

در غیر این صورت، شبیه سازی پیش فرض به نحوه پیکربندی لینکر بستگی دارد.

-M

- چاپ نقشه

یک نقشه پیوند را به خروجی استاندارد چاپ کنید. یک نقشه لینک اطلاعات مربوط به لینک را فراهم می کند از جمله موارد زیر است:

*

جایی که فایلها و نمادهای شیء در حافظه قرار می گیرند.

*

علامت های رایج چه هستند

*

همه اعضای آرشیو در لینک قرار گرفته اند، با ذکر نماد که اعضای آرشیو را به ارمغان آورده است.

-n

- غیرمجاز

خاموش کردن تراز بخش صفحه ها و خروجی را به عنوان "NMAGIC" در صورت امکان علامت بزنید.

-N

- مغناطیسی

بخش های متن و داده را برای خواندن و نوشتن تنظیم کنید. همچنین، بخش داده را صفحه بندی نکنید و اتصال به کتابخانه های به اشتراک گذاشته شده را غیر فعال کنید. اگر فرمت خروجی از شماره های سحر و جادو سبک یونیکس را پشتیبانی کند، خروجی را به عنوان "OMAGIC" علامت بزنید.

--no-omagic

این گزینه بسیاری از اثرات گزینه -N را نادیده می گیرد. این بخش متنی را فقط خواندنی تنظیم می کند و بخش داده را به سمت صفحه تنظیم می کند. توجه داشته باشید - این گزینه اتصال به کتابخانه های اشتراک را فعال نمی کند. برای استفاده از باندینامیک استفاده کنید.

-o خروجی

- خروجی = خروجی

از خروجی به عنوان نام برای برنامه تولید شده توسط ld استفاده کنید ؛ اگر این گزینه مشخص نشده است، نام a.out بصورت پیش فرض استفاده می شود. فرمان اسکریپت OUTPUT همچنین می تواند نام فایل خروجی را مشخص کند.

-O سطح

اگر سطح مقادیر عددی بیشتر از صفر است، خروجی را بهینه می کند. این ممکن است به طور چشمگیری طول بکشد و بنابراین احتمالا باید برای باینری نهایی فعال شود.

-q

- relit-emit

بخش ها و محتویات جابجایی را در مجامع متصل به طور کامل متوقف کنید. تجزیه و تحلیل لینک و ابزار بهینه سازی ممکن است به این اطلاعات نیاز داشته باشد تا اصلاحاتی صحیح از اجرایی انجام شود. این نتیجه در اجرایی بزرگتر است.

این گزینه در حال حاضر تنها در سیستم عامل ELF پشتیبانی می شود.

-r

- قابل انتقال

تولید خروجی displacatable --- یعنی، تولید یک فایل خروجی است که می تواند به نوبه خود به عنوان ورودی به LD استفاده می شود . این اغلب به طور جزئی ارتباط دارد . به عنوان یک اثر جانبی، در محیط هایی که از شماره های جادویی استاندارد یونیک پشتیبانی می کنند، این گزینه همچنین شماره جادویی فایل خروجی را به "OMAGIC" تنظیم می کند. اگر این گزینه مشخص نشده باشد، یک فایل مطلق تولید می شود. هنگام پیوند دادن برنامه های C ++، این گزینه ارجاعات به سازندگان را حل نخواهد کرد ؛ برای انجام این کار، از اور

هنگامی که یک فایل ورودی فرمت مشابه فایل خروجی ندارد، اتصال جزئی تنها پشتیبانی می شود اگر این فایل ورودی حاوی هیچ جابجایی نیست. فرمت های مختلف خروجی می توانند محدودیت های بیشتری داشته باشند به عنوان مثال برخی از فرمت های مبتنی بر "a.out" پشتیبانی از پیوند جزئی با فایل های ورودی در فرمت های دیگر را پشتیبانی نمی کند.

این گزینه همان کار را با -i انجام می دهد .

-R نام فایل

- just-symbols = نام فایل

نام و نشانیهای نماد آنها را از نام فایل بخوانید، اما آن را جایگزین نمیکنید یا آن را در خروجی قرار دهید. این اجازه می دهد فایل خروجی خود را به صورت نمادین به مکان های مطلق حافظه تعریف شده در برنامه های دیگر اشاره کند. شما می توانید از این گزینه بیش از یک بار استفاده کنید.

برای سازگاری با دیگر لینک سازندگان ELF، اگر گزینه -R به دنبال یک نام دایرکتوری باشد، به جای یک نام فایل، با گزینه -rpath برخورد می شود.

-s

- نوار - همه

تمام اطلاعات نماد را از فایل خروجی حذف کنید.

-S

--strip-اشکالزدایی

اطلاعات نماد اشکال زدایی را از فایل خروجی (اما نه همه نمادها) حذف کنید.

--پی گیری

اسامی فایل های ورودی را به عنوان LD پردازش آنها را چاپ کنید.

-T scriptfile

- script = scriptfile

از اسکریپت به عنوان اسکریپت لینکر استفاده کنید. این اسکریپت اسکریپت لیندر پیش فرض ld را جایگزین می کند (به جای افزودن به آن)، بنابراین فایل commandfile باید همه چیز را برای توصیف فایل خروجی مشخص کند. اگر فایل اسکریپت در دایرکتوری فعلی وجود نداشته باشد، "ld" آن را در دایرکتوری های مشخص شده توسط هر گزینه قبلی -L جستجو می کند. گزینه های چندگانه T تجمع می یابند

-u نماد

--undefined = نماد

نیروی نماد در فایل خروجی به عنوان یک نماد نامشخص وارد می شود. برای مثال، انجام این کار ممکن است باعث پیوند ماژول های اضافی از کتابخانه های استاندارد شود. -u ممکن است با استدلال گزینه های مختلف تکرار شود تا علامت های غیر تعریف نشده دیگری وارد شود. این گزینه معادل فرمان اسکریپت لینک EXTERN است.

- اور

برای هر چیز غیر از برنامه های C ++، این گزینه معادل -r است : آن تولید خروجی resocatable --- یعنی یک فایل خروجی است که می تواند به نوبه خود به عنوان ورودی به LD استفاده می شود . هنگام پیوند دادن برنامه های C ++، -Ur ارجاع به سازنده ها را برمی گزیند ، بر خلاف -r . این کار برای استفاده از -Ur در فایل هایی که خود را با -Ur مرتبط می کنند کار نمی کند. هنگامی که جدول سازنده ساخته شده است، نمی توان آن را اضافه کرد. فقط برای آخرین پیوند جزئی و -r برای دیگران استفاده کنید.

--unique [= SECTION ]

یک بخش خروجی جداگانه را برای هر بخش ورودی مطابق با SECTION ایجاد می کند ، و یا اگر آرگومان بخش اختیاری علامت SECTION برای هر بخش ورودی یتیم وجود ندارد. بخش یتیم یکی است که به طور خاص در اسکریپت لینکر ذکر نشده است. شما می توانید از این گزینه چندین بار در خط فرمان استفاده کنید. این مانع از ادغام نرمال بخش های ورودی با همان نام، برتری بخش های بخش خروجی در یک اسکریپت لینکر.

-v

- نسخه

-V

شماره نسخه را برای ld نمایش دهید . گزینه -V همچنین امولدهای پشتیبانی شده را فهرست می کند.

-ایکس

- همه چیز باشه

تمام نمادهای محلی را حذف کنید

-ایکس

- مردم محلی بی خطر

تمام نمادهای موقت محلی را حذف کنید. برای اکثر اهداف، این همه نمادهای محلی است که نام آنها با L آغاز می شود.

نماد

--trace-symbol = نماد

نام هر فایل پیوند که نماد آن نماد است، چاپ کنید . این گزینه ممکن است هر چند بار به شما داده شود. در بسیاری از سیستمها لازم است تا یک زیر خط قرمز اضافه شود.

این گزینه زمانی مفید است که یک نماد نامشخص در پیوندتان داشته باشید اما نمی دانید کدام مرجع از آن استفاده می کند.

مسیر YY

مسیر مسیر کاوش پیش فرض کتابخانه را اضافه کنید. این گزینه برای سازگاری با Solaris وجود دارد.

کلید واژه -z

کلمات کلیدی شناخته شده عبارتند از: initfirst، interposition، loadfltr، nodefaultlib، nodelete، nodlopen، nodump، now، origin، compreloc، nocombreloc " کلمات کلیدی دیگر برای سازگاری با Solaris نادیده گرفته می شوند. "initfirst" عنصر را برای اولین بار در زمان اجرا قبل از هر اشیاء دیگر تعیین می کند. "تعویض" علامت آن شیء است که جدول نماد آن قبل از تمام نمادها، اما اجرایی اولیه قرار می گیرد. "loadfltr" عنصر شیء را نشان می دهد که filtees خود را بلافاصله در زمان اجرا پردازش می کند. "nodefaultlib" علامت جسم است که جستجو وابستگی های این شیء نادیده می گیرد هر مسیر جستجوی پیش فرض کتابخانه. "nodelete" اشاره می کند که جسم نباید در زمان اجرا تخلیه شود. "nodlopen" علامت جسم موجود نیست "dlopen". "nodump" نشان می دهد که این شیء نمی تواند توسط "dldump" ریخته شود. "در حال حاضر" علامت جسم با اتصال غیر زمان اجرا زمان اجرا. "منشا" اشاره می کند که جسم ممکن است $ ORIGIN باشد. "defs" نمادهای نامشخص را غیرفعال می کند. "muldefs" اجازه می دهد تا تعاریف متعدد. "combreloc" ترکیبی از بخش های متعدد reloc و انواع آنها را برای ایجاد نماد دینامیک مراجعه به حافظه امکان پذیر است.

"nocombreloc" بخش های متعدد reloc را با هم ترکیب می کند. "nocopyreloc" تولید نسخهای کپی را غیرفعال میکند.

- ( بایگانی -)

- آرشیو گروه اول - گروه اندیشه

بایگانی باید یک لیست از فایل های بایگانی باشد . آنها ممکن است یا نام پرونده صریح باشند، یا گزینه های -l .

بایگانی های مشخص شده بارها مورد جستجو قرار می گیرند تا مرجع های نامشخص جدید ایجاد نشوند. به طور معمول یک آرشیو فقط یک بار در ترتیب مشخص شده در خط فرمان مورد جستجو قرار می گیرد. اگر یک نماد در آن آرشیو برای حل و فصل یک نماد undefined که به وسیله یک شی در بایگانی که بعدا در خط فرمان ظاهر می شود مورد نیاز باشد، لینک دهنده نمی تواند این مرجع را حل کند. با دسته بندی آرشیو ها، همه آنها به طور مکرر جستجو می شوند تا زمانی که تمام مراجع ممکن حل شوند.

با استفاده از این گزینه هزینه کارایی قابل توجهی دارد. بهتر است از آن استفاده کنید تنها زمانی که ارجاع دایرکتوری اجتناب ناپذیری بین دو یا چند آرشیو وجود دارد.

- غیرقابل شناسایی-ورودی-قوس

--no-accept-unknown-input-arch

لینکر را برای پذیرش فایل های ورودی که معماری قابل تشخیص نیست را می دهد. فرض این است که کاربر می داند چه کاری انجام می دهد و عمدا می خواهد در این فایل های ورودی ناشناخته لینک کند. این پیش فرض رفتار لینکر قبل از انتشار 2.14 بود. رفتار پیش فرض از انتشار 2.14 به بعد این است که چنین فایلهای ورودی را رد کنند و بنابراین گزینه accept-unknown-input-arch برای بازگرداندن رفتار قدیمی اضافه شده است.

تأیید کلمه کلیدی

این گزینه برای سازگاری با SunOS نادیده گرفته می شود.

-Bdynamic

-دی

-call_shared

پیوند به کتابخانه های پویا این تنها در سیستم عامل هایی است که برای آن کتابخانه های اشتراکی پشتیبانی می شوند. این گزینه معمولا به طور پیش فرض در چنین سیستم عامل ها است. انواع مختلف این گزینه برای سازگاری با سیستم های مختلف است. شما می توانید از این گزینه چندین بار در خط فرمان استفاده کنید: بر کتابخانه ها برای گزینه های -l تاثیر می گذارد که آنها را دنبال می کند.

-Bgroup

پرچم "DF_1_GROUP" را در بخش "DT_FLAGS_1" در قسمت پویا قرار دهید. این باعث می شود لینک دهنده زمانبندی برای رسیدگی به جستجو در این شی و وابستگی های آن فقط در داخل گروه انجام شود. --no-undefined معنی دارد این گزینه تنها در سیستم عامل ELF معنی دار است که از کتابخانه های اشتراکی پشتیبانی می کند .

-Bstatic

-dn

-non_shared

استاتیک

در مورد کتابخانه های اشتراکی لینک نکنید. این تنها در سیستم عامل هایی است که برای آن کتابخانه های اشتراکی پشتیبانی می شوند. انواع مختلف این گزینه برای سازگاری با سیستم های مختلف است. شما می توانید از این گزینه چندین بار در خط فرمان استفاده کنید: بر کتابخانه ها برای گزینه های -l تاثیر می گذارد که آنها را دنبال می کند.

-Bymbolic

در هنگام ایجاد یک کتابخانه به اشتراک گذاشته شده، اشاره به نماد های جهانی به تعریف در کتابخانه به اشتراک گذاشته شده، در صورت وجود. به طور معمول، برای یک برنامه مرتبط با یک کتابخانه به اشتراک گذاشته شده ممکن است تعریف در داخل کتابخانه به اشتراک گذاشته شود. این گزینه تنها در ELFplatforms معنی دار است که از کتابخانه های اشتراکی پشتیبانی می کند.

- چک کردن بخش

--no-check-sections

از لینکر درخواست می کند که آدرس های بخش را بررسی نکنید پس از آنها مجاز است تا ببینند آیا همپوشانی وجود دارد. معمولا لینکر این چک را انجام می دهد و اگر هرگونه همپوشانی را پیدا کند، پیام های خطای مناسب را تولید می کند. Linker می داند در مورد، و آیا کمک هزینه برای بخش در پوشش. رفتار پیش فرض را می توان با استفاده از کلید خط فرمان -check-sections بازیابی کرد.

- کرافت

خروجی یک جدول مرجع متقابل اگر یک فایل نقشه لینکر تولید می شود، جدول مرجع متقابل به فایل نقشه چاپ می شود. در غیر این صورت، آن را در خروجی استاندارد چاپ می کند.

فرمت جدول عمدا ساده است، به طوری که در صورت لزوم می تواند به راحتی توسط یک اسکریپت پردازش شود. نمادها چاپ می شوند، بر اساس نام مرتب شده اند. برای هر نماد، یک لیست از نام فایل ها داده می شود. اگر نماد تعریف شده باشد، اولین فایلی که ذکر شد محل تعریف است. فایل های باقی مانده حاوی اشاره به نماد است.

--no-define-common

این گزینه تخصیص آدرسها را به نمادهای مشترک ممنوع می کند. فرمان اسکریپت "INHIBIT_COMMON_ALLOCATION" اثر مشابهی دارد.

گزینه -no-define-common اجازه می دهد تفکیک تصمیم برای اختصاص آدرس به نمادهای مشترک از انتخاب نوع فایل خروجی؛ در غیر این صورت یک نوع خروجی غیر متحرک قابل استفاده است که آدرس ها را به نمادهای مشترک متصل می کند. استفاده از " -no-define-common" اجازه می دهد تا عبارات معمولی که از یک کتابخانه به اشتراک گذاشته شده اشاره دارند و فقط در برنامه اصلی اختصاص داده شوند. این فضای تکراری استفاده نشده در کتابخانه به اشتراک گذاشته شده را از بین می برد و همچنین مانع از هرگونه سردرگمی در مورد حل و فصل سوء استفاده نادرست می شود، در حالی که بسیاری از ماژول های پویا با مسیرهای تخصصی جستجوی برای حل و فصل نماد اجرای اجرا وجود دارد.

--defsym نماد = بیان

یک نماد جهانی در فایل خروجی ایجاد کنید، حاوی آدرس مطلق داده شده توسط عبارت . شما می توانید از این گزینه به عنوان چند بار لازم برای تعریف چندین نماد در خط فرمان استفاده کنید. یک فرم محدود حساب کاربری برای بیان در این زمینه پشتیبانی می شود: شما می توانید یک ثابت هگزادسیمال یا نام یک نماد موجود را وارد کنید، یا از "+" و "-" برای اضافه کردن یا حذف رقم های هگزادسیمال یا نمادها استفاده کنید. اگر شما نیاز به اصطلاحات دقیق تر دارید، از زبان اسکریپت لینکر استفاده کنید. نکته: فاصله بین علامت ، علامت برابر (`` = '') و بیان وجود ندارد .

- خرده سنگ [= سبک ]

-no-demangle

این گزینه ها کنترل می کند که آیا نام نمادها را در پیام های خطا و سایر خروجی ها جدا کنید. هنگامی که لینکر گفته می شود به تقسیم کردن، آن را تلاش می کند تا نام های نماد را به روش قابل خواندن ارائه دهد: در صورت استفاده از فرمت فایلی شیء، خطوط زیر برجسته می شوند و C ++ نام های نماد منگوله را به نام قابل خواندن کاربر تبدیل می کنند. کامپایلرهای مختلف دارای سبک های مختلف انجلینگ هستند. آرگومان سبک اختیاری اختیاری می تواند برای انتخاب یک سبک تنزل مناسب برای کامپایلر مورد استفاده قرار گیرد. لینک دهنده به طور پیش فرض تقسیم بندی خواهد شد مگر اینکه متغیر محیط COLLECT_NO_DEMANGLE تنظیم شود. این گزینه ها ممکن است برای لغو پیش فرض استفاده شوند.

- فایل dinamic-linker

نام لینک دهنده پویا را تنظیم کنید. این تنها زمانی معنی دار است که هنگام اجرای فایلهای ELF مرتبط به صورت پویا تولید می شود. لینک دهنده پویا به طور پیش فرض درست است از این استفاده نکنید مگر اینکه شما می دانید که چه کاری انجام می دهید.

- رگولاتوری

این گزینه تنها زمانی معنادار است که پیوند کد MICI تعبیه شده PIC ایجاد شده توسط گزینه -membedded-pic را به کامپایلر GNU و مونتاژ کننده ایجاد می کند. این باعث می شود لینکر برای ایجاد یک جدول که ممکن است در زمان اجرا برای انتقال هر گونه داده ای که به صورت ایستا برای مقدار اشاره گر مقداردهی شده است، استفاده شود. برای جزئیات بیشتر در مورد testuite / ld-empic ببینید.

- هشدارهای مرگبار

هشدارها را به عنوان خطا تلقی کنید .

--force-exe پسوند

اطمینان حاصل کنید که فایل خروجی یک پسوند exe دارد.

اگر یک فایل خروجی به طور کامل پیوند شده با موفقیت ساخته شده یک پسوند ".exe" یا " .dll " ندارد، این گزینه لینک دهنده را مجبور می کند تا فایل خروجی را به یکی از نام های مشابه با پسوند ".exe" کپی کند. این گزینه در هنگام استفاده از فایلهای Unix اصلاح نشده یونیکس در میزبان مایکروسافت مفید است، زیرا برخی از نسخههای ویندوز تصویری را اجرا نمیکنند مگر آنکه در پسوند «.exe» به پایان برسد.

--no-gc-sections

-gc-sections

امکان جمع آوری زباله از بخش های ورودی استفاده نشده. این اهدافی است که این گزینه را پشتیبانی نمی کند. این گزینه با -r سازگار نیست و نباید با پیوند پویا نیز استفاده شود. رفتار پیش فرض (از انجام این مجموعه زباله ) را نمی توان با مشخص کردن --no-gc-sections در خط فرمان بازیابی کرد.

--کمک

خلاصه ای از گزینه های خط فرمان را در خروجی و خروجی استاندارد چاپ کنید.

- اهداف کمک

خلاصه ای از تمام گزینه های خاص هدف در خروجی و خروجی استاندارد را چاپ کنید.

نقشه نقشه

نقشه لینک را به mapfile فایل چاپ کنید . توضیحات گزینه -M را ببینید.

- حافظه بدون حافظه

ld به طور معمول برای سرعت بخشیدن به استفاده از حافظه با ذخیره کردن جداول نماد فایل های ورودی در حافظه بهینه می شود. این گزینه ld را به جای استفاده از حافظه بهینه سازی می کند، با بازنویسی جداول نماد در صورت لزوم. این ممکن است مورد نیاز باشد اگر LD از فضای حافظه خارج شود در حالی که پیوند اجرایی بزرگ را اجرا می کند.

- بدون تعریف

-z defs

به طور معمول هنگام ایجاد یک کتابخانه به اشتراک گذاشته شده غیر نمادین، نمادهای نامشخص اجازه داده می شود و باید توسط بارگذاری زمانبندی حل شود. این گزینه ها چنین نمادهای نامشخص را غیر فعال می کند.

- تعریف چند منظوره

-z muldefs

به طور معمول هنگامی که یک نماد چندین بار تعریف شده است، لینکر خطای مهلک را گزارش می کند. این گزینه ها به چندین تعریف اجازه می دهد و تعریف اول استفاده می شود.

--allow-shlib-undefined

اجازه دهید نمادهای نامشخص در اشیاء به اشتراک گذاشته شده حتی زمانی که - undefined تنظیم شده است. نتیجه خالص این خواهد بود که نمادهای نامشخص در اشیاء منظم، خطا را منجر می شوند، اما نمادهای نامشخص در اشیاء مشترک، نادیده گرفته می شوند. اجرای no_undefined این فرض را مطرح می کند که لینک دهنده زمان اجرا بر روی نمادهای نامشخص خفه می شود. با این حال، حداقل یک سیستم (BeOS) وجود دارد که در آن، نمادهای نامشخص در کتابخانه های به اشتراک گذاشته شده طبیعی است، زیرا کرنل آنها را در زمان بارگذاری می کند تا انتخاب کنید که کدام تابع برای معماری جاری مناسب تر است. IE به طور دایم یک تابع memset مناسب را انتخاب می کند. ظاهرا برای کتابخانه های اشتراک HPPA نیز عبارات نامشخص وجود دارد.

--no-undefined-version

به طور معمول وقتی یک نماد دارای یک نسخه نامشخص است، لینکر آن را نادیده می گیرد. این گزینه نمادهای با نسخه نامشخص را غیرفعال می کند و به جای آن یک خطای مرگبار صادر می شود.

- عدم هماهنگی اخطار

به طور معمول Ld اگر شما سعی می کنید فایل های ورودی را که به دلایلی ناسازگار هستند مرتبط کنید، شاید به این دلیل است که آنها برای پردازنده های مختلف یا برای endiannesses های مختلف کامپایل شده اند. این گزینه به LD می گوید که باید به طور صریح چنین خطاهای احتمالی را اجازه دهد. این گزینه فقط باید با دقت مورد استفاده قرار گیرد، در مواردی که شما اقدام خاصی را انجام داده اید که اطمینان حاصل شود خطاهای لینکر نامناسب است.

- کاملا آرشیو

خاموش کردن اثر گزینه -whole-archive برای فایل های آرشیوی بعدی.

--noinhibit-exec

هر زمان که هنوز قابل استفاده است، فایل خروجی اجرایی را حفظ کنید. به طور معمول، لینکر یک فایل خروجی تولید نخواهد کرد اگر در طول فرایند پیوند خطاهای مواجه شود؛ آن را بدون نوشتن فایل خروجی هنگامی که آن را هر گونه خطا هر گونه خروجی می رود.

-standlib

تنها کاتالوگهای کتابخانه ای را که به روش صریح در خط فرمان مشخص شده اند، جستجو کنید. دایرکتوری های کتابخانه ای که در اسکریپت های لینکر مشخص شده اند (از جمله اسکریپت های لینکر در خط فرمان مشخص شده) نادیده گرفته می شوند.

فرمت خروجی فرمت

ld ممکن است پیکربندی شده برای پشتیبانی از بیش از یک نوع فایل شی. اگر ld شما به این شیوه پیکربندی شده است، می توانید از گزینه - aformat برای مشخص کردن فرمت دودویی برای فایل شی شیء استفاده کنید. حتی هنگامی که ld پیکربندی شده برای پشتیبانی از فرمت های شیء جایگزین، معمولا نمی خواهید این را مشخص کنید، زیرا ld باید پیکربندی شده برای تولید به عنوان یک فرمت خروجی پیش فرض فرمت معمولی در هر دستگاه باشد. خروجی فرمت یک رشته متن است، نام فرمت خاصی که توسط کتابخانه های BFD پشتیبانی می شود. (شما می توانید فرمت های دودویی موجود را با objdump -i لیست کنید .) فرمان اسکریپت "OUTPUT_FORMAT" همچنین می تواند فرمت خروجی را مشخص کند، اما این گزینه آن را منحرف می کند.

qmagic

این گزینه برای سازگاری با لینوکس نادیده گرفته می شود.

-خب

این گزینه برای سازگاری SVR4 نادیده گرفته می شود.

--آروم باش

یک گزینه با اثرات وابسته به دستگاه. این گزینه تنها در چند هدف پشتیبانی می شود.

در بعضی از سیستم عامل ها، گزینه --relax بهینه سازی های جهانی را انجام می دهد که زمانی که لینکر آدرس دهی در برنامه را حل می کند، مانند حالت های آدرس آرامش و سنتز دستورالعمل های جدید در فایل شی شی خروجی.

در بعضی از سیستم عاملها این بهینه سازی زمانبندی لینکها ممکن است اشکال زدایی نمادین اجرایی را غیر ممکن کند. این شناخته شده است که مورد برای Matsushita MN10200 و MN10300 خانواده از پردازنده.

در سیستم عامل هایی که این پشتیبانی نمی شود، -relax پذیرفته شده است، اما نادیده گرفته شده است.

--retain-symbols-file نام فایل

فقط نمادهای ذکر شده در نام پرونده فایل را حفظ کنید ، تمام دیگران را کنار بگذارید. نام فایل به سادگی یک فایل صاف است، با یک نام نماد در هر خط. این گزینه مخصوصا در محیط ها (مانند VxWorks) مفید است، در حالیکه جدول نماد بزرگ جهانی به تدریج انباشته می شود تا حافظه زمان اجرا را حفظ کند.

--retain-symbols-file از نمادهای نامشخص یا علامت های مورد نیاز برای نقل مکان نمی کند.

شما فقط می توانید یک بار در خط فرمان یکبار دیگر یک سمبل-فایل را مشخص کنید. آن را لغو -s و -S .

-rpath dir

یک دایرکتوری را به مسیر جستجوی کتابخانه زمان اجرا اضافه کنید. این هنگام اتصال یک ELFexecutable با اشیاء مشترک استفاده می شود. تمام استدلال های rpath پیوند داده می شوند و به لینک دهنده زمان اجرا می شوند، که از آنها برای قرار دادن اشیاء مشترک در زمان اجرا استفاده می کند. گزینه rrath نیز در هنگام قرار دادن اشیاء به اشتراک گذاشته شده مورد نیاز توسط اشیاء مشترک است که به صراحت در لینک قرار دارد؛ توضیحات گزینه -rpath-link را ببینید. اگر -rpath هنگام اتصال یک فایل اجرایی ELF استفاده نشود، محتویات متغیر محیطی "LD_RUN_PATH" در صورت تعریف استفاده می شود.

گزینه rpath نیز ممکن است در SunOS استفاده شود. به طور پیش فرض، در SunOS، لینکر یک پچ جستجو در زمان اجرا را از تمام گزینه های -L ارائه می دهد. اگر یک گزینه rpath مورد استفاده قرار گیرد، مسیر جستجوی زمان اجرا به طور انحصاری با استفاده از گزینه -rpath ، نادیده گرفتن گزینه -L . این می تواند مفید باشد در هنگام استفاده از gcc، که بسیاری از گزینه های -L که ممکن است بر روی فایل سیستم های نصب شده onNFS اضافه شود.

برای سازگاری با دیگر لینک سازندگان ELF، اگر گزینه -R به دنبال یک نام دایرکتوری باشد، به جای یک نام فایل، با گزینه -rpath برخورد می شود.

-rpath-link DIR

هنگام استفاده از ELF یا SunOS، یک کتابخانه به اشتراک گذاشته ممکن است نیاز به دیگری داشته باشد. این اتفاق می افتد زمانی که پیوند "ld -shared" شامل یک کتابخانه به اشتراک گذاشته شده به عنوان یکی از فایل های ورودی است.

هنگامی که لینکر چنین ارتباطی را هنگام انجام یک پیوند غیر به اشتراک گذاشته شده و غیر قابل انتقال، در صورت پیوستن به آن، به طور خودکار سعی خواهد کرد که کتابخانه مشترک مورد نیاز را پیدا کند و آن را در لینک قرار دهد، اگر به طور صریح به آن اشاره نشده باشد. در چنین مواردی، گزینه -rpath-link اول مجموعه ای از دایرکتوری ها را جستجو می کند. گزینه -rpath-link میتواند دنباله ای از نام دایرکتوری را با مشخص کردن یک لیست از نام های جدا شده توسط colon یا با نمایش چندین بار مشخص کند.

این گزینه باید با احتیاط مورد استفاده قرار گیرد، زیرا مسیر جستجو را که ممکن است سخت در یک کتابخانه به اشتراک گذاشته شده، منعکس کند. در چنین مواردی ممکن است به طور غیرقانونی یک مسیر جستجو متفاوت از آنچه لینک دهنده اجرا می کند استفاده کند.

لینکر از مسیرهای جستجوی زیر برای یافتن کتابخانه های مشترک مورد نیاز استفاده می کند.

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_RPATH" اگر "DT_RUNPATH" موجود باشند، نادیده گرفته می شوند.

7

دایرکتوری های پیش فرض، normally / lib و / usr / lib .

8

برای لینک دهنده بومی در سیستم ELF، اگر فایل /etc/ld.so.conf وجود داشته باشد، لیست دایرکتوری ها در آن فایل یافت می شود.

اگر کتابخانه مشترک مورد نیاز یافت نشد، لینکر هشدار را منتشر می کند و با پیوند ادامه می یابد.

اشتراکی

- قابل توزیع

یک کتابخانه مشترک ایجاد کنید. این در حال حاضر تنها در سیستم عامل ELF، XCOFF و SunOS پشتیبانی می شود. در SunOS، لینکر به صورت خودکار یک کتابخانه به اشتراک گذاشته شده را ایجاد خواهد کرد اگر گزینه -e استفاده نشود و نمادهای نامشخص در لینک وجود دارد.

- عادت معمول

این گزینه ld را برای مرتب کردن علامت های رایج به اندازه زمانی که آن ها را در بخش های خروجی مناسب قرار می دهد، می دهد. ابتدا تمام علامت های یک بایت، سپس تمام دو بایت، سپس تمام چهار بایت و سپس همه چیز دیگر می آیند. این برای جلوگیری از شکاف بین نمادها به علت محدودیت های هم ترازی است.

-split-by-file [ اندازه ]

شبیه به --split-by-reloc اما یک بخش خروجی جدید برای هر فایل ورودی ایجاد می شود وقتی که اندازه رسیده است. اندازه پیش فرض به اندازه 1 اگر داده نشده است.

--split-by-reloc [ شمارش ]

تلاش می کند بخش های اضافی را در فایل خروجی ایجاد کند به طوری که هیچ بخش خروجی در فایل حاوی بیش از تعداد انتقال مجدد نیست. این مفید است هنگام ایجاد فایل های متحرک بزرگ برای دانلود به برخی از هسته های زمان واقعی با فرمت فایل COFF؛ از آنجا که COFFcannot بیش از 65535 نقل مکان را در یک بخش نشان می دهد. توجه داشته باشید که این کار با فرمت های فایل شی که با بخش های دلخواه پشتیبانی نمی کند، کار نخواهد کرد. لینک دهنده بخش های ورودی فرد را برای توزیع مجدد تقسیم نخواهد کرد، بنابراین اگر بخش ورودی تنها شامل بیش از تعداد دفعات انتقال باشد، یک بخش خروجی شامل بسیاری از جابجایی ها خواهد بود. شمارش پیش فرض به مقدار 32768.

- آمار

محاسبه و نمایش آمار در مورد عملکرد لینکر، مانند زمان اجرای و استفاده از حافظه.

- فرمت سنتی

برای بعضی از اهداف، خروجی ld در بعضی موارد از خروجی برخی از لینکرهای موجود متفاوت است. این سوئیچ ld را به جای استفاده از فرمت سنتی درخواست می کند.

برای مثال، در SunOS، ld ترکیب ورودی های تکراری در جدول رشته نماد. این می تواند حجم یک فایل خروجی با اطلاعات کامل اشکال زدایی را بیش از 30 درصد کاهش دهد. متاسفانه برنامه SunOS "dbx" نمیتواند برنامه نتیجه را بخواند ("gdb" هیچ مشکلی ندارد). سوئیچ فرمت استاندارد به ld می گوید که ورودی های تکراری را ترکیب نمی کند.

- section-start sectionname = org

یک بخش در فایل خروجی را در آدرس مطلق که توسط org تعیین شده است تعیین کنید. شما می توانید این گزینه را به عنوان چند بار لازم برای قرار دادن چند بخش در خط فرمان استفاده کنید. org باید یک عدد صحیح هگزادسیمال باشد؛ برای سازگاری با لینک های دیگر، شما ممکن است 0x پیشرو را که معمولا با مقادیر هگزادسیمال مرتبط است حذف کنید. نکته: فاصله بین بین نام sectionname ، علامت برابر (`` = '') و org وجود ندارد .

-Tbss org

-Tdata org

-Ttext org

استفاده از org به عنوان آدرس اولیه برای --- به ترتیب --- "bss"، "data"، یا بخش "text" از فایل خروجی. org باید یک عدد صحیح هگزادسیمال باشد؛ برای سازگاری با لینک های دیگر، شما ممکن است 0x پیشرو را که معمولا با مقادیر هگزادسیمال مرتبط است حذف کنید.

- دلفی

- وربوز

شماره نسخه را برای ld نمایش داده و لیست امولاتورهای لینکر را پشتیبانی می کند. نمایش فایل های ورودی می تواند و نمی تواند باز شود. نمایش اسکریپت لینکر که توسط لینکر استفاده می شود.

--version-script = version-scriptfile

نام اسکریپت نسخه را به لینکر مشخص کنید. این به طور معمول هنگام ایجاد کتابخانه های اشتراکی مورد استفاده قرار می گیرد تا اطلاعات اضافی دربارۀ وراثت نسخه برای ایجاد کتابخانه مشخص شود. این گزینه تنها در سیستم عامل ELF معنی دار است که از کتابخانه های اشتراکی پشتیبانی می کند.

- شگفت انگیز

هشدار زمانی که نماد مشترک با نماد مشترک دیگر یا با تعریف نماد ترکیب شده است. لینکدارهای یونیکس این عمل را تا حدودی غریزی به پیش میبرند، اما لینکهایی در برخی از سیستم عاملهای دیگر وجود ندارد. این گزینه به شما امکان می دهد مشکلات متداول را از ترکیب نمادهای جهانی پیدا کنید. متاسفانه، برخی از کتابخانه های C از این عمل استفاده می کنند، بنابراین شما ممکن است برخی از هشدارها در مورد نمادها در کتابخانه ها و همچنین در برنامه های خود را دریافت کنید.

سه نوع نمادهای جهانی وجود دارد که در اینجا نمونه های C نشان داده می شود:

int i = 1؛

تعریف، که در قسمت داده اولیه داده شده فایل خروجی می رود.

خارجی من int؛

مرجع نامشخص است که فضای را نمی دهد. باید یک تعریف یا نماد مشترک برای متغیر در جایی باشد.

من int؛

نماد مشترک اگر تنها (یک یا چند) علامت های مشترک برای یک متغیر وجود دارد، آن را در ناحیه داده های uninitialized فایل خروجی می رود. لینکر ادغام چندین علامت مشترک برای یک متغیر مشابه را به یک نماد تک. اگر آنها از اندازه های مختلف هستند، بزرگترین اندازه آن را می گیرد. لینک دهنده یک نماد مشترک را در یک اعلامیه تبدیل می کند، اگر تعریف یک متغیر وجود داشته باشد.

گزینه --warn-common می تواند پنج نوع هشدار را تولید کند. هر هشدار از یک جفت خط تشکیل شده است: اولین توصیف نماد درست می شود، و دوم نشانگر قبلی را با همان نام نشان می دهد. یک یا هر دو از دو نماد یک نماد مشترک هستند.

1

تبدیل یک نماد مشترک به یک مرجع، زیرا قبلا یک تعریف برای نماد وجود دارد.

(
): هشدار: مشترک از > با تعریف (
) overridden: warning: اینجا تعریف شده است

2

تبدیل نماد مشترک به مرجع، به دلیل تعریف بعدی برای نماد مواجه می شود. این همان مورد قبلی است، به جز اینکه نمادها در یک نظم متفاوت مواجه می شوند.

(
): warning: تعریف از > overriding common (
): warning: common here

3

ادغام یک نماد مشترک با سمبل مشترک مشابه همان اندازه.

(
): هشدار: چندین عنصر از ` ' (
): هشدار: مشترک قبلی در اینجا است

4

ادغام نماد مشترک با سمبل معمولی قبلی.

(
): هشدار: مشترک از > که توسط بزرگتر مورد استفاده قرار میگیرد (
): هشدار: اینجا بزرگتر است

5

ادغام یک نماد مشترک با سمبل معمولی قبلی. این همان مورد قبلی است، به جز اینکه نمادها در یک نظم متفاوت مواجه می شوند.

(
): هشدار: مشترک از > overriding common (
): هشدار: معمولی کوچکتر اینجاست

- سازندگان ساختار

هشدار اگر سازندگان جهانی استفاده شود. این تنها برای چند فرمت فایل های شیء مفید است. برای فرمتهایی مانند COFF یا ELF، لینکر نمیتواند استفاده سازندههای جهانی را تشخیص دهد.

--warn-multi-gp

هشدار اگر مقادیر نشانگر جهانی در فایل خروجی مورد نیاز باشد . این فقط برای پردازنده های خاصی مانند آلفا معنی دار است. به طور خاص، برخی از پردازنده ها ثابت های ارزشمندی را در یک بخش خاص قرار داده اند. یک ثبت ویژه (نشانگر جهانی) به وسط این بخش اشاره می کند، به طوری که از طریق یک حالت آدرس گیرنده نسبی پایه ثبت نام می تواند ثابت باشد. از آنجا که جابجایی در حالت نسبی پایه ثبت شده ثابت و نسبتا کوچک است (به عنوان مثال، 16 بیت)، این محدودیت حداکثر اندازه استخر ثابت است. بنابراین، در برنامه های بزرگ، اغلب لازم است از مقادیر مختلف اشارهگر جهانی استفاده شود تا قادر به پاسخگویی به تمام ثابت های احتمالی باشد. این گزینه هشدار را هر زمان که این پرونده رخ می دهد صادر کند.

- بیدار شدن - یک بار

فقط برای یک نماد نامشخص یک بار هشدار داده می شود، نه یکبار در هر ماژول که به آن اشاره دارد.

- warn-section-align

اخطار اگر آدرس بخش خروجی به دلیل هم ترازی تغییر کرده است. به طور معمول، ترازبندی توسط بخش ورودی تنظیم می شود. آدرس فقط اگر مشخص نشود، تغییر نخواهد کرد یعنی اگر دستور "SECTIONS" یک آدرس شروع برای بخش را مشخص نکند.

- کاملا بایگانی

برای هر بایگانی اشاره شده در خط فرمان پس از گزینه بایگانی - بایگانی ، هر فایل شیء را در بایگانی در لینک قرار دهید، به جای جستجو در بایگانی برای فایلهای شی مورد نظر. این به طور معمول برای تبدیل فایل بایگانی به یک کتابخانه به اشتراک گذاشته شده است، و مجبور کردن هر شیئی که در کتابخانه به اشتراک گذاشته شده به آن اضافه شده است. این گزینه ممکن است بیش از یکبار استفاده شود.

دو مورد در هنگام استفاده از این گزینه از gcc یادداشت می شود: ابتدا، gcc در مورد این گزینه نمی داند، بنابراین شما باید از WL، -white-archived استفاده کنید. دوم، فراموش نکنید که پس از لیست آرشیو ها، از WL، -ne-whole-archive استفاده کنید، زیرا gcc فهرست خود را از آرشیو ها به لینک خود اضافه می کند و شما نمی توانید این flag را نیز تحت تاثیر قرار دهید.

نماد گذاشتن

از یک تابع بسته بندی برای نماد استفاده کنید . هر مرجع نامشخص نماد به «__ wrap_symbol» حل خواهد شد. هر مرجع نامحدود به "__real_symbol" به نماد حل خواهد شد.

این می تواند مورد استفاده قرار گیرد برای ارائه یک بسته بندی برای عملکرد سیستم. تابع بسته بندی باید به نام "__wrap_symbol" باشد. اگر میخواهد عملکرد سیستم را فراخوانی کند، باید آن را "__ واقعی_سیمبول" نامید.

در اینجا یک مثال بی اهمیت است:

void * __wrap_malloc (int c) {printf ("malloc با٪ ld \ n"، c)؛ بازگشت __real_malloc (c)؛ }

اگر کد دیگر را با این فایل پیوند دهید ، با استفاده از wrap malloc ، سپس تمام تماس های "malloc" به جای تابع "__wrap_malloc" را فراخوانی می کند. فراخوانی "__real_malloc" در "__wrap_malloc" عملکرد واقعی "malloc" را فراخوانی می کند.

شما ممکن است بخواهید عملکرد "__real_malloc" را نیز ارائه کنید، به طوری که پیوندی بدون گزینه wrap موفق خواهد شد. اگر این کار را انجام دهید، نباید تعریف __ real_malloc را در همان فایل به عنوان "__wrap_malloc" قرار دهید؛ اگر شما انجام دهید، اسمبلر ممکن است تماس را حل کند قبل از اینکه لینکر بتواند آن را به "malloc" تغییر دهد.

--enable-new-dtags

-disable-new-dtags

این لینکر می تواند برچسب های پویا جدید را در ELF ایجاد کند. اما سیستم های قدیمی ELF ممکن است آنها را درک نکنند. اگر شما مشخص کنید - enable-new-dtags ، برچسب های پویا به صورت مورد نیاز ایجاد می شوند. اگر شما مشخص کنید - disable-new-dtags ، هیچ تگ های پویای جدید ایجاد نخواهند شد. به طور پیش فرض، برچسب های پویای جدید ایجاد نمی شوند. توجه داشته باشید که این گزینه ها فقط برای سیستم های ELF در دسترس هستند.

Linker PE i386 از گزینه اشتراکی پشتیبانی می کند که به جای یک اجرای اجباری نرمال، خروجی را یک کتابخانه مرتبط با پویا (DLL) می کند. هنگام استفاده از این گزینه باید خروجی "* .dll" نامید. علاوه بر این لینکر به طور کامل فایلهای استاندارد * .def را پشتیبانی می کند که ممکن است در خط فرمان linker مانند یک فایل شیء مشخص شود (در واقع بایستی بایستی قبل از صادرات نمادها از آن، درست مثل یک فایل شیء طبیعی)

علاوه بر گزینه های مشترک برای همه اهداف، لینک دهنده i386 PE پشتیبانی از گزینه های خط فرمان اضافی است که به هدف i386 PE اختصاص داده است. گزینه هایی که ارزش ها را می گیرند ممکن است از یک یا چند علامت یکسان با ارزش هایشان جدا شوند.

--add-stdcall-نام مستعار

اگر داده شود، نمادها با یک پسوند stdcall ( nn ) صادر می شود و همچنین با پسوند خراب شده است.

- فایل فایل پایه

از فایل به عنوان نام یک فایل استفاده کنید که در آن آدرس پایه ای همه تغییرات لازم برای تولید DLL ها را با dlltool ذخیره می کند .

- dll

یک DLL را به جای یک اجرایی منظم ایجاد کنید. شما همچنین ممکن است از "اشتراک" یا "کتابخانه" در یک فایل ".def" استفاده کنید.

-enable-stdcall-fixup

-disable-stdcall-fixup

اگر لینک یک نماد را پیدا کند که نمیتواند آن را حل کند، با دنبال کردن یک نماد تعریف دیگر که فقط در قالب نام نماد (cdecl vs stdcall) متفاوت است، تلاش میکند `` پیوند فازی '' را انجام دهد و این نماد را با پیوند به مسابقه برای مثال، نماد undefined "_foo" ممکن است با عملکرد "_foo @ 12" مرتبط شود یا نماد undefined _bar @ 16 ممکن است با عملکرد _bar مرتبط باشد. هنگامی که لینکر این کار را انجام می دهد، هشدار را چاپ می کند، زیرا معمولا به پیوند موفق نمی شود، اما گاهی اوقات وارد کردن کتابخانه های تولید شده از DLL های شخص ثالث ممکن است به این ویژگی نیاز داشته باشد که قابل استفاده باشد. اگر مشخص کنید - enableable-stdcall fixup ، این ویژگی به طور کامل فعال است و هشدارها چاپ نمی شوند. اگر شما مشخص کنید - fixable-stdcall-fixup ، این ویژگی غیرفعال است و چنین ناهماهنگی به عنوان اشتباه درنظر گرفته می شود.

--export-all-symbols

اگر داده شود، تمام نمادهای جهانی در اشیاء مورد استفاده برای ساخت یک DLL با DLL صادر می شود. توجه داشته باشید که این به طور پیش فرض است اگر در غیر این صورت هیچ علامت صادر شده وجود نخواهد داشت. هنگامی که نمادها به صورت صریح از طریق فایلهای DEF صادر می شوند یا به صورت ضمنی از طریق ویژگی های تابع صادر می شوند، پیش فرض این است که هیچ چیز دیگری صادر نمی شود مگر این گزینه داده شود. توجه داشته باشید که نمادها "DllMain @ 12"، "DllEntryPoint 0"، "DllMainCRTStartup @ 12" و "impure_ptr" به طور خودکار صادر نخواهند شد. همچنین، نمادهای وارد شده از سایر DLL ها مجددا صادر نخواهند شد و نمادهای تعیین کننده طرح داخلی DLL مانند آنهایی که از "_head_" شروع می شوند یا با "_iname" پایان می یابند. علاوه بر این، هیچ نمادی از "libgcc"، "libstd ++"، "libmingw32" یا "crtX.o" صادر نخواهد شد. نمادهای که نام آنها با "__rtti_" یا "__builtin_" آغاز می شود، برای کمک به DLL های C ++ صادر نخواهد شد. در نهایت، لیست گسترده ای از نمادهای cygwin-private وجود دارد که صادر نمی شوند (البته این در هنگام ایجاد DLL ها برای اهداف cygwin اعمال می شود).

این cygwin حذف شده است: "_cygwin_dll_entry @ 12"، "_cygwin_crt0_common @ 8"، "_ cygwin_noncygwin_dll_entry @ 12"، "_fmode"، "_impure_ptr"، "cygwin_attach_dll"، "cygwin_premain0"، "cygwin_premain1"، "cygwin_premain2"، "cygwin_premain3 "و" محیط ".

- علامت نماد نماد ، نماد ، ...

لیستی از نمادهای را که نمی بایست به طور خودکار صادر شود تعیین می کند. نام نماد ممکن است توسط کاما یا کولون مشخص شود.

--exclude-libs lib ، lib ، ...

لیستی از کتابخانه های بایگانی را مشخص می کند که از آن نشانه ها نباید به طور خودکار صادر شود. نام کتابخانه ممکن است با کاما یا کولون مشخص شود. مشخص کردن "--exclude-libs ALL" نمادهای را در همه کتابخانه های بایگانی از صادرات خودکار حذف می کند. نمادها به صراحت در یک فایل .def ذکر شده، هنوز هم بدون در نظر گرفتن این گزینه صادر می شوند.

- ویرایش فایل

تنظیم تراز فایل را مشخص کنید. بخش ها در فایل همیشه در فصلی فایل که چند ضلعی این عدد هستند شروع می شود. این پیش فرض به 512 است.

- ذخیره کره

- ذخیره ذخیره ، مرتکب شدن

مقدار حافظه را برای رزرو (و به صورت اختیاری) به عنوان پشته برای این برنامه مشخص کنید. به طور پیش فرض 1Mb رزرو شده است، 4K متعهد است.

- ارزش پایه تصویر

از مقدار به عنوان آدرس پایه برنامه یا DLL خود استفاده کنید. این پایین ترین مکان حافظه است که وقتی برنامه یا DLL شما بارگذاری می شود استفاده می شود. برای کاهش نیاز به جابجایی و بهبود کارایی DLL های خود، هر یک باید یک آدرس پایه منحصر به فرد داشته باشد و نباید با هر DLL دیگر همپوشانی داشته باشد. پیش فرض 0x400000 برای اجرا می شود، و 0x10000000 برای DLL.

- کشتن در

اگر داده شود، پسوند stdcall ( nn ) قبل از صادرات از نمادها حذف خواهند شد.

- ارزش major-image-version

شماره اصلی "نسخه تصویر" را تعیین می کند. پیش فرض به 1

- ارزش major-os-version

تعداد اصلی نسخه `` os 'را تعیین می کند. پیش فرض به 4

- مقدار major-sub-system نسخه

شماره اصلی "نسخه زیرسیستم" را تعیین می کند. پیش فرض به 4

- مقدار minor-image-version

تعداد جزئی از "نسخه تصویر" را تعیین می کند. پیش فرض به 0

- مقدار minor-os-version

تعداد جزئی نسخه "os نسخه" را تعیین می کند. پیش فرض به 0

- مقدار زیر سیستم - نسخه

تعداد جزئی از '' نسخه زیرسیستم '' را تعیین می کند. پیش فرض به 0

- فایل خروجی-def

لینکر فایل فایل را ایجاد می کند که شامل یک فایل DEF مربوط به DLL است که لینکر تولید می کند. این فایل DEF (که باید به نام "* .def" نامیده شود) ممکن است برای ایجاد یک کتابخانه وارداتی با "dlltool" استفاده شود یا به عنوان مرجع به نمادها به طور خودکار یا به طور ضمنی صادر شود.

- فایل ضمیمه

لینکر فایل فایل را ایجاد می کند که حاوی یک import import است که مربوط به DLL است که لینکر تولید می کند. این import lib (که باید به نام "* .dll.a" یا "* .a" باشد، می تواند برای اتصال مشتریان به DLL ایجاد شده استفاده شود؛ این امر باعث می شود که یک گام ایجاد یک کتابخانه واردات جداگانه "dlltool" را حذف کنید.

-enable-auto-image-base

به طور خودکار پایه تصویر برای DLL ها را انتخاب کنید، مگر اینکه یکی با استفاده از استدلال "--image-base" مشخص شود. با استفاده از یک هش ایجاد شده از dllname برای ایجاد پایگاه های تصویر منحصر به فرد برای هر DLL، برخورد در حافظه و جابجایی که می تواند تاخیر اجرای برنامه را اجتناب کند.

-disable-auto-image-base

به طور خودکار یک پایگاه تصویری منحصر به فرد ایجاد نکنید. اگر هیچ پایه تصویر مشخص شده توسط کاربر ("--image-base") وجود نداشته باشد، از پیش فرض پلتفرم استفاده می شود.

- دایرکتوری جستجو پیشوند

هنگام اتصال به صورت پویا به dll بدون یک کتابخانه واردات، به دنبال " .dll" به عنوان "lib .dll" جستجو کنید. این رفتار اجازه می دهد تمایز آسان بین DLL های ساخته شده برای subplatforms های مختلف: بومی، cygwin، uwin، pw و غیره. به عنوان مثال، DLL های cygwin معمولا از "-dll-search-prefix = cyg" استفاده می کنند.

- قابل اجرا-خودکار-وارد

پیوند پیچیده "_symbol" به "__imp__symbol" برای وارد کردن DATA از DLL ها و ایجاد نمادهای ضروری لازم برای ایجاد کتابخانه های وارداتی با آن DATAexports. این به طور کلی "فقط کار" --- اما گاهی اوقات شما ممکن است این پیام را ببینید:

"متغیر" "را نمی توان به طور خودکار وارد کرد. برای اطلاعات بیشتر مستندات" --enable-auto import "ld را بخوانید."

این پیام زمانی رخ می دهد که برخی از (زیر) بیان دسترسی به یک آدرس در نهایت داده شده توسط مجموع دو ثابت (جداول واردات Win32 تنها اجازه می دهد یکی). مواردی که ممکن است رخ دهد عبارتند از دسترسی به قسمت های متغیرهای ساختار وارد شده از یک DLL، و همچنین استفاده از یک شاخص ثابت به یک متغیر آرایه وارد شده از DLL. هر متغیر چند متغیره (آرایه ها، ساختارها، طولانی مدت و غیره) ممکن است این خطا را باعث شود. با این حال، صرف نظر از نوع داده دقیق متغیر صادر شده مجرم، همیشه آن را شناسایی، هشدار دادن و خروج می کند.

چندین راه برای حل این مشکل وجود دارد، صرف نظر از نوع داده متغیر صادر شده:

یکی از راه های استفاده از switch-enable-runtime-pseudo-reloc است. این کار تنظیم ارجاعات را در کد مشتری خود را برای محیط اجرا می کند، بنابراین این روش فقط زمانی کار می کند که محیط برنامه اجرا شده از این ویژگی پشتیبانی کند.

یک راه دوم این است که یکی از متغیرها را به یک متغیر بسپارید یعنی اینکه در زمان کامپایل ناشناخته و غیر قابل تنظیم است. برای آرایه ها، دو امکان وجود دارد: الف) شاخص (آدرس آرایه) یک متغیر را ایجاد کنید، یا ب) شاخص ثابت را یک متغیر. بدین ترتیب:

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

یا

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

برای ساختارها (و بیشتر انواع داده های چند جمله ای) تنها گزینه ساختار خود (یا متغیر طولانی مدت یا ...) است:

extern struct s extern_struct؛ extern_struct.field -> {fatile struct s * t = & extern_struct؛ t-> زمینه}

یا

extern long long extern_ll؛ extern_ll -> {fatuil long long * local_ll = & extern_ll؛ * محلی_ll}

یک روش سوم برای مقابله با این مشکل این است که «واردات خودکار» را برای نماد مجرم کنار بگذارید و با «__declspec (dllimport)» علامت بزنید. با این حال، در عمل نیاز به استفاده از #defines زمان کامپایل دارد تا نشان دهد که آیا شما در حال ایجاد یک DLL هستید، ساختن کد مشتری که به DLL پیوند دارد یا فقط ساخت / پیوند به یک کتابخانه استاتیک. در انتخاب میان روشهای مختلف حل کردن آدرس مستقیم با مشکل جبران ثابت، باید به طور معمول استفاده از دنیای واقعی را در نظر بگیرید:

اصلی:

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

راه حل 1:

--foo.h extern int arr []؛ --foo.c #include "foo.h" void main (int argc، char ** argv) {/ * این راه حل برای win32 و cygwin است؛ "بهینه سازی" نمی کنید * / فرار int * parr = arr؛ printf ("٪ d \ n"، parr [1])؛ }

راه حل 2:

--foo.h / * توجه: صادرات خودکار فرض می شود (بدون __declspec (dllexport)) * / #if (تعریف شده (_WIN32) || تعریف شده (__ CYGWIN__)) && \! (تعریف شده (FOO_BUILD_DLL) || تعریف شده (FOO_STATIC )) #define FOO_IMPORT __declspec (dllimport) #else #define FOO_IMPORT #endif extern FOO_IMPORT int arr []؛ --foo.c #include "foo.h" void main (int argc، char ** argv) {printf ("٪ d \ n"، arr [1])؛ }

یک راه حل چهارم برای جلوگیری از این مشکل این است که کد خود را برای استفاده از یک رابط کاربری کاربردی به جای یک رابط داده برای متغیرهای مجرمان ( مانند توابع accessor set_foo () و get_foo () مجددا کد کنید.

- غیر قابل دسترس خودکار واردات

سعی نکنید پیوند پیچیده "_symbol" را به "__imp__symbol" برای DATAimports از DLL ها انجام دهید.

-nable-runtime-pseudo-reloc

اگر کد شما حاوی عباراتی است که در بخش - enableable-auto import وارد شده است، یعنی DATAimports از DLL با offset غیر صفر، این سوئیچ یک بردار از "relocations pseudo runtime" را ایجاد می کند که می تواند در محیط زمان اجرا برای تنظیم مراجع استفاده شود به این داده ها در کد مشتری شما.

-disable-runtime-pseudo-reloc

برای جابجایی دودویی غیر صفر از DLL ها، جابه جایی شبه ای ایجاد نکنید. این پیش فرض است.

-enable-extra-pe-debug

نمایش اطلاعات اضافی اشکال زدایی مرتبط با thunking نماد خودکار وارد شده.

- ترازبندی

تراز بخش را تنظیم می کند. بخش ها در حافظه همیشه از آدرس هایی که چندین عدد از این تعداد هستند آغاز می شود. پیش فرض به 0x1000.

- ذخایر استاکس

- ذخيره ذخيره ، متعهد

تعیین مقدار حافظه برای ذخیره (و اختیاری) به عنوان پشته برای این برنامه استفاده کنید. پیش فرض 2Mb رزرو شده است، 4K متعهد است.

- زیر سیستم که

- زیر سیستم که : عمده

- زیر سیستم که : عمده . جزئی

زیرسیستمی را که تحت آن برنامه شما اجرا می شود مشخص می کند. مقادیر قانونی که "بومی"، "ویندوز"، "کنسول" و "posix" هستند. شما همچنین می توانید نسخه زیر سیستم را نیز انتخاب کنید.

مهم: از دستور man ( ٪ man ) برای دیدن نحوه استفاده از دستور در رایانه خاص خود استفاده کنید.