Linux / UNIX komandasi: Id

NAME

ld - LD dan foydalangan holda , GNU ulanuvchi

SYNOPSIS

ld [ options ] objfile ...

DESCRIPTION

ld bir nechta ob'ekt va arxiv fayllarini birlashtiradi, ularning ma'lumotlarini ko'chiradi va ramz zikrlarini bog'laydi. Dasturni kompilyatsiya qilishning odatdagi bosqichi odatda ldni ishlatishdan iborat.

ld ulanish jarayonining aniq va to'liq nazoratini ta'minlash uchun AT & T ning bog'lanuvchi tahrirlovchi komanda tili sintaksisining yuqori qismida joylashgan Linker buyruq til fayllarini qabul qiladi.

Ushbu odam sahifasida buyruq tili tasvirlanmagan; buyruqlar tilida va GNU linkerning boshqa jihatlarida to'liq ma'lumot olish uchun "info" dagi ld kiritishni yoki qo'lda ld: GNU havolasini ko'ring.

Ld ning ushbu versiyasi ob'ekt fayllariga ishlov berish uchun umumiy maqsadli BFD kutubxonalaridan foydalanadi. Bu ld ni ob'ektli fayllarni turli formatlarda o'qish, birlashtirish va yozish imkonini beradi --- masalan, COFF yoki "a.out". Turli xil shakllar birlashtirilishi mumkin bo'lgan har qanday ob'ektli faylni yaratish uchun birlashtirilishi mumkin.

Moslashuvchanligi bilan bir qatorda, diagnostika ma'lumotlarini taqdim qilishda GNU bog'laydigan boshqa yordamchilarga yordam beradi. Ko'p bog'laydiganlar xatoga yo'l qo'yganidan so'ng bajarilishini to'xtatishadi; iloji bo'lsa, ld boshqa xatolar (yoki ba'zi hollarda xatoga qaramasdan chiqdi faylini olish uchun) aniqlashga imkon beradigan ijro etilishini davom ettiradi.

GNU linker ld turli xil vaziyatlarni qamrab olishi va boshqa bog'laydiganlar bilan imkon qadar mos kelishi kerak. Natijada, uning xatti-harakatlarini nazorat qilish uchun ko'plab imkoniyatlar mavjud.

OPTIONS

Ulashtiruvchi buyruq qatori variantlarining ko'pligini qo'llab-quvvatlaydi, ammo amalda ularning bir qismi muayyan kontekstda ishlatiladi. Misol uchun, ld ning tez-tez ishlatilishi standart Unix ob'ekt fayllarini standart, qo'llab-quvvatlanadigan Unix tizimiga ulashdir . Bunday tizimda "hello.o" faylini bog'lash uchun:

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

Bu ld "/lib/crt0.o" faylini "hello.o" va "libc.a" kutubxonasiga standart qidiruv katalogidan keladigan bog'lanish natijasida hosil bo'lgan faylni ishlab chiqarishni bildiradi. (Quyidagi -l variantini ko'rib chiqing.)

Ld ga buyruq satrining ayrim variantlari buyruq satrining istalgan nuqtasida ko'rsatilishi mumkin. Biroq, -l yoki -T kabi fayllarga murojaat qiladigan variantlar, faylni ob'ekt fayllari va boshqa fayllar parametrlariga nisbatan buyruqlar qatorida ko'rsatiladigan nuqtada faylni o'qishga olib keladi. Boshqa parametrlarga ega bo'lmagan fayllarni takrorlash, ushbu parametrning hech qanday ta'siri yo'q yoki oldingi voqealarni (bu buyruq satrida chapdan tashqari) bekor qiladi. Quyidagi tavsiflarda bir necha marta aniq ifodalash mumkin bo'lgan variantlar ko'rsatilgan.

Variantlardan farqli argumentlar - bu ob'ektga bog'langan fayllar yoki arxivlar. Buyruq-satr variantlari bilan bog'lanishi, oldindan belgilanishi yoki ular bilan aralashishi mumkin, faqat bitta ob'ekt fayli argumenti parametr va uning argumenti o'rtasida joylashtirilishi mumkin emas.

Odatda linker kamida bitta ob'ekt fayli bilan chaqiriladi, lekin -l , -R va skript buyruq tili yordamida ikkilamchi kirish fayllarining boshqa shakllarini belgilashingiz mumkin. Hech qanday ikkilik kirish fayli aniqlanmagan bo'lsa, bog'lanuvchi hech qanday chiqit chiqarmaydi va xabarlarni kiritmaydi.

Agar bog'lanuvchi ob'ekt fayli formatini bila olmasa, bu unga bog'langan buyruq fayli hisoblanadi. Shu tarzda ko'rsatilgan skript bog`lanish uchun ishlatiladigan asosiy linker buyruq faylini (aslida linker skriptini yoki -T yordamida ishlatilgan) kuchaytiradi. Bu xususiyat linkerga ob'ekt yoki arxiv kabi ko'rinadigan faylga ulanish imkonini beradi, ammo aslida faqat ba'zi belgilar qiymatlarini belgilaydi yoki boshqa narsalarni yuklash uchun "INPUT" yoki "GROUP" dan foydalanadi. Ahamiyat berilishi kerak bo'lgan buyruq fayli faqat asosiy havolovchi skriptini kuchaytiradi; -T parametrini standart havolovchi skriptini butunlay o'zgartirish uchun foydalaning.

Nomlari bitta harf bo'lgan variantlar uchun parametrli argumentlar bo'sh joyga aralashmasdan variant harfiga rioya qilishlari yoki ularni talab qiladigan parametrdan so'ng alohida argumentlar sifatida berilishi kerak.

Nomlari bir nechta harflar bo'lgan variantlar uchun ikkita satr yoki ikkita variant nomidan oldin bo'lishi mumkin; Masalan, simetr va -trace-ramzi teng. Eslatma - bu qoida uchun bitta istisno mavjud. Agar kichik harf bilan boshlanadigan bir nechta harf variantlari faqat 'ikkitadan' bo'lishi mumkin. Bu -o parametri bilan chalkashliklarni kamaytirishdir. Masalan, masalan, - chiqdi fayl nomini sehrgarga sozlaydi , ammo - tomoshabin NMAGIC bayrog'ini chiqishda o'rnatadi.

Ko'p harfli variantlarga argumentlar variant nomidan teng belgilar bilan ajratilishi yoki ularni talab qiladigan variantdan darhol alohida argument sifatida berilishi kerak. Misol uchun, - fay va -trace-symbol = foo -rezey ramzlari teng. Ko'p harfli variantlarning nomlari noyob qisqartmalar qabul qilinadi.

Izoh - agar linker bilvosita, derivativ drayveri (masalan, gcc ) orqali chaqirilsa, barcha bog'laydigan buyruq qatori variantlari -wl (yoki ma'lum derivativ drayveri uchun mos keladigan) tomonidan quyidagi kabi bo'lishi kerak:

gcc -Wl, - boshlang'ich guruhi foo.o bar.o -Wl, - endgroup

Bu juda muhim, chunki aks holda kompilyator drayveri dasturi havolani moslashtiradigan variantlarni o'chirishi mumkin, natijada noto'g'ri bog'lanish bo'ladi.

GNU linker tomonidan qabul qilingan umumiy buyruq qatorni kalitlari jadvali:

- kalit so'z

Ushbu parametr, HP / UX muvofiqligi uchun faoliyat ko'rsatadi. Kalit so'z argumenti satrlari arxividan , birgalikda yoki standartdan biri bo'lishi kerak. - Archival funktsional -Bstatic uchun mos, ikkinchisi esa kalit so'zlar funktsional ravishda -Binamik . Ushbu parametr har qanday sonli marta ishlatilishi mumkin.

- Arxitektura

- arxitektura = arxitektura

Ld ning joriy versiyasida ushbu parametr Intel 960 arxitekturasi oilasi uchun foydalidir. Ushbu ld konfiguratsiyasida arxitektura argumenti 960 ta oiladagi ma'lum arxitekturani aniqlab, ba'zi himoya choralarini ta'minlab, arxiv-kutubxona qidirish yo'lini o'zgartiradi.

Ld ning keyingi versiyalari boshqa arxitektura oilalari uchun shunga o'xshash funksiyalarni qo'llab-quvvatlashi mumkin.

-b kirish formati

--format = kirish formati

ld bir nechta ob'ektli faylni qo'llab-quvvatlash uchun tuzilishi mumkin. Agar sizning ld shu tarzda tuzilgan bo'lsa, buyruq satrida ushbu parametrga amal qilgan kirish ob'ekti fayllari uchun ikkilik formatni aniqlash uchun -b parametrini ishlatishingiz mumkin. Ld muqobil ob'ektlar formatlarini qo'llab-quvvatlash uchun tuzilgan bo'lsa ham, odatda ld formatini har bir mashinada odatiy format sifatida odatiy format sifatida kutish uchun konfiguratsiya qilinishi kerak. input-formati - bu BFD kutubxonalari tomonidan qo'llab-quvvatlanadigan ma'lum formatdagi matnli matn. (Mavjud ikkilik formatlarni objdump -i bilan ro'yxatlashingiz mumkin .)

Fayllarni odatiy bo'lmagan ikkilik formatda bog'lasangiz, ushbu parametrdan foydalanishingiz mumkin. Bundan tashqari, formatlarni aniq shaklda (turli formatdagi ob'ektlar fayllarini birlashtirganda), -b kirish formatini har bir ob'ekt fayllaridan ma'lum formatda qo'shishdan foydalanishingiz mumkin.

Standart format "GNUTARGET" muhit o'zgaruvchisidan olinadi.

Siz shuningdek, "TARGET" buyrug'ini ishlatib, skriptdan kirish formatini belgilashingiz mumkin;

-c MRI-commandfile

--mri-skript = MRI-commandfile

MRG tomonidan ishlab chiqariladigan bog'laydiganlar bilan muvofiqlik uchun, ld GNU ld hujjatining MRI Compatible Script Files qismida tasvirlangan muqobil, cheklangan buyruqlar tilida yozilgan buyruq fayllarini qabul qiladi. MRI skript fayllarini " -c " variant bilan tanishtirish; umumiy maqsadi ld skript tilida yozilgan bog'li skriptlarni ishlatish uchun -T- ni ishlating. Agar MRI-cmdfile mavjud bo'lmasa, ld har qanday L- varianti ko'rsatilgan kataloglarda topiladi .

-d

-dc

-dp

Ushbu uch variant teng; boshqa formulalar bilan muvofiqligi uchun bir nechta shakllar qo'llab-quvvatlanadi. Ko'chirilgan chiqdi fayli ( -r ) bilan belgilangan bo'lsa ham, umumiy belgilarga joy ajratadi. "FORCE_COMMON_ALLOCATION" skript buyrug'i bir xil ta'sirga ega.

- Kirish

--entry = kirish

Standart kirish nuqtasi o'rniga dasturni ishga tushirish uchun kirishni aniq belgilar sifatida kiriting. Agar kirish belgisi bo'lmasa, bog'lanuvchi kirishni raqam sifatida ajratishga harakat qiladi va uni kirish manzili sifatida foydalanadi (bu raqam 10 taglikda talqin etiladi), siz asosiy 16 uchun 0x yoki asosiy 0 bazasi uchun 8).

-E

- eksport-dinamik

Dinamik ravishda bog'liq bo'lgan bajariladigan faylni yaratishda, barcha belgilarni dinamik belgilar jadvaliga qo'shing. Dinamik belgilar jadvali ish vaqti davomida dinamik narsalardan ko'rinadigan belgilar to'plamidir.

Agar siz ushbu parametrdan foydalanmasangiz, dinamik belgilar jadvali odatda faqatgina havolada eslatib o'tilgan ba'zi dinamik ob'ektga havola qilinadigan belgilarni o'z ichiga oladi.

Agar dinamik ob'ektni boshqa dinamik ob'ektga emas, balki dastur tomonidan belgilangan belgilarga murojaat qilish kerak bo'lgan "dlopen" dan foydalansangiz, dasturni o'zi bog'lashda siz ushbu parametrdan foydalanishingiz kerak bo'ladi.

Chiqish formati qo'llab-quvvatlasa, qaysi belgilar dinamik belgilar jadvaliga qo'shilishi kerakligini nazorat qilish uchun versiya skriptini ham ishlatishingiz mumkin. Versiyon { vers } - versiyadagi versiyasiga qarang.

-EB

Big-endian moslamalarni ulang. Bu standart chiqish formatiga ta'sir qiladi.

-EL

Kichkintoy ob'ektlarini bog'lang. Bu standart chiqish formatiga ta'sir qiladi.

-f

- yordamchi nom

ELF umumiy ob'ektini yaratishda, ichki DT_AUXILIARY maydonini belgilangan nomga o'rnating. Bu esa, birgalikda foydalaniladigan ob'ektning ramz jadvali birgalikda ob'ekt nomining ramziy jadvalida yordamchi filtr sifatida ishlatilishi kerakligini dinamik ravishda bog'laydi.

Keyinchalik dasturni ushbu filtr obyekti bilan bog'lab qo'ysangiz, dasturni ishga tushirganingizda DT_AUXILIARY maydoni paydo bo'ladi. Agar dinamik majburiy obyekt filtrdan biron-bir belgi bilan ishlamasa, avval birgalikda ob'ekt nomida ta'rif mavjudligini tekshiradi. Agar mavjud bo'lsa, u filtr obyektidagi ta'rif o'rniga ishlatiladi. Birgalikda ob'ekt nomi mavjud emas. Shunday qilib, muayyan funktsiyalarni muqobil ravishda amalga oshirish uchun, masalan, disk raskadrovka yoki mashinaning o'ziga xos ishlashi uchun birgalikda ob'ekt nomidan foydalanish mumkin.

Ushbu parametr bir martadan ortiq aniqlanishi mumkin. DT_AUXILIARY yozuvlari buyruq satrida ko'rsatiladigan tartibda yaratiladi.

-F nomi

- familiya nomi

ELF bilan birgalikda ob'ekt yaratishda, ichki DT_FILTER maydonini belgilangan nomga o'rnating. Bu esa, yaratilgan birlashgan ob'ektning ramz jadvali birgalikda ob'ekt nomining belgilar jadvali ustida filtri sifatida ishlatilishi kerakligi dinamik bog'lanishni bildiradi.

Keyinchalik dasturni ushbu filtr obyekti bilan bog'lab qo'ysangiz, dasturni ishga tushirganingizda DT_FILTER maydonini dinamik bog'laydigan ko'rasiz. Dinamik majburiy belgilar odatdagidek filtr obyekti belgilar jadvali bo'yicha hal qiladi, lekin u aslida birgalikda berilgan ob'ekt nomidagi identifikatorlarga bog'lanadi. Shunday qilib, filtr obyekti obyekt nomi bilan taqdim etilgan belgilarning pastki qismini tanlash uchun ishlatilishi mumkin.

Ayrim eski bog'langanlar, kirish va chiqish obyekti fayllari uchun obyekt fayl formatini belgilash uchun, derleme vositasi varag'i -F parametrini ishlatgan. GNU havolasi shu maqsadda boshqa mexanizmlardan foydalanadi: -b , --format , --format variantlari, bog'lanish skriptlarida "TARGET" buyrug'i va "GNUTARGET" muhit o'zgaruvchisi. ELF bilan birgalikda foydalaniladigan obyektni yaratmaganda, GNU bog'lanish vositasi -F parametrini e'tiborsiz qoldiradi.

- Fini nomi

Agar ELF executable yoki birgalikda ob'ekt yaratishda, DQ_FINI funksiyasining manziliga o'rnatib, bajariladigan yoki birgalikda foydalaniladigan ob'ektdan yuklanganida NAMEga qo'ng'iroq qiling. Odatiy bo'lib, bog'laydigan "_fini" funksiyasidan foydalanib qo'ng'iroq qilish vazifasi sifatida foydalanadi.

-g

E'tiborsiz. Boshqa vositalar bilan muvofiqligi uchun taqdim etiladi.

-G qiymati

--gpsize = qiymat

GP registri yordamida hajmi optimallashtiriladigan ob'ektlarning maksimal hajmini belgilang. Bu katta va kichik narsalarni turli bo'limlarga qo'yishni qo'llab-quvvatlaydigan MIPS ECOFF kabi ob'ektli fayl formatlari uchun mazmunga ega. Bu boshqa ob'ekt fayl formatlari uchun e'tiborsiz qilinadi.

- ism

-soname = nom

ELF bilan birgalikda ob'ekt yaratishda, ichki DT_SONAME maydonini belgilangan nomga o'rnating. Agar bajariladigan fayl DT_SONAME maydoniga ega bo'lgan umumiy obyekt bilan bog'langan bo'lsa, bajarilayotgan faylni ishga tushirganda, dinamik majburiy linkerga berilgan fayl nomini ishlatish o'rniga DT_SONAME maydonida ko'rsatilgan umumiy obyektni yuklashga urinadi.

-i

Qo'shimcha elementni amalga oshiring (parametr -r ).

- nomi

ELF executable yoki birgalikda ob'ekt yaratishda, bajariladigan yoki birgalikda ob'ekt yuklanganida NAMEga qo'ng'iroq qiling, DT_INIT funksiyasining manziliga o'rnatib. Odatiy bo'lib, bog'lanish uchun "_init" funksiyasi sifatida qo'ng'iroq qilish vazifasi qo'llaniladi.

-l arxivi

- librariya = arxiv

Arxiv fayllari arxivini havola qilinadigan fayllar ro'yxatiga qo'shing. Ushbu parametr har qanday sonli marta ishlatilishi mumkin. ld ko'rsatilgan har bir arxiv uchun "libarchive.a" ning paydo bo'lishi uchun uning yo'l-yo'riq ro'yxatini izlaydi.

Birgalikda kutubxonalarni qo'llab-quvvatlaydigan tizimlarda ld shuningdek, ".a" dan boshqa kengaytmali kutubxonalarni qidirishi mumkin. Xususan, ELF va SunOS tizimlarida ld , ".a" ning kengaytmasi bilan qidirishdan oldin ".so" ning kengaytmasi bo'lgan kutubxona uchun katalogni izlaydi. Konvensiya bilan ".so" kengaytmasi birgalikda kutubxonani ko'rsatadi.

Aloqachi arxivni faqat bir marta, buyruq satrida ko'rsatilgan joydan qidirishadi. Agar arxiv buyruq satrida arxiv oldidan paydo bo'lgan ob'ektda aniqlanmagan belgini aniqlasa, unda arxivdan tegishli fayl (lar) mavjud bo'ladi. Biroq, buyruq satrida keyinchalik paydo bo'ladigan ob'ektdagi aniqlanmagan belgilar, bog'lanuvchining arxivni qayta qidirishga olib kelmaydi.

- ( bog'lanuvchini qidirish arxivlariga bir necha marta majburlash uchun variantni ko'ring).

Buyruqlar satriga bir xil arxivni bir necha marta kiritishingiz mumkin.

Ushbu turdagi arxivlarni qidirish Unix linkers uchun standart hisoblanadi. Biroq, agar siz ld onAIX dan foydalanayotgan bo'lsangiz, bu AIX bağlayıcısının ishidan farq qiladi.

-L qidirish

- klibrary-yo'l = qidirish

Arxiv kutubxonalarini va ld nazorat skriptlarini qidiradigan yo'llarning ro'yxatiga yo'l qidirishni qo'shish. Ushbu parametrni istalgan sonli marta ishlatishingiz mumkin. Kataloglar buyruq satrida ko'rsatilgan tartibda tekshiriladi. Buyruqlar satrida ko'rsatilgan kataloglar sukut kataloglardan oldin qidiriladi. All- L imkoniyatlari variantlarning paydo bo'lish tartibidan qat'i nazar, barcha -l variantlariga qo'llaniladi.

Agar qidirish "=" bilan boshlangan bo'lsa, "=" sysroot prefiksi bilan o'zgartiriladi.

Qidiruv qilingan yo'llarning asl qiymati ( L bilan belgilanmagan) ld qaysi emulyatsiya rejimi ishlatilayotganligiga va ba'zi hollarda u qanday tuzilganiga bog'liq.

Yo'llar "SEARCH_DIR" buyrug'i bilan bog'lanish skriptida ham ko'rsatilishi mumkin. Ushbu yo'nalishda ko'rsatiladigan kataloglar buyruq satrida majburiy buyruq fayli paydo bo'ladigan joyda izlanadi.

-m emulyatsiyasi

Emulyatsiya havolasini taqlid qiling . Mavjud emulyatsiyalarni - " v" yoki " V" variantlari bilan topishingiz mumkin.

-m variantni ishlatilmasa, o'xshash bo'lsa, emulyatsiya "LDEMULATION" muhit o'zgaruvchisidan olinadi.

Aks holda, odatiy emulyatsiya linkerning qanday tuzilganiga bog'liq.

-M

- nashr xaritasi

Kontakt xaritasini standart chiqishga chop eting. Aloqa xaritasi quyidagilar bilan bog'liq havola haqida ma'lumot beradi:

*

Ob'ektli fayllar va belgilar xotirada saqlangan joylarda.

*

Umumiy belgilar qanday ajratiladi.

*

Arxiv a'zosiga olib kelingan barcha arxiv a'zolari ramzni eslab, havolaga qo'shildi.

-n

- yo'q

Bo'limlarning sahifa hizalamasını o'chirib qo'ying va iloji bo'lsa chiqdi "NMAGIC" deb belgilang.

-N

- Tomog'im

Matn va ma'lumotlar bo'limlarini o'qilishi mumkin va yoziladigan bo'lishi kerak. Bundan tashqari, ma'lumotlar segmentini sahifa hizalamang va birgalikda kutubxonalarga ulanishni o'chiring. Chiqish formati Unix uslubidagi sehrli raqamlarni qo'llab-quvvatlasa chiqdi "OMAGIC" deb belgilang.

- no-omagik

Ushbu parametr -N variantining aksariyat qismini bekor qiladi. Matn bo'limini faqat o'qish uchun belgilaydi va ma'lumotlar segmentini sahifaga moslashtiriladi. Eslatma - bu parametr birgalikda kutubxonalarga ulanishni ta'minlamaydi. Buning uchun -Binamik .

-o chiqishi

--put = chiqish

Ld tomonidan ishlab chiqarilgan dastur uchun nom sifatida chiqdi ; agar ushbu parametr aniqlanmasa, a.out nomi sukut bo'yicha ishlatiladi. "OUTPUT" skript buyrug'i chiqdi fayl nomini ham ko'rsatishi mumkin.

-O darajasi

Agar daraja noldan katta qiymatlar bo'lsa ld chiqishni optimallashtiradi. Bu ancha vaqt talab qilishi mumkin, shuning uchun ehtimol, faqat oxirgi ikkilik uchun faollashtirilgan bo'lishi kerak.

-q

- Emit-relocs

Joylashuv bo'limlari va tarkibi to'liq bog'langan exececutables ichida qoldiring. Post-bog'lanishni tahlil qilish va optimallash vositalaridan ushbu ma'lumotlarning bajarilishi mumkin bo'lgan o'zgarishlarni amalga oshirish uchun kerak bo'lishi mumkin. Bu esa, katta fayllarni ishga tushirishga olib keladi.

Ushbu parametr faqat ELF platformalarida qo'llab-quvvatlanadi.

-r

- o'zaro bog'liq

Ko'chirib olinadigan ishlab chiqarishni yaratish --- ya'ni ld ga kirish sifatida xizmat qilishi mumkin bo'lgan chiqdi faylini yaratadi. Bu qisman qisman bog'lanish deb ataladi. Yon ta'sir sifatida standart Unix sehrli raqamlarini qo'llab-quvvatlaydigan muhitda ushbu parametr chiqdi faylining sehrli raqamini "OMAGIC" ga o'rnatadi. Ushbu parametr aniqlanmasa, mutlaq fayl ishlab chiqariladi. C ++ dasturlarini ulashda ushbu parametr konstruktorlarga havola qilinmaydi ; Buni amalga oshirish uchun -Ur .

Agar kirish fayli chiqdi fayli bilan bir xil formatga ega bo'lmasa, qisman ulanish faqatgina ushbu kirish fayli hech qanday joylashtirishni o'z ichiga olmasa qo'llab-quvvatlanadi. Turli chiqish formatlari boshqa cheklovlarga ega bo'lishi mumkin; masalan, ba'zi "a.out" asosidagi formatlar boshqa formatlarda kiritilgan fayllar bilan qisman bog'lanishni qo'llab-quvvatlamaydi.

Ushbu parametr -i -i bilan bir xil bo'ladi.

-R fayl nomi

--just-belgilar = fayl nomi

Belgilar nomlarini va ularning manzillarini fayl nomidan bering, lekin uni joyiga joylashtirmang yoki uni chiqishda qo'shmang. Bu sizning chiqish faylingiz boshqa dasturlarda aniqlangan xotiraning aniq joylariga ramziy ravishda murojaat qilish imkonini beradi. Ushbu parametrni bir necha marta ishlatishingiz mumkin.

Boshqa ELF havolalari bilan muvofiqligi uchun, agar -R parametrini fayl nomi emas, balki katalog nomi bilan izlasa , u -rpath opsiyasi sifatida ko'rib chiqiladi.

-s

- hamma joyda

Chiqish faylidan barcha simvol ma'lumotlarini tashlamang.

-S

- tortish-disk raskadrovka

Chiqish faylida xato ayıklayıcı simvol ma'lumotlarini (lekin barcha belgilar emas) tashlang.

-t

- Tinchlik

Ld ishlov berish jarayonida kirish fayllari nomlarini chop eting .

-T skript fayl

--script = scriptfile

Buyruqlar skripti sifatida scriptfile foydalaning. Ushbu buyruq fayli ld ning default linker skriptini o'rniga qo'yadi (shuning uchun uni qo'shishdan tashqari), shuning uchun buyruq faylida chiqish faylini tavsiflash uchun zarur bo'lgan barcha ma'lumotlarni ko'rsatish kerak. Agar skript fayli joriy papkada mavjud bo'lmasa, "ld" oldingi L- varianti ko'rsatilgan kataloglarda uni izlaydi. Ko'p- T variantlari yig'iladi.

-u belgisi

- Belgilangan = ramz

Chiqish faylida belgining aniqlanmagan belgisi sifatida kiritilishi kerak. Buni bajarish, masalan, standart kutubxonalardan qo'shimcha modullarni bog'lashga yordam beradi. Qo'shimcha belgilanmagan belgilarni kiritish uchun turli parametrli argumentlar bilan -u takrorlanishi mumkin. Ushbu parametr, "EXTERN" majburiy buyruq fayli buyrug'iga tengdir.

-Ur

C ++ dasturlaridan boshqa biror narsa uchun, bu parametr -r : bu relocatable output ishlab chiqaradi - ya'ni, chiqish fayli, o'z navbatida ld ga kirish sifatida xizmat qilishi mumkin. C ++ dasturlarini ulashda, -Ur -r dan farqli ravishda konstruktorlarga havolalarni aniqlaydi . U foydalanish uchun ishlamaydi -Ur bilan bog'langan fayllarda -Ur ; Konstruktor jadvali qurilgach, uni qo'shib bo'lmaydi. Faqat oxirgi qisman aloqa uchun - va boshqalar uchun - foydalaning.

- taniqli [= BOB ]

Har bir etimning kirish qismiga mos keladigan har bir kirish bo'limi uchun alohida bo'linish bo'limi yaratiladi , yoki agar ixtiyoriy joker belgi argumenti bo'lmasa. Bir etim bo'limi, bog'lanuvchi skriptida aniq aytilmagan. Ushbu parametrni buyruq qatorida bir necha marta ishlatishingiz mumkin; Bu kirish qismlarini bir xil nomdagi oddiy birlashuvga to'sqinlik qiladi, bog`lanishni bajarish bo`yicha topshiriqlarni bloker skriptida bekor qiladi.

-v

- o'zgartirish

-V

Ld uchun versiya raqamini ko'rsatish. -V variantida qo'llab-quvvatlanadigan emulyatsiyalar ham ro'yxatlanadi.

-x

- debdi

Barcha mahalliy belgilarni o'chirish.

-X

- mahalliy aholi

Barcha vaqtinchalik mahalliy belgilarni o'chirish. Ko'pgina maqsadlar uchun, bu ismlar L bilan boshlangan mahalliy belgilar.

-y belgisi

--trace-symbol = belgisi

Belgining paydo bo'lgan har bir bog'langan fayl nomini chop eting. Ushbu tanlov har qanday sonli marta berilishi mumkin. Ko'pgina tizimlarda pastki chiziqni qo'yish kerak.

Ushbu parametr sizning havolangizda aniqlanmagan belgingizga ega bo'lganingizda foydali bo'lsa-da, ma'lumotdan qaerdan kelganligini bilmaymiz.

Yo'l

Standart kutubxona qidirish yo'lini qo'shish. Ushbu parametr, Solaris muvofiqligi uchun mavjud.

-z kalit so'z

Tanilgan kalit so'zlar "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" va "nocopyreloc ". Boshqa kalit so'zlar Solaris muvofiqligi uchun e'tibordan chetda. "initfirst" ob'ektni boshqa ob'ektlar oldidan ishga tushirish vaqtida boshlash uchun belgilanadi. "Interped" belgisi, uning belgisi jadvalining barcha belgilar oldida joylashtirilganligini, lekin asosiy bajariladigan faylni belgilaydi. "loadfltr" ob'ektni o'z vaqtida ishlov berish vaqtida ishlov berishini belgilaydi. "nodefaultlib" bu obyektning bog'liqligini qidirishni e'tiborsiz qoldiradigan ob'ektni belgilaydi har qanday standart kutubxona qidirish yo'llari. "Nodelete" belgilari ob'ektni ish vaqtida tushirmasligi kerak. "nodlopen" "dlopen" uchun mavjud bo'lmagan ob'ektni belgilaydi. "nodump" belgilari ob'ektni "dldump" da qoldirib bo'lmaydi. "Hozir" obyektni band bo'lmagan ish vaqti bilan bog'laydi. "origin" belgilari ob'ekt $ ORIGIN bo'lishi mumkin. "defs" belgilanmagan belgilarga ruxsat bermaydi. "muldeflar" ko'plab ta'riflarni beradi. "combreloc" bir nechta reloc qismlarini birlashtiradi va ularni dinamik belgilar qidirishni keshlashni amalga oshiradi.

"nocombreloc" bir nechta relok bo'limlarini birlashtiradi. "nocopyreloc" replikatsiya relocslarini ishlab chiqaradi.

- ( arxivlar -)

- boshlang'ich guruh arxivlari - guruh

Arxivlar arxiv fayllari ro'yxati bo'lishi kerak. Ular aniq fayl nomlari yoki -l variantlari bo'lishi mumkin.

Belgilangan arxivlar yangi aniqlanmagan arizalar yaratilmaguncha qayta-qayta izlanadi. Odatda, arxiv buyruq satrida ko'rsatilgan tartibda faqat bir marta teriladi. Agar arxivda aniqlanmagan belgini yo'qotmaslik uchun arxivda biror belgi kerak bo'lsa, keyinchalik buyruq satrida paydo bo'ladigan arxivda ushbu havolani ushbu moslamani hal qila olmaydi. Arxivlarni guruhlash orqali barcha mumkin bo'lgan zikrnomalar hal bo'lmaguncha, ularning hammasi qayta-qayta tekshiriladi.

Ushbu parametrdan foydalanish muhim ishlash qiymatiga ega. Ikki yoki undan ortiq arxivlar orasida muqarrar dairesel arizalar bo'lsa, uni ishlatish yaxshidir.

- kirish-noma'lum-kirish-kamar

- no-qabul-noma'lum-kirish-kamar

Me'morchilikni tanib bo'lmaydigan mantiqiy ob'ektni qabul qilish fayllarini qabul qiluvchiga bildiradi. Bu taxmin, foydalanuvchi nima qilayotganini biladi va bila turib, bu noma'lum kirish fayllarini bog'lashni xohlaydi. Bu 2.14 versiyasini chiqarishdan oldin, bog'lanuvchining ko'rsatuv xatti-harakati edi. 2.14-sonli versiyadan ko'rsatuv xatti-harakati bunday kirish fayllarini rad qilishdir, shuning uchun eski yo'lni qayta tiklash uchun - kirish-noma'lum-input-arch parametri qo'shildi.

kalit so'zni kiriting

Ushbu parametr SunOS muvofiqligi uchun e'tiborsiz.

-Binamik

-y

-kall_shared

Dinamik kutubxonalarga qarshi bog'lanish. Bu umumiy kutubxonalar qo'llab-quvvatlanadigan platformalarda faqat mazmunli. Ushbu parametr, odatda, bunday platformalarda standart hisoblanadi. Ushbu parametrning turli xil variantlari turli xil tizimlar bilan mos kelish. Ushbu parametrni buyruq satrida bir necha marta ishlatishingiz mumkin: u kutubxonani qidirishga ta'sir qiladigan -l variantlarini ta'sir qiladi.

-Bgrup

Dinamik bo'limdagi "DT_FLAGS_1" yozuvida "DF_1_GROUP" bayroqini o'rnating. Bu ish vaqti moslamasini ushbu obyektda qidirishni va uning bog'liqligini faqatgina guruh ichida bajarishga olib keladi. - Yo'q, aniqlanmagan . Ushbu parametr faqat birgalikda kutubxonalarni qo'llab-quvvatlaydigan ELF platformalarida mazmunli bo'ladi.

-Bstatik

-dn

-non_shared

-statik

Birgalikda kutubxonalar bilan bog'lanmang. Bu umumiy kutubxonalar qo'llab-quvvatlanadigan platformalarda faqat mazmunli. Ushbu parametrning turli xil variantlari turli xil tizimlar bilan mos kelish. Ushbu parametrni buyruq satrida bir necha marta ishlatishingiz mumkin: u kutubxonani qidirishga ta'sir qiladigan -l variantlarini ta'sir qiladi.

-Bimsbolik

Birgalikda kutubxonani yaratishda umumiy simvollarga havolalar, agar bo'lsa, birgalikda kutubxona ichidagi ta'rifga bog'lang. Odatda, birgalikda kutubxonaga biriktirilgan dastur birgalikda kutubxonada ta'rifni bekor qilish uchun mumkin. Ushbu parametr faqat birgalikda kutubxonalarni qo'llab-quvvatlaydigan ELFplatformlarda muhimdir.

- tekshirish bo'limlari

- tekshiruvlar bo'limi yo'q

Ularning o'zaro o'xshashligini tekshirish uchun tayinlanganidan so'ng, bog'lanuvchi manzilni tekshirishni so'ramaydi. Odatda linker bu tekshiruvni amalga oshiradi va agar u biron-bir chalkashliklarni topsa, u holda tegishli xato xabarlarni chiqaradi. Ulashtiruvchi biladi va qoplamalarda bo'linishlar uchun yordam beradi. Standart xatti-buyruq satri switch -check-bo'limlari yordamida tiklanishi mumkin.

- vodoprovod

O'zaro o'zaro mos yozuvlar jadvalini chiqaring. Birlashtiruvchi xarita fayli yaratilsa, xarita fayliga o'zaro mos yozuvlar jadvali yoziladi. Aks holda, standart chiqdi ustida yazdırılır.

Jadvalning formati qasddan oddiy bo'lib, kerak bo'lganda skript yordamida osongina ishlov berilishi mumkin. Ramzlar nashr qilinadi, ismga ko'ra tartiblanadi. Har bir belgi uchun fayl nomlari ro'yxati berilgan. Agar ramz aniqlansa, unda birinchi fayl ro'yxatga olingan joydir. Qolgan fayllar belgiga havolalar kiradi.

- no-define-common

Ushbu parametr, manzillarning umumiy belgilarga tayinlanishini inhibe qiladi. "INHIBIT_COMMON_ALLOCATION" skript buyrug'i bir xil ta'sirga ega.

- " no-common" umumiy tanlovi, chiqish fayllari turini tanlovdan manzillarni tayinlash to'g'risidagi qarorni dekompilyatsiya qilish imkonini beradi; aks holda ko'chirilmaydigan chiqiladigan turdagi manzillar umumiy belgilarga manzillarni tayinlaydi. Yo'q-shoshmasdan umumiy foydalanish umumiy kutubxonaga havola qilinadigan umumiy belgilar faqatgina asosiy dasturda manzillarni tayinlash imkonini beradi. Bu birgalikda kutubxonada foydalanilmagan nusxadagi bo'sh joyni yo'q qiladi va ish vaqti simvolli o'lchamlari uchun maxsus qidirish yo'llari mavjud bo'lgan ko'plab dinamik modullar mavjud bo'lganda, nosog'lom echimlarni hal qilishda mumkin bo'lgan chalkashlikni oldini oladi.

--Defsym ramzi = ifoda

Chiqish faylida ifoda bilan berilgan mutlaq manzilni o'z ichiga olgan global simvol yarating. Ushbu parametrni buyruq satrida bir nechta belgi aniqlash uchun kerakli darajada ishlatishingiz mumkin. Bu erda ifoda qilish uchun cheklangan arifmetik usul qo'llab-quvvatlanadi: onaltılık sobit yoki mavjud belgining nomini berish yoki "o'n" yoki "-" dan o'n oltita soniyalik sobit yoki belgilarni chiqarish uchun foydalaning. Agar siz batafsil ifodalarga ega bo'lishni istasangiz, linker buyruq tilini skriptdan foydalanishni o'ylab ko'ring. Eslatma: belgilar orasidagi bo'sh joy bo'lmasligi kerak, teng belgisi (`` = '') va ifoda .

--Daniklik [= tarzi ]

- Yo'q

Ushbu variantlar xato xabarlarida va boshqa chiqishda simvollar nomlarini taqqoslashni boshqaradi. Ulashtiruvchi demangle aytilganida, ramz nomlarini o'qiy olish mumkin bo'lgan usulda ko'rsatishga harakat qiladi: ular ob'ekt fayl formati orqali foydalanilsa, pastki chiziqni chiziqlar bilan belgilab qo'yadi va C ++ bilan ishlangan simvollar nomlarini foydalanuvchi tomonidan o'qiladigan nomlarga o'zgartiradi. Turli xil kompilyatorlar turli xil tortishish uslublariga ega. Majburiy emas demangling uslubi argumenti sizning kompilyatoringiz uchun mos keladigan demangling uslubini tanlash uchun ishlatilishi mumkin. COLLECT_NO_DEMANGLE atrof-muhit o'zgaruvchisi o'rnatilmagan bo'lsa, sukut bo'yicha ajratuvchi bo'ladi. Ushbu parametrlar standartni bekor qilish uchun ishlatilishi mumkin.

- dinamik-bog'laydigan fayl

Dinamik majburiy nomini o'rnating. Bu faqat dinamik ravishda bog'langan ELF executable fayllarini ishlab chiqarishda mazmunli bo'ladi. Standart dinamik majburiy ulanish odatda to'g'ri; Nima qilayotganingizni bilmasangiz, buni ishlatmang.

- o'rnatilgan reloklar

Ushbu parametr MIPS-ning o'rnatilgan PIC kodini, -membreded-pic parametr bilan GNU-kompilyator va assembler-ga ulashda faqatgina mazmunli bo'ladi. U bog'laydiganga ko'rsatgich qiymatlari uchun statik ravishda boshlangan har qanday ma'lumotlarni ko'chirish uchun ishlatish vaqtida ishlatilishi mumkin bo'lgan jadvalni yaratishga sabab bo'ladi. Ma'lumotlar uchun testuite / ld-empic dagi kodni ko'ring.

- o'lik ogohlantirishlar

Barcha ogohlantirishlarni xatolik deb hisoblang .

--force-exe-suffix

Chiqish faylida .exe sufikasi mavjudligiga ishonch hosil qiling.

Agar muvaffaqiyatli qurilgan to'liq bog'langan chiqish faylida ". Exe " yoki " .dll " sufixi mavjud bo'lmasa, ushbu parametr bog'lanuvchini chiqish faylini ".exe" qo'shimchasi bilan bir xil nomga nusxalashga majbur qiladi. Ushbu parametr Microsoft Windows xostidagi unmodifatsiyalangan Unix makefile foydalanishda foydalidir, chunki Windows versiyalari ".exe" qo'shimchasida tugamaguncha tasvirni ishlamaydi.

- Yo'q-gc-bo'limlari

--gc-bo'limlari

Foydalanilmay qolgan kirish qismlarini chiqindilarni yig'ishni yoqish. Ushbu parametrni qo'llab-quvvatlamaydigan maqsadlarda e'tiborga olinmaydi. Ushbu parametr -r bilan mos emas va dinamik ulanish bilan ham foydalanilmasligi kerak. Odatiy xatti-harakatlar (bu axborotlar to'plamini bajarmaslik) buyruq satrida - no-gc-bo'limlarini ko'rsatib tiklanadi.

--Yordam bering

Standart chiqish va chiqishdagi buyruq qatorlari parametrlarini qisqacha yozing.

--target-yordam

Standart chiqish va chiqishdagi barcha maqsadli maxsus variantlarning sarlavhasini chop eting.

-Map xaritasi

Fayl xaritasi fayliga havola xaritasini chop eting . Yuqoridagi -M variantini ko'ring.

- no-keep-memory

odatda xotirada kirish fayllari ramz jadvallarini keshlash orqali xotira ishlatish tezligi uchun optimallashtiradi. Ushbu parametr ld- ni xotiradan foydalanishni optimallashtiradi, shuning uchun kerak bo'lganda ramz jadvallarini qayta o'qiydi. Agar ld ishlamay qolsa, unda katta hajmdagi bajariladigan xotirani bajarish kerak.

- Yo'q, aniqlanmagan

-z defs

Odatda, ramziy bo'lmagan birlashgan kutubxonani yaratishda, aniqlanmagan belgilarga ruxsat beriladi va ish vaqti yuklayotgan tomonidan hal qilinadi. Bunday imkoniyatlar bunday noma'lum belgilarga ruxsat bermaydi.

- butunlay ko'plab ta'riflar

-z mulduflar

Odatda, ramz bir necha marta aniqlanganida, bog'lanuvchi o'lik xato haqida xabar beradi. Ushbu variantlar bir nechta ta'riflarga ruxsat beradi va birinchi ta'rif ishlatiladi.

- Allow-shlib-undefined

Belgilangan belgilar umumiy moslamalarda ham - no-undefined o'rnatilganda ham ruxsat berilsin. Net natija muntazam ob'ektlardagi aniqlanmagan belgilar hali ham xatoga yo'l qo'yadi, lekin umumiy moslamalarda aniqlanmagan belgilar e'tiborga olinmaydi. No_undefined dasturini bajarish, ish vaqti moslashtiruvchisi aniqlanmagan belgilarga barbod bo'lishini taxmin qiladi. Shu bilan birga, kamida bitta tizim (BeOS) mavjud, chunki umumiy kutubxonalarda aniqlanmagan belgilar normaldir, chunki yadro ularni joriy me'morchilikka eng mos bo'lgan funksiyani tanlash uchun ularni yuk vaqtida joylashtiradi. IE, tegishli memset vazifasini dinamik ravishda tanlaydi. Ehtimol, HPPA bilan birgalikda kutubxonalarda aniqlanmagan belgilarga ega bo'lish odatiy holdir.

- no-undefined-versiya

Odatda, belgining aniqlanmagan versiyasi mavjud bo'lsa, havola uni e'tiborsiz qoldiradi. Ushbu parametr belgilanmagan versiyasi bo'lgan belgilarga ruxsat bermaydi va buning o'rniga o'lik xato bo'ladi.

- ogohlantirilmasligi

Ehtimol, ular turli xil protsessorlar uchun yoki turli xil endiannesslar uchun tuzilganligi sababli, ba'zi sabablarga ko'ra noto'g'ri kiritilgan kirish fayllarini birlashtirishga harakat qilsangiz, odatda ld xato qiladi. Ushbu parametr, ld bunday jiddiy xatolarga ruxsat berish kerakligini bildiradi. Ushbu parametr faqatgina bog'lanishdagi xatolar noto'g'ri ekanligini ta'minlaydigan ba'zi bir maxsus harakatlardan foydalangan holda ehtiyotkorlik bilan ishlatilishi kerak.

- butunlay-arxiv

Keyingi arxiv fayllari uchun - argument- ni tanlang.

- noinhibit-exec

Amalga oshirish mumkin bo'lgan har qanday faylni saqlab qoling. Odatda, bog'lanish jarayonida xatolarga duch kelgan bo'lsa, bog'lanuvchi chiqdi fayli hosil qilmaydi; har qanday xatolik yuzaga kelganda chiqdi faylini yozmasdan chiqadi.

-nostdlib

Faqat buyruq satrida aniq ko'rsatilgan qidirish kutubxonasi kataloglari. Linker skriptlarida ko'rsatilgan buyruqli kataloglar (buyruq satrida ko'rsatilgan bog'langan skriptlar) e'tiborga olinmaydi.

--format formati

ld bir nechta ob'ektli faylni qo'llab-quvvatlash uchun tuzilishi mumkin. Agar sizning ld shu tarzda tuzilgan bo'lsa, chiqish obyekti faylining ikkilik formatini ko'rsatish uchun --toformat- ni ishlating. Ld muqobil ob'ekt formatlarini qo'llab-quvvatlash uchun tuzilgan bo'lsa ham, odatda ld formatini har bir mashinada odatiy format sifatida ishlab chiqarish uchun konfiguratsiya qilinishi kerak. output-formati - BFD kutubxonalari tomonidan qo'llab-quvvatlangan ma'lum formatdagi matnning matnli satridir. (Siz objdump -i bilan mavjud ikkilik formatlarni ro'yxatga olishingiz mumkin.) "OUTPUT_FORMAT" skript buyrug'i ham chiqish formatini belgilashi mumkin, lekin bu parametr uni bekor qiladi.

-qarmik

Ushbu parametr Linuxning muvofiqligi uchun e'tibordan chetda.

-Qy

Ushbu parametr SVR4 muvofiqligi uchun e'tibordan chetda.

--Rohatlaning

Mashina qaram ta'sirli variant. Ushbu parametr faqat bir nechta maqsadlarda qo'llab-quvvatlanadi.

Ba'zi platformalarda, --relax parametri, manzilni rejalashtirishning qulay usullari va chiqish obyekti faylidagi yangi ko'rsatmalarni sintez qilish kabi dasturda adreslashni bartaraf qilishda mumkin bo'lgan global optimallashlarni amalga oshiradi.

Ba'zi platformalarda ushbu havola vaqtining global optimallashtirish natijalaridan kelib chiqadigan ishning ramziy nosozligi bo'lishi mumkin emas. Bu Matsushita MN10200 va MN10300 protsessorlari oilasi uchun ma'lum.

Bu qo'llab-quvvatlanmaydigan platformalarda - shlyax qabul qilinadi, ammo e'tiborsiz qoldiriladi.

--Reyting-fayl-fayl nomi

Faqat faylning fayl nomida ro`yxatdan o`tgan belgilarni qo`llab-quvvatlab , boshqalarni bekor qiling. fayl nomi shunchaki tekis fayl bo'lib, har bir satrda bitta ramz nomi mavjud. Ushbu parametr ayniqsa, ish vaqti xotirasini saqlab qolish uchun keng miqyosli global belgilar jadvali asta-sekin to'planadigan muhitlarda (VxWorks kabi) foydalidir.

--Reyting-belgilar-fayl noma'lum belgilarni yoki ko'chirish uchun zarur bo'lgan belgilarni olib tashlamaydi.

Buyruqlar satriga faqat bir marta - belgilar-fayllarni ko'rsatishingiz mumkin. U-va- S-ni bekor qiladi.

-rpath dir

Ishlash davridagi kutubxona qidirish yo'liga katalog qo'shish. Bu ELFexecutableni umumiy moslamalarni ulashda ishlatiladi. All- path argumentlari birlashtirilgan va ish vaqti moslamasiga o'tkaziladi, bu esa ularni ish vaqtida birgalikdagi obyektlarni topish uchun ishlatadi. -rpath opsiyasi, ulanishga ochiq bo'lgan birgalikdagi moslamalarni talab qiladigan umumiy moslamalarni topishda ham ishlatiladi; -rpath-link variantini tavsifiga qarang. ELF executableni ulashda -ppath ishlatilmasa, "LD_RUN_PATH" atrof-muhit o'zgaruvchining tarkibi aniqlangan taqdirda ishlatiladi.

-Parayol opsiyasi SunOS da ishlatilishi mumkin. Odatiy bo'lib, SunOS-da, linker berilgan barcha L variantlaridan ish vaqtini qidirish patchini hosil qiladi. Agar -rpath parametri ishlatilsa, ish vaqti qidirish yo'li faqat -r- path-ni ishlatib, -L parametrlarini e'tiborsiz qoldiradi. Bu nFSga biriktirilgan fayl tizimlarida bo'lishi mumkin bo'lgan ko'p- L variantlarini qo'shadigan gcc dan foydalanishda foydali bo'lishi mumkin.

Boshqa ELF havolalari bilan muvofiqligi uchun, agar -R parametrini fayl nomi emas, balki katalog nomi bilan izlasa , u -rpath opsiyasi sifatida ko'rib chiqiladi.

-rpath-link DIR

ELF yoki SunOS dan foydalanilganda, birgalikda bitta kutubxona boshqasini talab qilishi mumkin. Bu, "ld -shared" havolasida ulangan kutubxonani kirish fayllaridan biri sifatida ko'rsatsa bo'ladi.

Ulashtiruvchi, joylashtirilmagan, ko'chirilmaydigan havola qilganda bunday bog'lanishga duch kelganida, u avtomatik tarzda kerakli birgalikda kutubxonani topishga urinib ko'radi va agar u ochiq-oydin ko'rsatilgan bo'lsa, uni havolaga kiritadi. Bunday holatda, -rpath-link parametrlari izlash uchun kataloglarning birinchi to'plamini belgilaydi. -rpath-link parametrida katalog nomlari ketma-ketligini belgilash mumkin yoki ular ikki nuqta bilan ajratilgan ismlar ro'yxatini yoki bir necha marta aks ettirilishi mumkin.

Ushbu parametrni ehtiyotkorlik bilan ishlatish kerak, chunki u birgalikda bir kutubxonaga to'plangan bo'lishi mumkin bo'lgan qidirish yo'lini bekor qiladi. Bunday holatda, ish vaqti moslamasini amalga oshirishi mumkin bo'lganidan farqli ravishda boshqa qidiruv usulini ishlatish mumkin.

Ulashtiruvchi kerakli almashinadigan kutubxonalarni topish uchun quyidagi qidirish yo'llarini ishlatadi.

1.

-rpath-link- variantlari bilan belgilangan har qanday katalog.

2.

-Rar yo'llari bilan belgilangan barcha kataloglar. -rpath va -rpath-link orasidagi farq , -rpath- parametrlari bilan belgilangan kataloglar executable-ga kiritilgan va ishlatish vaqtida ishlatilgan bo'lsa, -rpath-link opsiyasi faqat havola vaqtida samarali bo'ladi. Bu faqat mahalliy aloqa uchun.

3.

Agar ELF tizimida, agar " rpath" va "rpath-link" variantlari ishlatilmasa, "LD_RUN_PATH" muhit o'zgaruvchining tarkibini qidiring. Bu faqat mahalliy aloqa uchun.

4.

SunOS-da, -rpath variantini ishlatmasangiz, -L parametrlaridan foydalanib ko'rsatiladigan biron-bir katalogni qidiring.

5.

Mahalliy bog'lanuvchi uchun "LD_LIBRARY_PATH" muhit o'zgaruvchining tarkibi.

6.

Bir mahalliy ELF havolasi uchun, birgalikda kutubxonaning "DT_RUNPATH" yoki "DT_RPATH" dagi kataloglar tomonidan talab qilinadigan umumiy kutubxonalar izlanadi. "DT_RPATH" yozuvlari "DT_RUNPATH" yozuvlari mavjud bo'lsa, ular e'tiborsiz qilinadi.

7.

Standart katalog, odatda / lib va / usr / lib .

8.

Agar ELF tizimidagi mahalliy bog'lanish uchun /etc/ld.so.conf fayl mavjud bo'lsa, ushbu faylda joylashgan kataloglar ro'yxati.

Kerakli birgalikda kutubxona topilmasa, havolani ogohlantirishi va havolani davom ettiradi.

- dedi

-Barshli

Birgalikda kutubxona yaratish. Bu hozir faqat ELF, XCOFF va SunOS platformalarida qo'llab-quvvatlanadi. SunOS-da, agar -e- tanlovi ishlatilmasa va havolada aniqlanmagan belgilar mavjud bo'lsa, linker avtomatik ravishda birgalikda kutubxona yaratadi.

- umumiy ko'rinish

Ushbu parametr, ld- ni muvofiq chiqdi bo'limlariga joylashtirganda umumiy belgilarni kattaligiga ko'ra tartiblashtirishni bildiradi. Birinchidan, barcha bayt belgilar, so'ngra barcha ikki bayt, keyin to'rtta bayt va undan keyin hamma narsa bo'ladi. Bu hizalanma cheklovlari sababli belgilar orasidagi bo'shliqlarning oldini olish.

--split-by-file [ size ]

--split-by-relocga o'xshash, ammo o'lchamga etib kelgan har bir kirish fayli uchun yangi chiqish qismini yaratadi. agar hajmi berilmagan bo'lsa, hajmi 1 ga teng.

--split-by-reloc [ son ]

Chiqish faylida qo'shimcha bo'limlarni yaratishga urinadi, shuning uchun faylda bitta chiqish bo'limi hisobni ko'chirishdan ko'proq narsani o'z ichiga olmaydi. Bu COFF ob'ekt fayl formati bilan muayyan real vaqtda yadrolarga yuklab olish uchun katta ko'chirilgan fayllarni yaratishda foydalidir; chunki COFFcannot bir bo'lakda 65535 dan ortiq ko'chishni namoyish etadi. Bu tasodifiy bo'limlarni qo'llab-quvvatlamaydigan ob'ektli fayl formatlari bilan ishlay olmaydi. Ulashtiruvchi qayta taqsimlash uchun alohida kirish qismlarini ajratmaydi, shuning uchun agar bitta kirish bo'limi hisoblarni ko'chirishdan ko'p bo'lsa, bitta chiqish bo'limi ko'plab relokatsiyalarni o'z ichiga oladi. qiymati 32768 qiymatiga teng.

- stats

Ishlash vaqti va xotiradan foydalanish kabi bog'lanuvchining ishlashi to'g'risida statistikani hisoblang va ko'ring.

- an'anaviy format

Ayrim maqsadlar uchun, ld ning chiqishi ba'zi bir usullar bilan mavjud bo'lgan bog'lanuvchilarning chiqishidan farq qiladi. Ushbu switch an'anaviy formatni ishlatish uchun ld so'raydi.

Misol uchun, SunOS da, ld simvollar jadvali jadvalidagi takroriy yozuvlarni birlashtiradi. Bu to'liq disk raskadrovka ma'lumoti bilan chiqish faylining hajmini 30 foizdan kamroq miqdorda kamaytirishi mumkin. Afsuski, SunOS "dbx" dasturi dasturni o'qiy olmaydi ("gdb" ning muammosi yo'q). - an'anaviy formatli kalit ld ni ikki nusxadagi yozuvlarni birlashtirishga chaqiradi .

--section-start sectionname = org

Chiqish faylidagi bo'limni org tomonidan berilgan mutlaq manzilda toping. Ushbu parametrni buyruq satrida bir nechta bo'limni topish uchun kerakli darajada ishlatishingiz mumkin. org o'n bitta o'n sakkiz xonali son bo'lishi kerak; Boshqa bog'laydiganlar bilan moslashish uchun odatda onaltılık qiymatlar bilan bog'langan etakchi 0xni qoldirishingiz mumkin. Eslatma: sectionname , tenglik belgisi (`` = '') va org o'rtasida hech qanday bo'sh joy bo'lmasligi kerak.

-Tabless org

-Tadata org

Matn tahririyati

--- "Start" manzilini --- "bss", "ma'lumotlar" yoki chiqish faylining "matn" segmenti sifatida ishlatish. org o'n bitta o'n sakkiz xonali son bo'lishi kerak; Boshqa bog'laydiganlar bilan moslashish uchun odatda onaltılık qiymatlar bilan bog'langan etakchi 0xni qoldirishingiz mumkin.

- Dpl-verbose

- shunchaki

Ld uchun versiya raqami ko'rsatiladi va qo'llab-quvvatlanadigan bog'lanuvchi emulyatsiyalari ro'yxati. Qaysi kirish fayllari ko'rsatilishi mumkin va ochilmasligini ko'rsatish. Linker tomonidan ishlatiladigan bog'laydigan skriptni ko'rsatish.

--version-script = version-scriptfile

Ulanish versiyasiga versiya skriptining nomini ko'rsating. Odatda, yaratilgan kutubxona uchun versiya heirarchy haqida qo'shimcha ma'lumotni ko'rsatish uchun birgalikda kutubxonalar yaratishda foydalaniladi. Ushbu parametr faqat birgalikda kutubxonalarni qo'llab-quvvatlaydigan ELF platformalarida mazmunli bo'ladi.

- umumiy tushuncha

Umumiy belgi boshqa umumiy belgi yoki ramziy ta'rifi bilan birlashtirilganda ogohlantiring. Unix brauzerlari bu biroz noxush amaliyotga ruxsat berishadi, biroq boshqa operatsion tizimlarda bog'laydiganlar yo'q. Ushbu parametr global simvollarni birlashtirishda mumkin bo'lgan muammolarni topishga imkon beradi. Afsuski, ba'zi C kutubxonalari ushbu amaliyotni qo'llashadi, shuning uchun kutubxonalarda va dasturlarda simvollar haqida ba'zi ogohlantirishlarni olishingiz mumkin.

Quyidagi misollar bo'yicha tasvirlangan uch xil global belgilar mavjud:

int i = 1;

Chiqish faylining boshlang'ich ma'lumot qismida ketadigan ta'rif.

extern int i;

Joyni ajratmaslik uchun aniqlanmagan ma'lumot. O'zgaruvchan joy uchun ta'rif yoki umumiy ramz bo'lishi kerak.

int i;

Umumiy ramz. Agar o'zgaruvchining faqat bitta (bir yoki undan ko'p) umumiy belgisi bo'lsa, u chiqdi faylining boshlanmagan ma'lumot maydoniga kiradi. Ulashtiruvchi bir xil o'zgaruvchiga bir nechta umumiy ramzlarni bitta belgiga birlashtiradi. Agar ular turli darajada bo'lsa, u eng katta hajmni tanlaydi. Agar bir xil o'zgaruvchining ta'rifi mavjud bo'lsa, bog'laydigan umumiy belgi deklaratsiyaga aylanadi.

- "ogohlantiruvchi" variant besh xil ogohlantirishlarni ishlab chiqarishi mumkin. Har bir ogohlantirish bir juft satrdan iborat: birinchisi duch kelgan belgini tasvirlaydi va ikkinchisi bir xil nom bilan duch kelgan oldingi belgini tasvirlaydi. Ikkala belgidan bittasi yoki ikkovi ham umumiy ramz bo'ladi.

1.

Umumiy ramzni referentga aylantirish, chunki ramz uchun belgilash allaqachon mavjud.

(
): ogohlantirish: (
) ta'rifi bo'yicha bekor qilingan: ogohlantirish: bu erda belgilangan

2.

Umumiy belgini mos yozuvlar sifatida aylantirish, chunki keyingi ramziy belgilash bilan duch kelgan. Bu avvalgi holat bilan bir xil, faqat belgilar boshqa tartibda uchraydi.

(
): ogohlantirish: Common (
) ni o'chirib qo'yish: 'ning ta'rifi: ogohlantirish: common here

3.

Umumiy ramzni avvalgi o'lchamdagi umumiy simvol bilan birlashtirish.

(
): ogohlantirish: ' (
) ning bir nechta keng tarqalgan turi: ogohlantirish: oldingi umumiy bu erda

4.

Umumiy ramzni oldingi kengroq umumiy ramz bilan birlashtirish.

(
): ogohlantirish: keng tarqalgan (
) tomonidan bekor qilingan: kengaytmasi: ogohlantirish: ko'proq keng tarqalgan

5.

Umumiy ramzni oldingi kichikroq umumiy ramz bilan birlashtirish. Bu avvalgi holat bilan bir xil, faqat belgilar boshqa tartibda uchraydi.

(
): ogohlantirish: Common (
) ni bekor qilish: kengaytmasi: ogohlantirish:

- uyg'unlashuvchilar

Global konstruktorlardan foydalanilgani haqida ogohlantiring. Bu faqat bir nechta ob'ekt fayl formatlari uchun foydalidir. COFF yoki ELF kabi formatlar uchun linker global quruvchilarning foydalanishini aniqlay olmaydi.

--warn-multiple-gp

Chiqish faylida bir nechta umumjahon ko'rsatgich qiymatlari kerak bo'lganda ogohlantirilsin. Bu faqat Alpha kabi muayyan protsessorlar uchun mazmunli. Ayniqsa, ba'zi bir protsessorlar maxsus qismda katta qiymatli stantslarni joylashtiradilar. Maxsus reyestr (global ko'rsatkich) ushbu qismning o'rtasiga ishora qiladi, shuning uchun sobitlanishlar bazaviy-registrni nisbatan manzillash rejimida samarali tarzda yuklab olishi mumkin. Asosiy tayanch registrdagi muvozanat sobit va nisbatan kichik (masalan, 16 bit) bo'lgani uchun, bu doimiy hovuzning maksimal hajmini cheklaydi. Shunday qilib, yirik dasturlarda, ko'pincha butun dunyo ko'rsatgichlari yordamida barcha mumkin bo'lgan sobit nuqtalarni echish uchun foydalanish kerak. Ushbu parametr, bu hol yuzaga kelganda, ogohlantirishga sabab bo'ladi.

- Bir marta ogoh bo'ling

Faqat har bir modul uchun bir martadan emas, balki har bir aniqlanmagan belgini ogohlantiring.

--warn-section-align

Chiqish bo'limining manzili hizalanmasından tufayli o'zgarib turishini ta'kidlang. Odatda, hizalama kirish qismiga ko'ra belgilanadi. Manzil faqat aniq ko'rsatilmagan bo'lsa o'zgartiriladi; ya'ni "SECTIONS" buyrug'i bo'lim uchun boshlanish manzilini ko'rsatmasa.

- arxiv

Qo'mondon chizig'ida --whole-archive variantidan so'ng ko'rsatilgan har bir arxiv uchun talab qilinadigan ob'ekt fayllari uchun arxivni izlash o'rniga, har bir ob'ekt faylini havola arxiviga kiritib qo'ying . Odatda, arxiv faylini birgalikda kutubxonaga aylantirish uchun foydalaniladi, natijada natijaga erishilgan birgalikda kutubxonaga qo'shiladigan har bir obyektni. Ushbu parametr bir necha marta ishlatilishi mumkin.

Gcc-dan ushbu parametrni ishlatganda ikkita eslatma: Birinchi, gcc bu parametr haqida bilmaydi, shuning uchun -wl, -whole-archive- dan foydalaning. Ikkinchidan, arxivlaringiz ro'yxatidan so'ng -Wl, -siz-butun arxivdan foydalanishni unutmang, chunki gcc sizning havolaingizga o'zingizning arxivlar ro'yxatini qo'shib qo'yadi va siz ushbu bayroqqa ta'sir qilishni xohlamasligingiz mumkin.

- belgini o'chirish

Ramz uchun sariq vazifasini foydalaning. Belgiga belgi qo'yilmagan biron bir murojaat "__ wrap_symbol" ga hal bo'ladi. "__real_symbol" ga hech qanday undefined reference ataylab belgilanadi .

Bu tizim funktsiyasi uchun sarmoyadorni taqdim etish uchun ishlatilishi mumkin. Sarg'ich vazifasini "__wrap_symbol" deb atash kerak. Agar tizim funktsiyasini chaqirishni istasa, u "__ real_symbol" deb nomlashi kerak.

Mana shundan:

void * __wrap_malloc (int c) {printf ("% ld \ n" deb nomlangan malloc, v); qaytish __real_malloc (c); }

Agar boshqa kodni - wrap malloc yordamida ushbu fayl bilan bog'lasangiz , u holda "malloc" ga qilingan barcha qo'ng'iroqlar "__wrap_malloc" funktsiyasini chaqiradi. "__wrap_malloc" dagi "__real_malloc" ga qo'ng'iroq haqiqiy haqiqiy "malloc" funksiyasini chaqiradi.

Siz "__real_malloc" funktsiyasini taqdim etishingiz mumkin, shunda --wrap parametrisiz ulanishlar muvaffaqiyatli bo'ladi. Agar shunday qilsangiz, "__wrap_malloc" faylida "__ real_malloc" ning ta'rifini qo'ymasligingiz kerak; Agar siz shunday qilsangiz, assotsiatsiyani qo'ng'iroqchini "malloc" ga ulash uchun imkoniyatdan oldin qo'ng'iroqni hal qilishi mumkin.

--enable-new-dtags

--disable-new-dtags

Ushbu linker ELFda yangi dinamik belgilarni yaratishi mumkin. Ammo eski ELF tizimlari ularni tushunmasligi mumkin. Agar siz --enable-new-dtags ni tanlasangiz , dinamik teglar kerak bo'lganda yaratiladi. Agar siz --disable-new-dtags ni tanlasangiz , yangi dinamik teglar yaratilmaydi. Odatiy bo'lib, yangi dinamik teglar yaratilmaydi. Ushbu variantlar faqatgina forf tizimlarida mavjudligini unutmang.

I386 pe havolasi -shared parametrini qo'llab-quvvatlaydi, bu chiqdi odatiy executable o'rniga dinamik ravishda bog'langan kutubxona (DLL) bo'lishi mumkin. Ushbu parametrdan foydalanganda "* .dll" chiqdi deb nom berishingiz kerak. Bundan tashqari, bog'lanuvchi ob'ekt fayli kabi bog'langan buyruq satrida ko'rsatilishi mumkin bo'lgan standart "* .def" fayllarini to'liq qo'llab-quvvatlaydi (aslida, ular arxivlari bog'lanishiga ishonch hosil qilish uchun, normal ob'ekt fayli kabi).

Barcha maqsadlar uchun keng tarqalgan variantlarga qo'shimcha ravishda, i386 pe havolasi i386 pe maqsadiga xos bo'lgan qo'shimcha buyruq qatori ni qo'llab-quvvatlaydi. Qiymatni qabul qiluvchi variantlar ularning qiymatlaridan bo'shliq yoki tenglik belgisi bilan ajratilishi mumkin.

--dash-stdcall-alias

Agar berilgan bo'lsa, stdcall sonikasi (@ nn ) bilan ramzlar as- eskport qilinadi va shuningdek, sufik bilan ajratiladi.

- bosh fayl fayli

Faylni dlltool bilan DLL yaratish uchun zarur bo'lgan barcha ko'chirilishlarning asosiy manzillarini saqlash uchun fayl nomi sifatida foydalaning.

- DLL

Oddiy bajariladigan o'rniga DLL yaratish. Siz shuningdek, " -Dar" yoki ".def" faylida "KUTUBXONA" ni belgilashingiz mumkin.

--enable-stdcall-fixup

--Disable-stdcall-fixup

Bog'cha hal qila olmaydigan belgini topsa, u simvol nomi formatida (cdecl vs stdcall) farqli bo'lgan boshqa belgilangan belgini qidirish orqali `` lahzalik aloqani '' bajarishga urinadi va bu ramzni bog'lash orqali hal qiladi o'yinda. Masalan, "_foo" belgilanmagan belgisi "_foo @ 12" funktsiyasi bilan bog'lanishi mumkin yoki "_bar @ 16" belgilanmagan belgisi "_bar" funktsiyasi bilan bog'lanishi mumkin. Bog'lanish operatori buni amalga oshirganda, ogohlantirish yozishadi, chunki an'anaviy ravishda bog'lashga muvaffaq bo'lmadi, lekin ba'zan uchinchi tomon dll'laridan ishlab chiqarilgan kutubxonalarni import qilish, bu xususiyatni foydalanishga yaroqli bo'lishi mumkin. Agar siz --enable-stdcall-fixup ni tanlasangiz, ushbu xususiyat to'liq yoqilgan va ogohlantirishlar chop etilmaydi. Agar siz --disable-stdcall-fixup ni belgilasangiz, bu xususiyat o'chirib qo'yiladi va bunday noto'g'ri xatolar xatolik hisoblanadi.

- eksport-barcha belgilar

Agar berilgan bo'lsa, DLL tuzishda ishlatiladigan ob'ektlardagi barcha global belgilar DLL tomonidan eksport qilinadi. Aks holda eksport qilinadigan belgilar bo'lmasa, u asl qiymati hisoblanadi. Belgilar DEF fayllari orqali aniq ravishda eksport qilinadi yoki funktsiya atributlari bilan bevosita eksport qilinadigan bo'lsa, bu parametr berilmaguncha, asl qiymati hech narsa eksport qilinmaydi. "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12" va "impure_ptr" belgilar avtomatik ravishda eksport qilinmaydi. Bundan tashqari, boshqa DLL-lardan olingan belgilar qayta eksport qilinmaydi va DLL ning "_head_" bilan boshlangan yoki "_iname" bilan tugaydigan ichki tartibini belgilaydigan belgilar bo'lmaydi. Bundan tashqari, "libgcc", "libstd ++", "libmingw32" yoki "crtX.o" dan hech qanday belgi eksport qilinmaydi. "__rtti_" yoki "__builtin_" bilan boshlangan belgilar C ++ DLL-lariga yordam berish uchun eksport qilinmaydi. Nihoyat, eksport qilinmaydigan cygwin-private belgilarining keng ro'yxati mavjud (albatta, bu cygwin maqsadlari uchun DLLlarni yaratishda qo'llaniladi).

Ushbu cygwin-ekspluatatsiya quyidagilar: "_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 "va" environ ".

- belgilar belgisi , belgisi , ...

Avtomatik ravishda eksport qilinmasligi kerak bo'lgan belgilar ro'yxatini bildiradi. Belgi nomlari vergullar yoki ikkilik belgilar bilan ajratilishi mumkin.

lib , lib , ...

Belgilar avtomatik ravishda eksport qilinmasligi kerak bo'lgan arxiv kutubxonalari ro'yxatini belgilaydi. Kutubxona nomlari vergullar yoki ikkiliklar bilan chegaralanishi mumkin. "--exclude-libs ALL" ni belgilash barcha arxiv kutubxonalarida avtomatik eksportdan belgilanadi. Ushbu parametrdan qat'iy nazar, .def faylida aniq ko'rsatilgan rishtalar hali ham eksport qilinadi.

- fayllarni joylashtirish

Fayl hizalamasini belgilang. Fayldagi bo'limlar doimo ushbu raqamning ko'paytmasi bo'lgan fayllardagi ofsetlarda boshlanadi. Ushbu parametr 512 ga teng.

- rezerv

- zaxira buyurtma berish

Ushbu dastur uchun yig'ish uchun ishlatiladigan xotira miqdorini belgilang (va ixtiyoriy ravishda bajaring). Asl qiymati 1Mb zahiralangan bo'lib, 4K taalluqli.

- qiymat-taglik qiymati

Dasturni yoki dll dagi asosiy manzil sifatida foydalaning. Bu sizning dasturingiz yoki DLL yuklanganida ishlatiladigan eng kam xotira joyidir. Dell'laringizni ishlashni yaxshilash va ish faoliyatini yaxshilash uchun, har bir alohida bazaviy manzilga ega bo'lishi va boshqa DLL fayllarini bir-biriga ulashmasligi kerak. Asl qiymati: bajariladigan fayllar uchun 0x400000 va dxl uchun 0x10000000.

- Kill-ot

Agar berilgan bo'lsa, stdcall qo'shimchalari (@ nn ) ular eksport qilinishidan oldin belgilaridan olib tashlanadi .

--yur-image-versiya qiymati

"Rasm versiyasi" ning asosiy sonini belgilaydi. 1 ga teng.

- mashina-os-versiya qiymati

"Os versiyasi" ning asosiy sonini belgilaydi. 4 ga teng.

--to'g'ri-quyi tizim-versiya qiymati

`` Subsystem version '' ning asosiy sonini belgilaydi. 4 ga teng.

--minor-image-versiya qiymati

"Rasm versiyasi" ning kichik sonini belgilaydi. 0 ga teng.

--minor-os-versiya qiymati

"Os versiyasi" ning kichik sonini belgilaydi. 0 ga teng.

--minor-subsystem-versiya qiymati

"Quyi tizim versiyasi" ning kichik sonini belgilaydi. 0 ga teng.

--put-def fayli

Ulashtiruvchi daftarning yaratuvchisi bo'lgan DLLga mos keladigan DEF faylini o'z ichiga olgan faylni yaratadi. Ushbu DF fayli ("* .def" deb atalishi kerak) "dlltool" bilan import kutubxonasini yaratish uchun ishlatilishi mumkin yoki avtomatik yoki bevosita eksport qilinadigan belgilar uchun mos yozuvlar sifatida ishlatilishi mumkin.

--prolib fayl

Ulashtiruvchi faylning faylini yaratadi, unda linker ishlab chiqaruvchi DLLga mos keladigan import lib bo'ladi. Ushbu import lib ("* .dll.a" yoki "* .a" deb nomlanishi kerak bo'lgan mijozlarni yaratilgan DLLga bog'lash uchun ishlatilishi mumkin, bu xatti-harakatlar alohida "dlltool" import kutubxonasi yaratish bosqichini o'tkazib yuborish imkonini beradi.

--enable-auto-image-base

Agar "--image-base" argumentini ishlatmasa, DLL-lar uchun rasm bazasini avtomatik ravishda tanlash. Har bir DLL uchun noyob rasm bazalarini yaratish uchun dllname'dan hosil qilingan karmanni ishlatib, xotirada xotirada to'qnashuvlar va dasturni bajarishni kechiktirishi mumkin bo'lgan relocations yo'l qo'ymaslik kerak.

--Disable-auto-image-base

Avtomatik ravishda yagona rasm bazasini yaratmangiz. Foydalanuvchi tomonidan belgilangan rasm bazasi bo'lmasa ("--image-base"), platforma standartidan foydalaning.

- Dll-qidiruv-prefiksli mag'lubiyat

Importni kutubxonasi bo'lmagan holda DLL ga dinamik ravishda ulansangiz, "lib .dll" ga " .dll" ni qidiring. Bunday xatti-harakatlar, turli subtitrlar uchun yaratilgan DLLlar orasida oson farqlanishni ta'minlaydi: mahalliy, cygwin, uwin, pw, va hokazo. Masalan, cygwin DLL odatda "--dll-search-prefix = cyg" dan foydalanadi.

--enable-auto-import

"_symbol" ni "__imp__symbol" ga DLL fayllaridan import qilish uchun murakkab ulanishni amalga oshiring va import kutubxonalarini DATAexports bilan tuzishda kerakli thunking belgilarini yarating. Bu odatda "faqat ishlaydi" --- lekin ba'zan ushbu xabarni ko'rishingiz mumkin:

"o'zgaruvchining" "avtomatik import qilinmaydi. Batafsil ma'lumot uchun ld ning" --enable-auto-import "hujjatlarini o'qing."

Bu xabar, ba'zi bir sub (sub) ifodasi oxirida ikkita sobit yig'indisi bilan berilgan manzilga kirganda paydo bo'ladi (Win32 import jadvallari faqat bitta ruxsat berish). Buning sodir bo'lishi mumkin bo'lgan holatlarga DLL-dan olib kiriladigan struct o'zgaruvchilari a'zolarining maydonlariga kirish va shuningdek, DLL-dan import qilingan qator o'zgaruvchiga doimiy indeksdan foydalanish kiradi. Ko'p funktsiya o'zgaruvchisi (massivlar, tuzilmalar, uzoq vaqt va boshqalar) ushbu xato holatini ishga solishi mumkin. Shunga qaramay, buzg'unchilarga eksport qilinadigan o'zgaruvchining aniq ma'lumot turiga qaramasdan, ld har doim buni aniqlaydi, ogohlantirishni chiqaradi va chiqadi.

Eksport qilingan o'zgaruvchining ma'lumot turiga qaramasdan, ushbu qiyinchilikni bartaraf etishning bir necha yo'li mavjud:

Buning bir usuli - ishlatilishi mumkin-ish vaqti-pseudo-reloc switchni ishlatishdir. Bu esa, mijoz kodi ish vaqti muhiti uchun murojaatlarni moslashtirish vazifasini qoldiradi, shuning uchun bu usul faqat ish vaqti muhiti bu xususiyatni qo'llab-quvvatlasa ishlaydi.

Ikkinchidan, "sobit" lardan birini majburiy - ya'ni, kompilyatsiya vaqtida noma'lum va optimallashtiruvchi parametrga aylantirish. Masalar uchun ikkita imkoniyat bor: a) indeks (katalogning manzili) o'zgaruvchini yaratish, yoki b) "doimiy" indeksni o'zgaruvchiga aylantiradi. Shunday qilib:

tashqi extern_array []; extern_array [1] -> {uchuvchi turi * t = extern_array; T [1]}

yoki

tashqi extern_array []; extern_array [1] -> {uchuvchi int t = 1; extern_array [t]}

Struktura uchun (va ko'pgina boshqa ko'p tilli ma'lumotlar turlarini) yagona variant - tuzilishning o'zi (yoki uzoq vaqt yoki ...) o'zgarmoqda:

extern tuzilmasi extern_struct; extern_struct.field -> {uchuvchi struct s * t = & extern_struct; t-> maydon}

yoki

extern uzoq uzoq extern_ll; extern_ll -> {uchuvchi uzoq uzun * local_ll = & extern_ll; * local_ll}

Ushbu qiyinchiliklarni hal qilishning uchinchi usuli "buzadigan belgilar" uchun "auto import" dan voz kechish va uni "__declspec (dllimport)" bilan belgilashdir. Ammo amalda, DLL tuzadigan, statut kutubxonasini yaratish / bog'lash uchun DLL-ga bog'laydigan mijoz kodini yaratish yoki tuzish kerakligini ko'rsatish uchun kompilyatsiya vaqtini # identifikatorlardan foydalanishni talab qiladi. "Doimiy manzilni doimiy ofset" muammosini hal qilishning turli usullari o'rtasida tanlov qilishda siz odatdagidek haqiqiy foydalanishni hisobga olishingiz kerak:

Asl:

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

Biznes 1:

- foo.h extern int arr []; --foo.c #include "foo.h" void main (int argc, char ** argv) {/ * Bu vaqtinchalik echim Win32 va cygwin uchun; "optimallash" qilmang * / uchuvchi int * parr = arr; printf ("% d \ n", parr [1]); }

Biznes 2:

--foo.h / * Eslatma: avto-eksport taxmin qilinadi (__declspec (dllexport)) * / #if (belgilangan (__ CYGWIN__)) && \ (belgilangan (FOO_BUILD_DLL) || definition (FOO_STATIC )) # fef_import __declspec (dllimport) #else #define FOO_IMPORT #difini extern FOO_IMPORT ichki arr []; - foo.c #include "foo.h" void main (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

Ushbu muammoni bartaraf etishning to'rtinchi usuli sizning kutubxonangizni noto'g'ri parametrlarga (masalan, set_foo () va get_foo () accessor funktsiyalari uchun) interfeysdan ko'ra funktsional interfeysdan foydalanish uchun qayta kodlashdir .

--Disable-auto-import

DLL fayllaridan DATAimports uchun "__imp__symbol" ga "_symbol" ni murakkab bog'lashga urinmang.

- mumkin-ish vaqti-pseudo-reloc

Kodingizda --enable-auto-import qismida tasvirlangan iboralar mavjud bo'lsa, ya'ni DATAportni nol bo'lmagan offset bilan DLL-dan import qilsa, bu switch "runtime pseudo relocations" ning vektorini yaratadi, bu esa ish stollarini moslash uchun ishlatilishi mumkin Sizning mijoz kodingizdagi bunday ma'lumotlarga.

- o'zgaruvchan-ish vaqti-pseudo-reloc

DLL-dan nol bo'lmagan offset DATA importi uchun pseudo relocations hosil qilmang. Bu asl qiymati.

--enable-extra-pe-debug

Avtomatik import belgisi thunking bilan bog'liq qo'shimcha disk raskadrovka ma'lumotlarini ko'rsatish.

- uchastka-hizalama

Qismning hizalanishini belgilaydi. Xotiradagi bo'limlar har doim bu raqamlarning bir nechtasi bo'lgan manzillarda boshlanadi. 0x1000 ga asl qiymati.

- zaxira

- zaxira zahirasi , majburiyat

Ushbu dastur uchun suyakka sifatida ishlatilishi uchun zahiralangan (va ixtiyoriy ravishda bajariladigan) xotira miqdorini belgilang. Asl qiymati 2Mb zahiralangan, 4K ishlamayapti.

- Shubhali tizim

- Shubhali tizim : bu katta

- Shubhali tizim : bu katta . kichik

Dasturingiz amalga oshiradigan quyi tizimni bildiradi. Huquqiy qadriyatlar "mahalliy", "oyna", "konsol" va "posix" hisoblanadi. Ixtiyoriy ravishda quyi tizim versiyasini ham o'rnatishingiz mumkin.

Muhim: shaxsiy kompyuteringizda buyruq qanday ishlatilishini ko'rish uchun man buyrug'ini ( % man ) ishlating.