Linux / Unix Command: Id

NAME

ld - Paggamit ng LD , ang link ng GNU

SINOPSIS

ld [ options ] objfile ...

DESCRIPTION

Ang ld ay pinagsasama ang isang bilang ng mga bagay at mga file ng archive, nagpapalipat-lipat sa kanilang data at nagsasama ng mga reference sa simbolo. Karaniwan ang huling hakbang sa pag-compile ng isang programa ay ang pagpapatakbo ng ld .

ld tumatanggap ng mga file ng Linker Command Wika na nakasulat sa isang superset ng Link ng AT & T's Link Editor ng Syntax, upang magbigay ng malinaw at kabuuang kontrol sa proseso ng pag-uugnay.

Ang pahina ng taong ito ay hindi naglalarawan sa command language; tingnan ang ld entry sa "info", o ang manu-manong ld: ang linker ng GNU , para sa ganap na mga detalye sa wika ng command at sa iba pang mga aspeto ng link na GNU.

Ang bersyon na ito ng ld ay gumagamit ng mga pangkalahatang layunin ng mga aklatan ng BFD upang gumana sa mga file ng bagay. Pinapayagan nito ang pagbabasa, pagsamahin, at pagsulat ng mga file ng bagay sa maraming iba't ibang mga format --- halimbawa, COFF o "a.out". Ang iba't ibang mga format ay maaaring magkasama upang makagawa ng anumang magagamit na uri ng object file.

Bukod sa kakayahang magamit nito, ang linker ng GNU ay higit na nakakatulong kaysa iba pang mga link sa pagbibigay ng impormasyon sa diagnostic. Maraming mga linkers abandunahin pagpapatupad kaagad kapag nakakaranas ng isang error; hangga't maaari, ld patuloy na isinasagawa, na nagpapahintulot sa iyo na makilala ang iba pang mga error (o, sa ilang mga kaso, upang makakuha ng isang output file sa kabila ng error).

Ang taglay ng GNU linker ay sinadya upang masakop ang isang malawak na hanay ng mga sitwasyon, at upang maging katugma hangga't maaari sa iba pang mga linker. Bilang resulta, marami kang pagpipilian upang makontrol ang pag-uugali nito.

MGA OPTION

Ang linker ay sumusuporta sa isang kalabisan ng mga pagpipilian sa command-line , ngunit sa aktwal na kasanayan ilang ng mga ito ay ginagamit sa anumang partikular na konteksto. Halimbawa, ang madalas na paggamit ng ld ay i-link ang karaniwang mga file ng Unix na bagay sa isang pamantayan, suportado ng sistema ng Unix . Sa ganitong sistema, i-link ang isang file na "hello.o":

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

Sinasabi nito ang ld upang makabuo ng isang file na tinatawag na output bilang resulta ng pag-uugnay sa file na "/lib/crt0.o" na may "hello.o" at ang library na "libc.a", na magmumula sa karaniwang mga direktoryo ng paghahanap. (Tingnan ang talakayan ng opsyon sa -l sa ibaba.)

Ang ilan sa mga opsyon ng command-line sa ld ay maaaring itukoy sa anumang punto sa command line. Gayunpaman, ang mga pagpipilian na tumutukoy sa mga file, tulad ng -l o -T , sanhi ng file na mabasa sa punto kung saan lumilitaw ang opsyon sa command line, na may kaugnayan sa mga object file at iba pang mga opsyon ng file. Ang pag-ulit ng mga di-file na mga opsyon na may ibang argument ay walang karagdagang epekto, o i-override ang mga naunang paglitaw (mga karagdagang papuntang kaliwa sa command line) ng opsyong iyon. Ang mga pagpipilian na maaaring tinukoy nang higit sa isang beses ay nakasaad sa mga paglalarawan sa ibaba.

Ang mga argumento ng hindi opsyon ay mga object file o archive na kung saan ay mai-link nang sama-sama. Maaari silang sundin, mauna, o magkakasama sa mga opsyon ng command-line, maliban na ang argumento ng object file ay maaaring hindi mailagay sa pagitan ng isang opsyon at ang argumento nito.

Kadalasan ang tagapamagitan ay sinasabing may hindi bababa sa isang bagay na file, ngunit maaari mong tukuyin ang iba pang mga anyo ng mga binary input file gamit -l , -R , at ang script command language. Kung walang tinukoy na mga file ng binary input, ang linker ay hindi gumagawa ng anumang output, at isinasalaysay ang mensahe Walang mga input file .

Kung ang linker ay hindi makilala ang format ng isang bagay na file, ito ay ipalagay na ito ay isang linker na script. Ang isang script na tinukoy sa paraang ito ay augments sa pangunahing linker script na ginamit para sa link (alinman sa default na linker script o ang isa na tinukoy sa pamamagitan ng paggamit -T ). Pinapayagan ng tampok na ito ang linker na mag-link laban sa isang file na mukhang isang bagay o isang archive, ngunit aktwal na tinukoy lamang ang ilang mga halaga ng simbolo, o gumagamit ng "INPUT" o "GROUP" upang i-load ang iba pang mga bagay. Tandaan na ang pagtukoy ng isang script sa ganitong paraan ay augment lamang sa pangunahing script ng linker; gamitin ang pagpipiliang -T upang palitan ang default na script ng linker.

Para sa mga opsyon na ang mga pangalan ay isang solong titik, ang mga argumento sa opsyon ay dapat na sundin ang sulat ng opsyon nang hindi pumipili ng whitespace, o bibigyan bilang hiwalay na mga argumentang kaagad na sumusunod sa opsyon na nangangailangan ng mga ito.

Para sa mga pagpipilian na ang mga pangalan ay maraming mga titik, alinman sa isang dash o dalawang maaaring mauna ang opsyon na pangalan; halimbawa, -trace-symbol at -trace-symbol ay katumbas. Tandaan - mayroong isang pagbubukod sa panuntunang ito. Maraming mga pagpipilian sa titik na nagsisimula sa isang mas mababang kaso 'o' ay maaari lamang mauna sa pamamagitan ng dalawang gitling. Ito ay upang mabawasan ang pagkalito sa -o pagpipilian. Kaya halimbawa -omagic nagtatakda ang output file name sa magic samantalang --omagic nagtatakda ng NMAGIC bandila sa output.

Ang mga pangangatwiran sa mga opsyon sa maraming titik ay dapat na ihihiwalay mula sa pangalan ng opsyon sa pamamagitan ng isang katumbas na tanda, o bibigyan ng hiwalay na mga argumento kaagad kasunod ng opsyon na nangangailangan ng mga ito. Halimbawa, ang simbolong -trace-foo at -trace-symbol = foo ay katumbas. Natatanging mga pagdadaglat ng mga pangalan ng mga opsyon na maraming titik ang tinatanggap.

Tandaan - kung ang linker ay di tuwirin sa tuwina, sa pamamagitan ng isang driver ng compiler (eg gcc ), pagkatapos ay ang lahat ng mga linker ng command line options ay dapat na prefix ng -Wl, (o kung ano ang angkop para sa partikular na driver ng compiler) tulad nito:

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

Mahalaga ito, sapagkat kung hindi man ay maitatutupad ng programa ng driver ng tagatala ang mga pagpipilian sa pag-link, na nagreresulta sa isang masamang link.

Narito ang isang talahanayan ng generic switch ng command line na tinanggap ng linker ng GNU:

-isang keyword

Ang opsyon na ito ay suportado para sa compatibility ng HP / UX. Ang argument ng keyword ay dapat na isa sa mga string ng mga string , ibinahagi , o default . Ang -archive ay gumagana katumbas sa -Batik , at ang iba pang dalawang mga keyword ay functionally katumbas ng -Bdynamic . Maaaring gamitin ang pagpipiliang ito anumang beses.

- Isang arkitektura

- arkitektura = arkitektura

Sa kasalukuyang release ng ld , ang pagpipiliang ito ay kapaki-pakinabang lamang para sa pamilya ng mga architectures ng Intel 960. Sa configuration ng ld na iyon, tinutukoy ng argument sa arkitektura ang partikular na arkitektura sa 960 na pamilya, na nagpapagana ng ilang mga pananggalang at pagbabago ng landas ng paghahanap ng archive-library.

Ang mga hinaharap na release ng ld ay maaaring suportahan ang katulad na pag-andar para sa iba pang mga pamilya ng arkitektura.

-b input-format

--format = input-format

ld maaaring i-configure upang suportahan ang higit sa isang uri ng object file. Kung ang iyong ld ay naka-configure sa ganitong paraan, maaari mong gamitin ang -b na pagpipilian upang tukuyin ang binary na format para sa mga input na file ng bagay na sumusunod sa pagpipiliang ito sa command line. Kahit na ang ld ay isinaayos upang suportahan ang mga alternatibong format ng bagay, hindi mo karaniwang kailangan na tukuyin ito, gaya ng dapat na ma-configure na dapat asahan bilang isang default na format ng pag-input ang pinakakaraniwang format sa bawat makina. Ang format ng pag-input ay isang string ng teksto, ang pangalan ng isang partikular na format na sinusuportahan ng mga aklatan ng BFD. (Maaari mong ilista ang magagamit na mga binary na format na may objdump -i .)

Baka gusto mong gamitin ang pagpipiliang ito kung ikaw ay nag-uugnay sa mga file na may hindi pangkaraniwang binary na format. Maaari mo ring gamitin ang -b upang lumipat ng mga format ng tahasang (kapag nag-uugnay sa mga file ng object ng iba't ibang mga format), sa pamamagitan ng pagsasama - b -format ng input bago ang bawat pangkat ng mga file ng bagay sa isang partikular na format.

Ang default na format ay kinuha mula sa variable ng kapaligiran na "GNUTARGET".

Maaari mo ring tukuyin ang format ng pag-input mula sa isang script, gamit ang command na "TARGET";

-c MRI-commandfile

--mri-script = MRI-commandfile

Para sa pagiging tugma sa mga linker na ginawa ng MRI, tumatanggap ang mga script ng mga script na nakasulat sa isang kahaliling, pinaghihigpitan na wika ng utos, na inilarawan sa seksyong MRI Compatible Script Files ng GNU ld documentation. Ipakilala ang mga file ng script ng MRI gamit ang pagpipiliang -c ; gamitin ang pagpipiliang -T upang patakbuhin ang mga script ng linker na nakasulat sa pangkalahatang layunin ng ld na scripting wika. Kung hindi umiiral ang MRI-cmdfile , hanapin ito sa mga direktoryo na tinukoy ng anumang mga pagpipilian sa -L .

-d

-dc

-dp

Ang tatlong pagpipilian ay katumbas; Ang maraming mga form ay suportado para sa pagiging tugma sa ibang mga linker. Nagtatakda sila ng espasyo sa mga karaniwang simbolo kahit na tinukoy ang isang nakabalik na output file (na may -r ). Ang script na utos na "FORCE_COMMON_ALLOCATION" ay may parehong epekto.

-e entry

--entry = entry

Gamitin ang entry bilang ang tahasang simbolo para sa pagsisimula ng pagpapatupad ng iyong programa, sa halip na ang default na entry point. Kung walang simbolo na pinangalanang entry , susubukang i-parse ng linker ang entry bilang isang numero, at gamitin iyon bilang address entry (ang bilang ay ipapaliwanag sa base 10; maaari kang gumamit ng isang nangungunang 0x para sa base 16, o isang nangungunang 0 para sa base 8).

-E

--Export-dynamic

Kapag lumilikha ng isang dynamic na naka-link na maipapatupad, idagdag ang lahat ng mga simbolo sa dynamic na simbolo ng talahanayan. Ang dynamic na simbolo ng talahanayan ay ang hanay ng mga simbolo na nakikita mula sa mga dynamic na bagay sa run time.

Kung hindi mo ginagamit ang opsyon na ito, ang karaniwang simbolo ng talahanayan ay karaniwang naglalaman lamang ng mga simbolo na tinutukoy ng ilang mga dynamic na bagay na nabanggit sa link.

Kung gagamitin mo ang "dlopen" upang mag-load ng isang dynamic na bagay na kailangang sumangguni pabalik sa mga simbolo na tinukoy ng programa, sa halip ng ilang iba pang mga dynamic na bagay, malamang na kailangan mong gamitin ang pagpipiliang ito kapag nag-uugnay sa programa mismo.

Maaari mo ring gamitin ang script na bersyon upang kontrolin kung anong mga simbolo ang dapat idagdag sa dynamic na simbolo ng talahanayan kung sinusuportahan ito ng format ng output. Tingnan ang paglalarawan ng --version-script sa @ ref {VERSION}.

-EB

Mag-link ng mga bagay na big-endian. Nakakaapekto ito sa default na format ng output.

-EL

Mag-link ng mga bagay na maliit-endian. Nakakaapekto ito sa default na format ng output.

-f

- Pangalan ng balyena

Kapag lumilikha ng isang bagay na ibinahagi ng ELF, itakda ang panloob na field na DT_AUXILIARY sa tinukoy na pangalan. Sinasabi nito ang dynamic na linker na ang talahanayan ng simbolo ng nakabahaging bagay ay dapat gamitin bilang pantulong na filter sa simbolo ng talahanayan ng ibinahaging pangalang bagay.

Kung mag-link ka mamaya ng isang programa laban sa filter na bagay na ito, pagkatapos, kapag pinatakbo mo ang programa, makikita ng dynamic na linker ang field na DT_AUXILIARY. Kung ang dynamic na linker ay malutas ang anumang mga simbolo mula sa filter na bagay, susuriin muna kung may kahulugan sa ibinahaging pangalan ng object. Kung mayroong isa, ito ay gagamitin sa halip ng kahulugan sa filter na bagay. Hindi na umiiral ang nakabahaging pangalan ng bagay. Kaya ang shared object name ay maaaring gamitin upang magbigay ng isang alternatibong pagpapatupad ng ilang mga function, marahil para sa debugging o para sa makina ng tiyak na pagganap.

Ang pagpipiliang ito ay maaaring tinukoy ng higit sa isang beses. Ang mga entry na DT_AUXILIARY ay malilikha sa pagkakasunud-sunod kung saan lumilitaw ang mga ito sa command line.

-F pangalan

- Pangalan ng filter

Kapag lumilikha ng isang ELF shared object, itakda ang panloob na field na DT_FILTER sa tinukoy na pangalan. Sinasabi nito sa dynamic linker na ang simbolo ng talahanayan ng nakabahaging bagay na nilikha ay dapat gamitin bilang isang filter sa talahanayan ng simbolo ng nakabahaging pangalan ng bagay.

Kung mag-link ka mamaya ng isang programa laban sa filter na bagay na ito, pagkatapos, kapag pinatakbo mo ang programa, makikita ng dynamic na linker ang field na DT_FILTER. Ang dynamic na linker ay lulutas ang mga simbolo ayon sa talahanayan ng simbolo ng filter na bagay gaya ng dati, ngunit ito ay talagang mag-link sa mga kahulugan na natagpuan sa shared object name . Kaya ang filter na bagay ay maaaring magamit upang pumili ng isang subset ng mga simbolo na ibinigay ng pangalan ng bagay.

Ang ilang mga mas lumang mga linker ay gumagamit ng -F na opsiyon sa buong isang toolkain ng compilation para sa pagtukoy ng format ng object-file para sa parehong input at output object file. Ang tagagamit ng GNU ay gumagamit ng iba pang mga mekanismo para sa layuning ito: ang -b , --format , --oformat na mga opsyon, ang "TARGET" na utos sa mga script ng linker, at ang variable ng kapaligiran na "GNUTARGET". Ang linker ng GNU ay hindi papansinin ang opsiyon na -F kapag hindi lumilikha ng isang ELF shared object.

- pangalan na ito

Kapag lumilikha ng isang ELF maipapatupad o ibinahaging bagay, tawagan ang NAME kapag ang maipapatupad o nakabahaging bagay ay nabawasan, sa pamamagitan ng pagtatakda ng DT_FINI sa address ng function. Bilang default, ang linker ay gumagamit ng "_fini" bilang function na tumawag.

-g

Binalewala. Ibinigay para sa pagiging tugma sa iba pang mga tool.

-G halaga

--gpsize = halaga

Itakda ang maximum na laki ng mga bagay upang mai-optimize gamit ang GP register upang laki . Ito ay makahulugan lamang para sa mga format ng file ng bagay tulad ng MIPS ECOFF na sumusuporta sa paglalagay ng malalaking at maliliit na bagay sa iba't ibang mga seksyon. Ito ay hindi pinansin para sa iba pang mga format ng file ng bagay.

-h pangalan

-soname = pangalan

Kapag lumilikha ng isang ELF shared object, itakda ang panloob na field na DT_SONAME sa tinukoy na pangalan. Kapag ang isang executable ay naka-link sa isang nakabahaging bagay na may isang patlang ng DT_SONAME, pagkatapos kapag ang executable ay nagpapatakbo sa dynamic na linker ay tangkaing i-load ang nakabahaging bagay na tinukoy ng DT_SONAME patlang sa halip na ang paggamit ng pangalan ng file na ibinigay sa linker.

-i

Magsagawa ng isang incremental link (katulad ng pagpipilian -r ).

-init na pangalan

Kapag lumilikha ng isang ELF na maipapatupad o ibinahaging bagay, tawagan ang NAME kapag na-load ang executable o shared object, sa pamamagitan ng pagtatakda ng DT_INIT sa address ng function. Bilang default, ang linker ay gumagamit ng "_init" bilang function na tumawag.

-l archive

--library = archive

Magdagdag ng archive file archive sa listahan ng mga file upang mag-link. Maaaring gamitin ang pagpipiliang ito anumang beses. ld ay maghanap sa path-list para sa mga pangyayari ng "libarchive.a" para sa bawat archive tinukoy.

Sa mga system na sumusuporta sa mga shared library, maaari ring maghanap ng mga library na may mga extension maliban sa ".a". Sa partikular, sa mga sistema ng ELF at SunOS, ld ay maghanap ng direktoryo para sa isang library na may extension ng ".so" bago maghanap ng isa na may extension ng ".a". Sa pamamagitan ng convention, isang ".so" na extension ay nagpapahiwatig ng isang shared library.

Ang linker ay maghanap ng isang archive nang isang beses lamang, sa lokasyon kung saan ito ay tinukoy sa command line. Kung ang archive ay tumutukoy sa isang simbolo na hindi natukoy sa ilang bagay na lumitaw bago ang archive sa command line, isasama ng linker ang naaangkop na (mga) file mula sa archive. Gayunpaman, ang isang di-natukoy na simbolo sa isang bagay na lumilitaw mamaya sa command line ay hindi magsasanhi sa linker upang maghanap muli sa archive.

Tingnan ang - ( opsyon para sa isang paraan upang pilitin ang linker upang maghanap ng mga archive nang maraming beses.

Maaari mong ilista ang parehong archive nang maraming beses sa command line.

Ang ganitong uri ng paghahanap sa archive ay karaniwang para sa mga link ng Unix. Gayunpaman, kung gumagamit ka ng ld onAIX, tandaan na iba ito sa pag-uugali ng AIX linker.

-L paghahanap

--library-path = searchdir

Magdagdag ng path searchdir sa listahan ng mga path na ld ay maghanap para sa mga library ng archive at ld control script. Maaari mong gamitin ang pagpipiliang ito anumang dami ng beses. Ang mga direktoryo ay hinahanap sa pagkakasunud-sunod kung saan tinukoy sila sa command line. Ang mga direktoryo na tinukoy sa command line ay hinanap bago ang mga default na direktoryo. Ang lahat ng mga opsyon na -L ay nalalapat sa lahat ng mga pagpipilian sa -l , anuman ang pagkakasunud-sunod kung saan lumilitaw ang mga pagpipilian.

Kung ang searchdir ay nagsisimula sa "=", ang "=" ay papalitan ng prefix ng sysroot , isang landas na tinukoy kapag na-configure ang linker.

Ang default na set ng mga landas na hinanap (nang hindi tinukoy na may -L ) ay depende sa kung aling mode ng paggamit ng ld ang ginagamit, at sa ilang mga kaso din sa kung paano ito na-configure.

Ang mga landas ay maaari ding tinukoy sa isang script na may link na "SEARCH_DIR" na utos. Ang mga direktoryo na tinukoy sa ganitong paraan ay hinahanap sa punto kung saan lumilitaw ang linker script sa command line.

-m pagtulad

Emulate ang linker ng emulation . Maaari mong ilista ang mga magagamit na emulations sa - Mga pagpipilian sa oso o -V .

Kung ang pagpipilian ng -m ay hindi ginagamit, ang pagtulad ay kinuha mula sa variable ng "LDEMULATION" na kapaligiran, kung ito ay tinukoy.

Kung hindi, ang default na pagtulad ay nakasalalay sa kung paano naka-configure ang linker.

-M

- Kopyahin-mapa

I-print ang isang mapa ng link sa karaniwang output. Ang isang mapa ng link ay nagbibigay ng impormasyon tungkol sa link, kabilang ang mga sumusunod:

*

Kung saan ang mga file at mga simbolo ng bagay ay naka-map sa memorya.

*

Paano ilalaan ang karaniwang mga simbolo.

*

Lahat ng mga miyembro ng archive na kasama sa link, na may pagbanggit ng simbolo na naging dahilan upang dalhin ang miyembro ng archive.

-n

--magic

I-off ang pagkakahanay ng pahina ng mga seksyon, at markahan ang output bilang "NMAGIC" kung maaari.

-N

--omagic

Itakda ang mga seksyon ng teksto at data upang maging nababasa at maaaring maisulat. Gayundin, huwag i-align ng pahina ang segment ng data, at huwag paganahin ang pag-link laban sa mga nakabahaging mga library. Kung sinusuportahan ng format ng output ang mga numero ng estilo ng Unix, markahan ang output bilang "OMAGIC".

- walang kapararakan

Ang pagpipiliang ito ay nagpapabaya ng karamihan sa mga epekto ng pagpipilian ng -N . Itinatakda nito ang seksyon ng teksto upang mabasa lamang, at pinipilit ang segment ng data na maging nakahanay sa pahina. Tandaan - hindi pinapagana ng opsyong ito ang pag-link laban sa mga nakabahaging mga aklatan. Gamitin -Bunnamikong para dito.

-o output

--output = output

Gamitin ang output bilang pangalan para sa programa na ginawa ng ld ; kung hindi tinukoy ang opsyong ito, ang pangalan na a.out ay ginagamit bilang default. Ang script na command na "OUTPUT" ay maaari ring tukuyin ang output file name.

-O antas

Kung ang antas ay isang numerong halaga na mas malaki kaysa zero ang ld ay nagpapabuti sa output. Ito ay maaaring tumagal ng mas mahaba at samakatuwid marahil ay dapat lamang pinagana para sa pangwakas na binary.

-q

--emit-relocs

Iwanan ang mga seksyon ng relocation at mga nilalaman sa ganap na naka-link na exececutables. Maaaring kailanganin ng pag-aaral ng pag-link sa link at mga tool sa pag-optimize ang impormasyong ito upang maisagawa ang mga tamang pagbabago ng mga executable. Nagreresulta ito sa mas malalaking executable.

Ang opsyon na ito ay kasalukuyang sinusuportahan lamang sa mga platform ng ELF.

-r

- naliligalig

Gumawa ng relocatable output --- ibig sabihin, bumuo ng isang output file na maaaring magkasabay maglingkod bilang input sa ld . Ito ay madalas na tinatawag na bahagyang pag-uugnay . Bilang isang epekto, sa mga kapaligiran na sumusuporta sa karaniwang mga numero ng magic ng Unix, itinatakda din ng opsyong ito ang magic number ng output file sa "OMAGIC". Kung hindi tinukoy ang opsyong ito, ang isang absolute file ay ginawa. Kapag nag-uugnay sa mga programang C ++, ang pagpipiliang ito ay hindi malulutas ang mga sanggunian sa mga tagapagbuo; upang gawin iyon, gamitin -Ur .

Kapag ang isang input file ay walang katulad na format bilang output file, ang bahagyang pag-uugnay ay sinusuportahan lamang kung ang input file na ito ay hindi naglalaman ng anumang mga relocation. Iba't ibang mga format ng output ay maaaring magkaroon ng karagdagang paghihigpit; halimbawa, ang ilang mga "a.out" -based na mga format ay hindi sumusuporta sa bahagyang pag-uugnay sa mga input file sa iba pang mga format sa lahat.

Ang pagpipiliang ito ay ginagawa ang parehong bagay bilang -i .

-R filename

--just-symbols = filename

Basahin ang mga pangalan ng simbolo at ang kanilang mga address mula sa filename , ngunit huwag i-relocate ito o isama ito sa output. Pinapayagan nito ang iyong file ng output upang sumangguni sa simbolo sa ganap na mga lokasyon ng memorya na tinukoy sa ibang mga programa. Maaari mong gamitin ang pagpipiliang ito higit sa isang beses.

Para sa pagiging tugma sa iba pang mga link sa ELF, kung ang pagpipiliang -R ay sinusundan ng isang pangalan ng direktoryo, sa halip na isang pangalan ng file, itinuturing itong opsyon na -rpath .

-s

--strip-all

Iwanan ang lahat ng impormasyon ng simbolo mula sa output file.

-S

--strip-debug

Iwanan ang impormasyon ng simbolo ng debugger (ngunit hindi lahat ng mga simbolo) mula sa output file.

-t

--Trace

I-print ang mga pangalan ng mga file ng input bilang ld iproseso ang mga ito.

-T scriptfile

--script = scriptfile

Gumamit ng scriptfile bilang script ng linker. Ang script na ito ay pumapalit sa ld 's default na linker script (sa halip na idagdag ito), kaya ang commandfile ay dapat tukuyin ang lahat ng kailangan upang ilarawan ang output file. Kung ang scriptfile ay hindi umiiral sa kasalukuyang direktoryo, hinahanap ito ng "ld" sa mga direktoryo na tinukoy ng anumang naunang mga opsiyon ng L. Ang mga opsyon ng Maramihang- T ay makaipon.

-u simbolo

--undefined = simbolo

Ang simbolo ng lakas na ipapasok sa file ng output bilang isang di-natukoy na simbolo. Ang paggawa nito ay maaaring, halimbawa, mag-trigger ng pag-link ng mga karagdagang mga module mula sa karaniwang mga aklatan. -u maaaring ulitin sa iba't ibang mga argumento ng pagpipilian upang magpasok ng mga karagdagang di-natukoy na simbolo. Ang opsyon na ito ay katumbas ng command na "EXTERN" na script ng linker.

-Ur

Para sa anumang bagay maliban sa mga programang C +, ang opsyon na ito ay katumbas ng -r : ito ay bumubuo ng relocatable output --- ibig sabihin, isang output file na maaaring magkagayon maglingkod bilang input sa ld . Kapag nag-uugnay sa mga programang C ++, -Ur ay lutasin ang mga sanggunian sa mga constructor, hindi katulad -r . Hindi ito gumana upang gamitin -Ur sa mga file na naka-link sa sarili nila -Ur ; kapag ang constructor table ay binuo, hindi ito maidaragdag sa. Gamitin -Ur lamang para sa huling bahagyang link, at -r para sa iba.

--unique [= SECTION ]

Lumilikha ng isang hiwalay na seksyon ng output para sa bawat seksyon na tumutugma sa input SEKSYON , o kung nawawala ang opsyonal na wildcard SECTION , para sa bawat seksyon ng pag-input ng mga ulila. Isang seksyon ng mga ulila ay hindi partikular na nabanggit sa isang script ng linker. Maaari mong gamitin ang pagpipiliang ito nang maraming beses sa command line; Pinipigilan nito ang normal na pagsasama ng mga seksyon ng input na may parehong pangalan, napakalaki ang mga takdang seksyon ng output sa isang script ng linker.

-v

- Pagbabago

-V

Ipakita ang numero ng bersyon para sa ld . Inililista din ng pagpipilian ng -V ang sinusuportahang mga emulsyon.

-x

- Narito ang lahat

Tanggalin ang lahat ng mga lokal na simbolo.

-X

--discard-lokal

Tanggalin ang lahat ng mga pansamantalang lokal na simbolo. Para sa karamihan ng mga target, ito ang lahat ng mga lokal na simbolo na ang mga pangalan ay nagsisimula sa L.

-yang simbolo

--trace-symbol = symbol

I-print ang pangalan ng bawat naka-link na file kung saan lumilitaw ang simbolo . Ang pagpipiliang ito ay maaaring bibigyan ng anumang dami ng beses. Sa maraming mga sistema ay kinakailangan upang prepend isang salungguhit.

Kapaki-pakinabang ang pagpipiliang ito kapag mayroon kang isang hindi natukoy na simbolo sa iyong link ngunit hindi mo alam kung saan nagmula ang sanggunian.

-Y landas

Magdagdag ng path sa default na path ng paghahanap sa library. Ang opsyong ito ay umiiral para sa pagkakatugma ng Solaris.

-z keyword

Ang kinikilalang mga keyword ay "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "ngayon", "pinanggalingan", "combreloc", "nocombreloc" at "nocopyreloc ". Ang iba pang mga keyword ay hindi pinansin para sa pagkakatugma ng Solaris. Ang "initfirst" ay nagmamarka ng bagay na unang sinimulan sa runtime bago ang iba pang mga bagay. Ang "load" ay tumutukoy sa bagay na ang mga filtees ay naproseso kaagad sa runtime. Ang "nodefaultlib" ay tumutukoy sa bagay na ang paghahanap para sa mga dependency ng bagay na ito ay hindi papansinin anumang mga default na path ng paghahanap sa library. "nodelete" ang marka ng bagay ay hindi dapat ibale-wala sa runtime. Ang "nodlopen" ay nagmamarka ng bagay na hindi magagamit sa "dlopen". Ang "nodump" ay nagmamarka ng bagay na hindi maaaring itapon sa pamamagitan ng "dldump". "ngayon" ay tumutukoy sa bagay na may di-tamad na runtime binding. "pinanggalingan" ang mga bagay na maaaring maglaman ng $ ORIGIN. "defs" ang hindi pinahihintulutang mga simbolo. "muldefs" ay nagbibigay-daan sa maramihang mga kahulugan. Pinagsasama ng "combreloc" ang maramihang mga seksyon ng reloc at binubuo ang mga ito upang makagawa ng dynamic na simbolo lookup caching posible.

"nocombreloc" hindi pinapagana ang maramihang mga seksyon ng reloc na pinagsasama. Ang "nocopyreloc" ay hindi pinapagana ang produksyon ng mga relocs ng kopya.

- ( archive -)

- Mga archive na mula sa grupo --end-group

Ang mga archive ay dapat na isang listahan ng mga file ng archive . Maaaring ito ay alinman sa tahasang mga pangalan ng file, o mga pagpipilian sa -l .

Ang tinukoy na mga archive ay paulit-ulit na hinanap hanggang sa walang bagong hindi nabanggit na mga sanggunian ang nilikha. Karaniwan, ang isang archive ay hinahanap nang isang beses lamang sa pagkakasunud-sunod na tinukoy sa command line. Kung kailangan ng isang simbolo sa archive na lutasin ang isang di-natukoy na simbolo na tinutukoy ng isang bagay sa isang archive na lumilitaw mamaya sa linya ng command, ang linker ay hindi magagawang upang malutas ang reference na iyon. Sa pamamagitan ng pagpapangkat ng mga archive, lahat ng mga ito ay paulit-ulit na hinanap hanggang sa malutas ang lahat ng mga posibleng sanggunian.

Ang paggamit ng pagpipiliang ito ay may malaking halaga ng pagganap. Pinakamainam na gamitin lamang ito kapag may mga hindi maiiwasang pabilog na sanggunian sa pagitan ng dalawa o higit pang mga archive.

--accept-unknown-input-arch

--no-accept-unknown-input-arch

Sinasabi ang linker upang tanggapin ang mga file ng pag-input na ang arkitektura ay hindi makilala. Ang palagay ay alam ng gumagamit kung ano ang ginagawa nila at sadyang nagnanais na mag-link sa mga di-kilalang mga input file na ito. Ito ang default na pag-uugali ng linker, bago i-release ang 2.14. Ang default na pag-uugali mula sa paglabas 2.14 pasulong ay upang tanggihan ang mga naturang mga file ng pag-input, at sa gayon ang idinagdag na -accept-unknown-input-arch ay naidagdag upang ibalik ang lumang pag-uugali.

-Ang keyword na ito

Ang pagpipiliang ito ay hindi pinansin para sa pagiging suno sa SunOS .

-Bynamnamic

-dy

-call_shared

Mag-link laban sa mga dynamic na library. Ito ay makahulugan lamang sa mga platform para sa kung aling mga shared library ang suportado. Ang pagpipiliang ito ay karaniwang ang default sa naturang mga platform. Ang iba't ibang variant ng pagpipiliang ito ay para sa pagiging tugma sa iba't ibang mga sistema. Maaari mong gamitin ang pagpipiliang ito ng maraming beses sa command line: nakakaapekto ito sa library na naghahanap ng mga pagpipilian sa -l na sumusunod dito.

-Blg

Itakda ang bandang "DF_1_GROUP" sa entry na "DT_FLAGS_1" sa dynamic na seksyon. Ito ang nagiging sanhi ng link ng runtime upang pangasiwaan ang mga lookup sa bagay na ito at ang mga dependency nito ay gumanap lamang sa loob ng grupo. - Walang alinlangan na ipinahiwatig. Ang opsyon na ito ay makahulugan lamang sa mga platform ng ELF na sumusuporta sa mga shared library .

-Batik

-dn

-non_shared

-static

Huwag mag-link laban sa mga shared library. Ito ay makahulugan lamang sa mga platform para sa kung aling mga shared library ang suportado. Ang iba't ibang variant ng pagpipiliang ito ay para sa pagiging tugma sa iba't ibang mga sistema. Maaari mong gamitin ang pagpipiliang ito ng maraming beses sa command line: nakakaapekto ito sa library na naghahanap ng mga pagpipilian sa -l na sumusunod dito.

-Bymbolic

Kapag lumilikha ng isang nakabahaging library, isailalim ang mga reference sa mga global na simbolo sa kahulugan sa loob ng shared library, kung mayroon man. Karaniwan, posible para sa isang programa na naka-link laban sa isang nakabahaging library upang i-override ang kahulugan sa loob ng shared library. Ang opsyon na ito ay makahulugan lamang sa ELFplatforms na sumusuporta sa mga shared library.

- Suriin-seksyon

--no-check-sections

Hinihiling ang linker na huwag suriin ang mga address ng seksyon pagkatapos na italaga sa kanila upang makita kung mayroong anumang overlaps. Karaniwan ang tagapamagitan ay gagawa ng check na ito, at kung nahahanap nito ang anumang overlaps ito ay makakapagdulot ng angkop na mga mensahe ng error. Ang linker ay alam tungkol sa, at gumawa ng mga allowance para sa mga seksyon sa mga overlay. Maaaring maibalik ang default na pag-uugali sa pamamagitan ng paggamit ng command line switch - check-section .

--cref

Output isang cross reference table. Kung ang isang mapa ng link ng mapa ay binuo, ang cross reference table ay nakalimbag sa file ng mapa. Kung hindi, ito ay nakalimbag sa karaniwang output.

Ang format ng mesa ay sadyang simple, upang madali itong maproseso ng isang script kung kinakailangan. Ang mga simbolo ay naka-print out, pinagsunod-sunod ayon sa pangalan. Para sa bawat simbolo, isang listahan ng mga pangalan ng file ay ibinigay. Kung tinukoy ang simbolo, ang unang file na nakalista ay ang lokasyon ng kahulugan. Ang mga natitirang mga file ay naglalaman ng mga sanggunian sa simbolo.

--no-define-common

Pinipigilan ng pagpipiliang ito ang pagtatalaga ng mga address sa karaniwang mga simbolo. Ang script na command na "INHIBIT_COMMON_ALLOCATION" ay may parehong epekto.

Ang -no-define-common option ay nagbibigay-daan sa decoupling ang desisyon upang magtalaga ng mga address sa Mga karaniwang simbolo mula sa pagpili ng uri ng output ng file; kung hindi man, isang pwersang uri ng output na hindi Relocatable ang nagtatalaga ng mga address sa Mga karaniwang simbolo. Ang paggamit ng - hindi tumutukoy sa pangkaraniwan ay nagpapahintulot sa Mga karaniwang simbolo na isinangguni mula sa isang nakabahaging library upang italaga lamang ang mga address sa pangunahing programa. Tinatanggal nito ang hindi ginagamit na dobleng espasyo sa nakabahaging library, at pinipigilan din ang anumang posibleng pagkalito sa paglutas sa maling duplicate kapag maraming mga dynamic na module na may dalubhasang mga path ng paghahanap para sa resolution ng simbolo ng runtime.

--defsym symbol = expression

Lumikha ng globo na simbolo sa output file, na naglalaman ng absolute address na ibinigay sa pamamagitan ng pagpapahayag . Maaari mong gamitin ang pagpipiliang ito ng maraming beses kung kinakailangan upang tukuyin ang maraming mga simbolo sa command line. Ang limitadong porma ng aritmetika ay sinusuportahan para sa pagpapahayag sa kontekstong ito: maaari kang magbigay ng hexadecimal constant o ang pangalan ng isang umiiral na simbolo, o gamitin ang "+" at "-" upang idagdag o ibawas ang hexadecimal constants o simbolo. Kung kailangan mo ng mas detalyadong mga expression, isaalang-alang ang paggamit ng linker command language mula sa isang script. Tandaan: walang white space sa pagitan ng simbolo , ang katumbas ng tanda (`` = ''), at pagpapahayag .

- tinantiyang [= style ]

- walang demanda

Pinipigilan ng mga pagpipiliang ito kung papalitin ang mga pangalan ng simbolo sa mga mensahe ng error at iba pang output. Kapag ang linker ay sinabihan na i-demangle, sinusubukan nito na ipakita ang mga pangalan ng simbolo sa isang nababasa na paraan: ito ay pinupuntahan ang mga nangungunang mga underscore kung ginagamit ito ng format ng file ng bagay, at nag-convert ng mga pangalan ng simbolong C ++ sa mga pangalan na nababasa ng gumagamit. Iba't ibang mga compiler ay may iba't ibang estilo ng mangling. Ang opsyonal na demangling style argument ay maaaring gamitin upang pumili ng isang angkop na demangling style para sa iyong tagatala. Ang linker ay magkakamali ayon sa default maliban kung ang variable ng kapaligiran COLLECT_NO_DEMANGLE ay nakatakda. Ang mga opsyon na ito ay maaaring gamitin upang i-override ang default.

- Nakaka-link na file

Itakda ang pangalan ng dynamic na linker. Ito ay makahulugan lamang kapag bumubuo ng mga dynamic na naka-link na mga executable ng ELF. Ang default na dynamic na linker ay karaniwang tama; huwag mong gamitin ito maliban kung alam mo kung ano ang iyong ginagawa.

- pag-embed-relocs

Ang pagpipiliang ito ay makahulugan lamang kapag nag-uugnay sa MIPS na naka-embed na PIC code, na binuo ng pagpipiliang -mag-embed na larawan sa GNU compiler at assembler. Ginagawa nito ang linker upang lumikha ng isang talahanayan na maaaring gamitin sa runtime upang maglipat ng anumang data na kung saan ay statically na-initialize sa mga halaga ng pointer. Tingnan ang code sa testsuite / ld-empic para sa mga detalye.

- Mga nakamamatay na babala

Tratuhin ang lahat ng mga babala bilang mga error .

--force-exe-suffix

Siguraduhin na ang output file ay may .exe suffix.

Kung ang isang matagumpay na binuo na may ganap na naka-link na output file ay walang " exe " o " .dll " na suffix, pinipilit ng opsyong ito ang linker upang kopyahin ang output file sa isa sa parehong pangalan na may ".exe" na suffix. Kapaki-pakinabang ang pagpipiliang ito kapag gumagamit ng mga unmodified Unix makefiles sa host ng Microsoft Windows, dahil ang ilang mga bersyon ng Windows ay hindi magpapatakbo ng isang imahe maliban kung nagtatapos ito sa isang ".exe" na suffix.

--no-gc-seksyon

--gc-sections

Paganahin ang koleksyon ng basura ng hindi ginagamit na mga seksyon ng input. Ito ay hindi pinansin sa mga target na hindi sumusuporta sa pagpipiliang ito. Ang opsyon na ito ay hindi tugma sa -r , ni hindi ito dapat gamitin sa dynamic na pag-uugnay. Ang default na pag-uugali (ng hindi pagsasagawa ng koleksyon ng basura na ito) ay maaaring maibalik sa pamamagitan ng pagtukoy - mga hindi-gc-seksyon sa command line.

- Tumulong

Mag-print ng buod ng mga opsyon sa command-line sa karaniwang output at exit.

- target-help

I-print ang isang buod ng lahat ng target na partikular na pagpipilian sa karaniwang output at exit.

-Map mapfile

I-print ang isang mapa ng link sa filefile file. Tingnan ang paglalarawan ng -M opsyon, sa itaas.

--no-keep-memory

ld ay karaniwang nag-optimize para sa bilis sa paggamit ng memory sa pamamagitan ng pag-cache ng mga talahanayan ng simbolo ng mga input file sa memorya. Ang opsiyon na ito ay nagsasabi sa ld sa halip na i-optimize para sa paggamit ng memory, sa pamamagitan ng rereading ng mga talahanayan ng simbolo kung kinakailangan. Maaaring ito ay kinakailangan kung ld ay tumatakbo sa labas ng memory space habang nagli-link ng isang malaking executable.

- walang-natukoy na

-z defs

Karaniwan kapag lumilikha ng di-sinasagisag na shared library, pinahihintulutan ang mga di-natukoy na simbolo at iniwan upang malutas sa pamamagitan ng runtime loader. Hindi pinahihintulutan ng mga pagpipiliang ito ang mga di-natukoy na simbolo.

--allow-multiple-definition

-z muldefs

Karaniwan kapag ang isang simbolo ay tinukoy ng maraming beses, ang tagasulat ay mag-ulat ng isang nakamamatay na error. Pinapayagan ng mga pagpipiliang ito ang maraming mga kahulugan at ang unang kahulugan ay gagamitin.

--allow-shlib-hindi natukoy

Pahintulutan ang mga di-natukoy na simbolo sa mga ibinahaging bagay kahit kailan - hindi naka-set ang hindi natukoy. Ang netong resulta ay ang mga di-natukoy na mga simbolo sa mga regular na bagay ay magpapalitaw pa rin ng isang error, ngunit hindi natukoy na mga simbolo sa mga nakabahaging bagay ay hindi papansinin. Ang pagpapatupad ng no_undefined ay nagpapahiwatig na ang runtime linker ay mabubunot sa di-natukoy na mga simbolo. Gayunpaman mayroong hindi bababa sa isang sistema (BeOS) kung saan ang hindi natukoy na mga simbolo sa mga shared library ay normal dahil ang kernel ay nagtatali sa mga ito sa oras ng pagkarga upang piliin kung aling function ang pinaka angkop para sa kasalukuyang arkitektura. I-dynamically piliin ng IE ang naaangkop na function ng memset. Tila normal din para sa mga shared library ng HPPA na magkaroon ng mga di-natukoy na simbolo.

- walang di-natukoy na bersyon

Karaniwan kapag ang isang simbolo ay may di-natukoy na bersyon, ang linker ay hindi papansinin ito. Ang pagpipiliang ito ay hindi pinahihintulutan ang mga simbolo na may di-natukoy na bersyon at isang malalang error ang ibibigay sa halip.

--no-warn-mismatch

Karaniwan ay magbibigay ng error kung sinubukan mong mag-link nang magkasama ang mga file ng pag-input na hindi tumutugma sa ilang kadahilanan, marahil dahil sila ay naipon para sa iba't ibang mga processor o para sa iba't ibang mga endianness. Sinasabi ng opsiyon na ito na dapat tahimik na pahintulutan ang gayong posibleng mga pagkakamali. Ang pagpipiliang ito ay dapat lamang gamitin nang may pag-aalaga, sa mga kaso kung nakuha mo ang ilang mga espesyal na pagkilos na nagsisiguro na ang mga error sa pag-link ay hindi naaangkop.

--no-whole-archive

I-off ang epekto ng opsyon na -whole-archive para sa kasunod na mga file ng archive.

--Nakawalan-exec

Panatilihin ang executable file ng output sa tuwing magagamit pa rin ito. Karaniwan, ang linker ay hindi makakagawa ng output file kung nakatagpo ito ng mga error sa panahon ng proseso ng pag-link; lumabas ito nang walang pagsulat ng isang output file kapag ito ay nagbibigay ng anumang error kahit ano pa man.

-nostdlib

Tanging ang direktoryo ng direktoryo ng paghahanap na malinaw na tinukoy sa command line. Ang mga direktoryo ng library na tinukoy sa mga script ng linker (kabilang ang mga script ng linker na tinukoy sa command line) ay hindi pinansin.

- format ng format ng format

ld maaaring i-configure upang suportahan ang higit sa isang uri ng object file. Kung ang iyong ld ay naka-configure sa ganitong paraan, maaari mong gamitin ang opsyon na --oformat upang tukuyin ang binary na format para sa output object file. Kahit na ang ld ay isinaayos upang suportahan ang mga alternatibong format ng bagay, karaniwan ay hindi mo kailangang tukuyin ito, tulad ng dapat na isinaayos upang gumawa bilang default na format ng output ang pinaka-karaniwang format sa bawat makina. Ang format ng output ay isang string ng teksto, ang pangalan ng isang partikular na format na sinusuportahan ng mga aklatan ng BFD. (Maaari mong ilista ang magagamit na mga format ng binary na may objdump -i .) Ang script na command na "OUTPUT_FORMAT" ay maaari ring tukuyin ang format ng output, ngunit pinipihit ito ng opsyong ito.

-qmagic

Ang pagpipiliang ito ay hindi pinansin para sa compatibility ng Linux.

-Ay

Ang opsyon na ito ay hindi pinansin para sa SVR4 compatibility.

--relax

Isang opsyon na may epekto sa umaasa sa machine. Ang opsyon na ito ay sinusuportahan lamang sa ilang mga target.

Sa ilang mga platform, ang opsyon na -relax ay gumaganap ng mga global na pag-optimize na magiging posible kapag ang linker ay nag-aayos ng pagtugon sa programa, tulad ng mga nakakarelaks na mga mode ng address at pagsasama ng mga bagong tagubilin sa output object file.

Sa ilang mga platform ang mga oras ng pag-link na ito sa mga global na pag-optimize ay maaaring gumawa ng makahulugan na pag- debug ng mga resulta na maaaring maipapatupad na imposible. Ito ay kilala na ang kaso para sa Matsushita MN10200 at MN10300 pamilya ng mga processors.

Sa mga platform na kung saan ito ay hindi suportado, - ang apela ay tinanggap, ngunit hindi pinansin.

--retain-symbols -file filename

Panatilihin lamang ang mga simbolo na nakalista sa filename ng file, tinatapon ang lahat ng iba pa. Ang filename ay simpleng flat file, na may isang simbolo na pangalan sa bawat linya. Ang pagpipiliang ito ay lalong kapaki-pakinabang sa mga kapaligiran (tulad ng VxWorks) kung saan ang isang malaking pandaigdigang talahanayan ng simbolo ay unti-unti na naipon, upang makatipid ng run-time na memorya.

- Hindi tinatanggal ang mga simbolo-file- hindi natukoy na mga simbolo, o mga simbolo na kinakailangan para sa mga relocation.

Maaari mo lamang tukuyin - ang mga titik-simbolong-file minsan sa command line. Sinasapawan nito ang -s at -S .

-rpath dir

Magdagdag ng isang direktoryo sa runtime library search path. Ginagamit ito kapag nag-uugnay sa isang ELFexecutable sa mga nakabahaging bagay. Ang lahat ng mga argumento ng rpath ay concatenated at ipinasa sa runtime linker, na ginagamit ang mga ito upang mahanap ang mga nakabahaging bagay sa runtime. Ang opsyon na -rpath ay ginagamit din kapag tinutukoy ang mga nakabahaging bagay na kinakailangan ng mga nakabahaging bagay na malinaw na kasama sa link; tingnan ang paglalarawan ng opsyon na -rpath-link . Kung -rpath ay hindi ginagamit kapag nag-uugnay sa isang executable ng ELF, ang mga nilalaman ng variable ng kapaligiran "LD_RUN_PATH" ay gagamitin kung ito ay tinukoy.

Ang opsyon na -rpath ay maaari ring gamitin sa SunOS. Sa pamamagitan ng default, sa SunOS, ang linker ay bumuo ng isang runtime search patch sa labas ng lahat ng mga pagpipilian sa -L ito ay ibinigay. Kung ginamit ang opsyon na -rpath , ang path ng paghahanap sa runtime ay bubuo nang eksklusibo gamit ang mga opsyon na -rpath , hindi papansin ang mga pagpipilian sa -L . Ito ay maaaring maging kapaki-pakinabang kapag gumagamit ng gcc, na nagdaragdag ng maraming -L na mga opsiyon na maaaring nasa NFS na naka-mount filesystem.

Para sa pagiging tugma sa iba pang mga link sa ELF, kung ang pagpipiliang -R ay sinusundan ng isang pangalan ng direktoryo, sa halip na isang pangalan ng file, itinuturing itong opsyon na -rpath .

-rpath-link DIR

Kapag gumagamit ng ELF o SunOS, ang isang nakabahaging library ay maaaring mangailangan ng isa pa. Nangyayari ito kapag ang link na "ld -shared" ay nagsasama ng isang nakabahaging library bilang isa sa mga input file.

Kapag nakatagpo ang linker ng naturang dependency kapag gumagawa ng isang di-shared, non-relocatable na link, ito ay awtomatikong subukan upang mahanap ang kinakailangang shared library at isama ito sa link, kung ito ay hindi kasama nang tahasang. Sa ganitong kaso, ang pagpipiliang -rpath-link ay tumutukoy sa unang hanay ng mga direktoryo upang maghanap. Ang pagpipilian sa -rpath-link ay maaaring tukuyin ang isang pagkakasunud-sunod ng mga pangalan ng direktoryo alinman sa pamamagitan ng pagtukoy ng isang listahan ng mga pangalan na pinaghiwalay ng mga colon, o sa pamamagitan ng pagpapakita ng maraming beses.

Ang pagpipiliang ito ay dapat gamitin nang may pag-iingat habang pinapalitan nito ang path ng paghahanap na maaaring mahirap naipon sa isang shared library. Sa ganoong kaso posible na gamitin ang hindi sinasadya ng isang iba't ibang mga landas sa paghahanap kaysa sa runtime linker ay gagawin.

Ang linker ay gumagamit ng mga sumusunod na path ng paghahanap upang mahanap ang mga kinakailangang shared library.

1.

Anumang mga direktoryo na tinukoy sa pamamagitan ng -rpath-link na mga pagpipilian.

2.

Ang anumang mga direktoryo na tinukoy sa pamamagitan ng -rpath mga opsyon. Ang pagkakaiba sa pagitan ng -rpath at -rpath-link ay ang mga direktoryo na tinukoy sa pamamagitan ng -rpath mga opsyon ay kasama sa maipapatupad at ginagamit sa runtime, samantalang ang opsyon na -rpath-link ay epektibo lamang sa oras ng pag-link. Ito ay para sa katutubong linker lamang.

3.

Sa isang sistema ng ELF, kung ang mga opsyon na -rpath at "rpath-link" ay hindi ginamit, hanapin ang mga nilalaman ng variable ng kapaligiran na "LD_RUN_PATH". Ito ay para sa katutubong linker lamang.

4.

Sa SunOS, kung ang opsyon na -rpath ay hindi ginamit, hanapin ang anumang mga direktoryo na tinukoy gamit ang mga pagpipilian sa -L .

5.

Para sa isang native na linker, ang mga nilalaman ng variable ng kapaligiran na "LD_LIBRARY_PATH".

6.

Para sa isang katutubong link ng ELF, ang mga direktoryo sa "DT_RUNPATH" o "DT_RPATH" ng isang nakabahaging library ay naghanap ng mga shared library na kinakailangan nito. Ang mga entry na "DT_RPATH" ay hindi pinansin kung umiiral ang mga "DT_RUNPATH".

7.

Ang mga default na direktoryo, normal / lib at / usr / lib .

8.

Para sa isang native na linker sa isang sistema ng ELF, kung umiiral ang file /etc/ld.so.conf , ang listahan ng mga direktoryo na matatagpuan sa file na iyon.

Kung hindi nahanap ang kinakailangang shared library, ang linker ay magbibigay ng babala at magpapatuloy sa link.

-shared

-Basali

Gumawa ng isang nakabahaging library. Ito ay kasalukuyang sinusuportahan lamang sa ELF, XCOFF at SunOS platform. Sa SunOS, ang linker ay awtomatikong makalikha ng isang nakabahaging library kung ang opsyon na -e ay hindi ginagamit at may mga di-natukoy na mga simbolo sa link.

--sort-common

Sinasabi ng opsyong ito ang ld upang pagbukud-bukurin ang karaniwang mga simbolo ayon sa laki kapag inilalagay ito sa naaangkop na mga seksyon ng output. Unang dumating ang lahat ng isang byte simbolo, pagkatapos ang lahat ng dalawang byte, pagkatapos ang lahat ng apat na byte, at pagkatapos ang lahat ng iba pa. Ito ay upang maiwasan ang mga puwang sa pagitan ng mga simbolo dahil sa mga hadlang sa pagkakahanay.

- pag-file ng laki [ laki ]

Katulad ng - lumilit-by-reloc ngunit lumilikha ng isang bagong seksyon ng output para sa bawat input file kapag naabot ang laki . laki ng default sa isang sukat ng 1 kung hindi ibinigay.

--split-by-reloc [ count ]

Sinusubukan na lumilikha ng mga dagdag na seksyon sa file ng output nang sa gayon ay walang iisang seksyon ng output sa file ay naglalaman ng higit sa pag- count relocation. Ito ay kapaki-pakinabang kapag ang pagbuo ng malaking relocatable file para sa pag-download sa ilang mga real kernels oras sa COFF object format ng file; dahil COFFcannot ay kumakatawan sa higit sa 65535 relocations sa isang solong seksyon. Tandaan na hindi ito gagana sa mga format ng file ng bagay na hindi sumusuporta sa mga seksyon ng di-makatwirang. Ang linker ay hindi magbabahagi ng mga indibidwal na mga seksyon ng input para sa muling pamimigay, kaya kung ang isang solong bahagi ng input ay naglalaman ng higit sa count relocations isang output na seksyon ay naglalaman ng maraming mga relocation. bilangin ang mga default sa isang halaga ng 32768.

- istatistika

Kumpirmahin at ipakita ang mga istatistika tungkol sa pagpapatakbo ng tagagamit, tulad ng oras ng pagpapatupad at paggamit ng memory.

- format na format

Para sa ilang mga target, ang output ng ld ay naiiba sa ilang mga paraan mula sa output ng ilang umiiral na linker. Hinihiling ng switch na ito na gamitin ang tradisyunal na format sa halip.

Halimbawa, sa SunOS, pinagsasama ng ld ang mga duplicate na entry sa simbolong talahanayan ng string. Ito ay maaaring mabawasan ang laki ng isang output file na may ganap na debugging na impormasyon sa pamamagitan ng higit sa 30 porsiyento. Sa kasamaang palad, ang programa ng SunOS "dbx" ay hindi maaaring basahin ang resultang programa ("gdb" ay walang problema). Ang - lumipat sa format na straditional- nagsasabi sa ld na hindi pagsamahin ang mga dobleng entry.

--Section-start sectionname = org

Hanapin ang isang seksyon sa output file sa absolute address na ibinigay ng org . Maaari mong gamitin ang pagpipiliang ito ng maraming beses hangga't kailangan upang mahanap ang maraming mga seksyon sa command line. org ay dapat na isang solong hexadecimal integer; para sa pagiging tugma sa iba pang mga linker, maaari mong alisin ang nangungunang 0x kadalasang nauugnay sa mga hexadecimal value. Tandaan: walang white space sa pagitan ng sectionname , ang katumbas ng sign (`` = ''), at org .

-Tbss org

-Tdata org

-Ttext org

Gamitin ang org bilang panimulang address para --- --- ayon sa "bss", "data", o ang "teksto" na bahagi ng output file. org ay dapat na isang solong hexadecimal integer; para sa pagiging tugma sa iba pang mga linker, maaari mong alisin ang nangungunang 0x kadalasang nauugnay sa mga hexadecimal value.

- Dll-verbose

- Sabiose

Ipakita ang numero ng bersyon para sa ld at i-lista ang sinusuportahang linker emulations. Ipakita kung aling mga input file ang maaari at hindi mabubuksan. Ipakita ang script ng linker na ginagamit ng linker.

--version-script = version-scriptfile

Tukuyin ang pangalan ng isang script ng bersyon sa linker. Karaniwang ginagamit ito kapag lumilikha ng mga nakabahaging mga aklatan upang tukuyin ang karagdagang impormasyon tungkol sa heirarkiya ng bersyon para sa paglikha ng library. Ang opsyon na ito ay makahulugan lamang sa mga platform ng ELF na sumusuporta sa mga shared library.

--Walang-karaniwang

Magbigay ng babala kapag ang isang pangkaraniwang simbolo ay pinagsama sa isa pang pangkaraniwang simbolo o may kahulugan ng simbolo. Pinapayagan ng mga link ng Unix ang medyo hindi praktikal na kasanayan na ito, ngunit ang mga link sa iba pang mga operating system ay hindi. Ang pagpipiliang ito ay nagpapahintulot sa iyo na makahanap ng mga potensyal na problema sa pagsasama ng mga simbolo ng globo. Sa kasamaang palad, ang ilang mga library ng C ay gumagamit ng praktis na ito, upang makakuha ka ng ilang mga babala tungkol sa mga simbolo sa mga aklatan pati na rin sa iyong mga programa.

May tatlong uri ng mga simbolong pandaigdig, na isinalarawan dito sa pamamagitan ng mga halimbawa ng C:

int i = 1;

Isang kahulugan, na napupunta sa inisyal na seksyon ng data ng output file.

extern int i;

Isang di-natukoy na sanggunian, na hindi naglalaan ng espasyo. Dapat ay mayroong alinman sa isang kahulugan o isang pangkaraniwang simbolo para sa variable sa isang lugar.

int i;

Isang pangkaraniwang simbolo. Kung mayroon lamang (isa o higit pa) karaniwang mga simbolo para sa isang variable, napupunta ito sa uninitialized area ng data ng output file. Pinagsasama ng linker ang maraming karaniwang mga simbolo para sa parehong variable sa isang simbolo. Kung ang mga ito ay may iba't ibang laki, pinipili nito ang pinakamalaking sukat. Ang linker ay lumiliko ng isang karaniwang simbolo sa isang deklarasyon, kung mayroong isang kahulugan ng parehong variable.

Ang -warn-common na pagpipilian ay maaaring gumawa ng limang uri ng mga babala. Ang bawat babala ay binubuo ng isang pares ng mga linya: unang inilalarawan ang simbolo na nakatagpo lamang, at ikalawang naglalarawan ng nakaraang simbolo na nakatagpo ng parehong pangalan. Ang isa o pareho ng dalawang simbolo ay magiging pangkaraniwang simbolo.

1.

Ang pagbabagong pangkaraniwang simbolo, dahil mayroon nang kahulugan para sa simbolo.

(): babala: karaniwang ng ` 'na na-override sa pamamagitan ng kahulugan (): babala: tinukoy dito

2.

Ang pagbukas ng pangkaraniwang simbolo sa isang sanggunian, sapagkat naranasan ang ibang kahulugan para sa simbolo. Ito ay katulad ng nakaraang kaso, maliban na ang mga simbolo ay nakatagpo sa ibang pagkakasunud-sunod.

(): babala: kahulugan ng ` 'na napakahalaga ng karaniwang (): babala: karaniwang naririto

3.

Pagsasama ng pangkaraniwang simbolo na may nakaraang karaniwang laki na simbolo.

(): babala: maraming karaniwang ng ` ' (): babala:

4.

Pagsasama ng pangkaraniwang simbolo na may nakaraang mas malaking karaniwang simbolo.

(): babala: karaniwang ng ` 'na na-override ng mas malaking karaniwang (): babala: mas malaki ang karaniwang naririto

5.

Pagsasama ng pangkaraniwang simbolo na may nakaraang mas maliliit na simbolo. Ito ay katulad ng nakaraang kaso, maliban na ang mga simbolo ay nakatagpo sa ibang pagkakasunud-sunod.

(): babala: karaniwan sa ` 'na nagpapaikli sa mas maliit na karaniwang (): babala: mas karaniwan ay naririto

--Warn-constructor

Warn kung may anumang global na constructor ay ginagamit. Kapaki-pakinabang lamang ito para sa ilang mga format ng file ng bagay. Para sa mga format tulad ng COFF o ELF, ang linker ay hindi maaaring makita ang paggamit ng mga global na konstruktor.

--warn-multiple-gp

Warn kung maraming mga global pointer values ​​ang kinakailangan sa output file . Ito ay mahalaga lamang para sa ilang mga processor, tulad ng Alpha. Sa partikular, ang ilang mga processor ay naglalagay ng malaking halaga ng mga constants sa isang espesyal na seksyon. Ang isang espesyal na rehistro (ang pandaigdigang pointer) ay tumuturo sa gitna ng seksyon na ito, upang ang mga constants ay maaaring mabasa nang mahusay sa pamamagitan ng isang rehistradong mode ng rehistrasyon na may kaugnayan sa base. Dahil ang offset sa base-rehistro na kamag-anak mode ay naayos at medyo maliit (hal., 16 bits), ito ay naglilimita sa maximum na laki ng pare-pareho ang pool. Kaya, sa mga malalaking programa, madalas na kinakailangan upang gumamit ng maramihang mga halaga ng global pointer upang ma-address ang lahat ng posibleng mga constants. Ang pagpipiliang ito ay nagiging sanhi ng isang babala na ibibigay tuwing nangyayari ang kasong ito.

- Wag kang-minsan

Lamang balaan kaagad para sa bawat di-natukoy na simbolo, sa halip na isang beses bawat module na tumutukoy dito.

- Alerto-seksyon-align

Warn kung ang address ng isang seksyon ng output ay nabago dahil sa pagkakahanay. Karaniwan, ang pag-align ay itatakda ng isang seksyon ng input. Ang address ay babaguhin lamang kung hindi ito malinaw na tinukoy; ibig sabihin, kung ang utos ng "SEKSYON" ay hindi tumutukoy sa isang pagsisimula ng address para sa seksyon.

--whole-archive

Para sa bawat archive na binanggit sa command line pagkatapos ng opsyon na -whole-archive , isama ang bawat object file sa archive sa link, sa halip na maghanap ng archive para sa kinakailangang mga file ng bagay. Ito ay karaniwang ginagamit upang i-on ang isang archive file sa isang nakabahaging library, na pumipilit sa bawat bagay na maisama sa resultang ibinahaging library. Ang pagpipiliang ito ay maaaring gamitin nang higit sa isang beses.

Dalawang tala kapag ginagamit ang pagpipiliang ito mula sa gcc: Una, hindi alam ng gcc ang opsyon na ito, kaya kailangan mong gamitin ang -Wl, -whole-archive . Ikalawa, huwag kalimutang gamitin ang -Wl, -no-buong-archive pagkatapos ng iyong listahan ng mga archive, dahil idagdag ng gcc ang sarili nitong listahan ng mga archive sa iyong link at maaaring hindi mo nais na maapektuhan ng bandila na ito ang mga iyon.

--wrap simbolo

Gumamit ng function na pambalot para sa simbolo . Anumang hindi natukoy na sanggunian sa simbolo ay malulutas sa "__ wrap_symbol". Ang anumang di-natukoy na reference sa "__real_symbol" ay malulutas upang simbolo .

Maaari itong magamit upang magbigay ng wrapper para sa isang function ng system. Ang function na pambalot ay dapat na tinatawag na "__wrap_symbol". Kung nais mong tawagan ang function ng system, dapat itong tumawag sa "__ real_symbol".

Narito ang isang maliit na halimbawa:

walang bisa * __wrap_malloc (int c) {printf ("malloc na tinatawag na% ld \ n", c); bumalik __real_malloc (c); }

Kung nag-link ka ng iba pang code sa file na ito gamit ang --wrap malloc , pagkatapos ang lahat ng mga tawag sa "malloc" ay tatawagan ang function na "__wrap_malloc" sa halip. Ang tawag sa "__real_malloc" sa "__wrap_malloc" ay tatawagan ang totoong "malloc" function.

Maaari mong hilingin na magbigay ng isang "__real_malloc" function pati na rin, upang ang mga link na walang ang - opsyon wol ay magtagumpay. Kung gagawin mo ito, hindi mo dapat ilagay ang kahulugan ng "__ real_malloc" sa parehong file bilang "__wrap_malloc"; kung gagawin mo, ang assembler ay maaaring malutas ang tawag bago ang linker ay may pagkakataon na balutin ito sa "malloc".

- Naka-bagong-dtags

- hindi maiiwasan-bagong-dtags

Ang linker na ito ay maaaring lumikha ng mga bagong dynamic na tag sa ELF. Ngunit ang mas lumang mga sistema ng ELF ay hindi maaaring maunawaan ang mga ito. Kung tinukoy mo ang - maaaring-bagong-dtags , ang mga dynamic na tag ay malilikha kung kinakailangan. Kung tinukoy mo - hindi maiiwasan-bagong-dtags , walang bagong mga dynamic na tag ay malilikha. Bilang default, hindi nilikha ang mga bagong dynamic na tag. Tandaan na ang mga pagpipiliang iyon ay magagamit lamang para sa mga sistema ng ELF.

Ang link ng i386 PE ay sumusuporta sa opsyon na -shared , na nagiging sanhi ng output upang maging isang dynamic na naka-link na library (DLL) sa halip ng isang normal na maipapatupad. Dapat mong pangalanan ang output na "* .dll" kapag ginamit mo ang pagpipiliang ito. Bukod pa rito, ganap na sinusuportahan ng linker ang standard na "* .def" na mga file, na maaaring tinukoy sa linker command line tulad ng isang object file (sa katunayan, dapat itong mauna ang mga archive na ini-export nito ang mga simbolo mula, upang matiyak na makakakuha sila ng naka-link sa, tulad ng isang normal na file ng bagay).

Bilang karagdagan sa mga opsyong pangkaraniwan sa lahat ng mga target, ang suporta ng i386 PE ay sumusuporta sa mga karagdagang pagpipilian ng command line na tiyak sa target na i386 PE. Ang mga pagpipilian na nagsasagawa ng mga halaga ay maaaring ihiwalay mula sa kanilang mga halaga sa pamamagitan ng alinman sa isang puwang o isang katumbas na tanda.

--add-stdcall-alias

Kung ibinigay, ang mga simbolo na may stdcall suffix ( @nn ) ay mai-export na bilang-ay at pati na rin ang suffix na nakuha.

- file ng baseline- file

Gamitin ang file bilang ang pangalan ng isang file kung saan upang mai-save ang mga address base ng lahat ng mga relocations na kinakailangan para sa pagbuo ng DLLs sa dlltool .

- Dll

Lumikha ng isang DLL sa halip na isang regular na maipapatupad. Maaari mo ring gamitin -nag-share o tukuyin ang isang "LIBRARY" sa isang naibigay na ".def" na file.

--Magkakaroon-stdcall-fixup

- hindi maiiwasan-stdcall-fixup

Kung ang link ay nakahanap ng isang simbolo na hindi nito malulutas, susubukan na gawin ang `` malabo na pag-uugnay '' sa pamamagitan ng paghanap ng isa pang tinukoy na simbolo na naiiba lamang sa format ng pangalan ng simbolo (cdecl vs stdcall) at lutasin ang simbolo na iyon sa pamamagitan ng pag-link sa tugma. Halimbawa, ang hindi natukoy na simbolo na "_foo" ay maaaring maiugnay sa function na "_foo @ 12", o ang di-natukoy na simbolong "_bar @ 16" ay maaaring maiugnay sa function na "_bar". Kapag ginagawa ito ng tagapamagitan, nag-print ito ng isang babala, dahil karaniwan itong hindi dapat na mag-link, ngunit kung minsan ay nag-import ng mga library na nabuo mula sa mga third-party na dlls ay maaaring mangailangan ng tampok na ito na magagamit. Kung tinukoy mo ang - maaaring-stdcall-fixup , ang tampok na ito ay ganap na pinagana at ang mga babala ay hindi nakalimbag. Kung tinukoy mo - hindi maiiwasan-stdcall-fixup , ang tampok na ito ay hindi pinagana at ang mga mismatches ay itinuturing na mga pagkakamali.

--Export-all-symbols

Kung ibinigay, ang lahat ng mga global na simbolo sa mga bagay na ginamit upang bumuo ng isang DLL ay mai-export ng DLL. Tandaan na ito ay ang default kung kung hindi man ay hindi magiging anumang mga na-export na mga simbolo. Kapag ang mga simbolo ay tahasang na-export sa pamamagitan ng mga file na DEF o di-wastong na-export sa pamamagitan ng mga katangian ng pag-andar, ang default ay hindi mag-export ng anumang bagay maliban kung ang opsyong ito ay ibinigay. Tandaan na ang mga simbolo na "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12", at "impure_ptr" ay hindi awtomatikong mai-export. Gayundin, ang mga simbolo na na-import mula sa iba pang mga DLL ay hindi muling i-export, ni ang mga simbolo na tumutukoy sa panloob na layout ng DLL tulad ng mga nagsisimula sa "_head_" o nagtatapos sa "_iname". Bilang karagdagan, ang mga simbolo mula sa "libgcc", "libstd ++", "libmingw32", o "crtX.o" ay mai-export. Ang mga simbolo na ang mga pangalan ay nagsisimula sa "__rtti_" o "__builtin_" ay hindi mai-export, upang tumulong sa C ++ DLL. Sa wakas, mayroong isang malawak na listahan ng cygwin-pribadong mga simbolo na hindi na-export (malinaw naman, ito ay nalalapat sa kapag nagtatayo DLLs para sa cygwin target).

Ang mga cygwin-excludes ay: "_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 ", at" kapaligiran ".

- Simbolo ng simbolong -exclude-simbolo , simbolo , ...

Tinutukoy ang isang listahan ng mga simbolo na hindi awtomatikong mai-export. Ang mga pangalan ng simbolo ay maaaring ma-delimited sa pamamagitan ng mga kuwit o mga colon.

--Exclude-libs lib , lib , ...

Tinutukoy ang isang listahan ng mga library ng archive mula sa kung aling mga simbolo ang hindi dapat awtomatikong ma-export. Ang mga pangalan ng library ay maaaring ma-delimited sa pamamagitan ng mga kuwit o mga colon. Ang pagtukoy sa "-exclude-libs ALL" ay nagbukod ng mga simbolo sa lahat ng mga library ng archive mula sa awtomatikong pag-export. Ang mga simbolo na tahasang nakalista sa isang .def file ay nai-export pa rin, anuman ang pagpipiliang ito.

- Pag-align ng file

Tukuyin ang pagkakahanay ng file. Ang mga seksyon sa file ay laging magsisimula sa mga file offset na kung saan ay ang mga multiple ng numerong ito. Ang default na ito ay 512.

- Maghintay ng reserba

- Maghintay magreserba , gumawa

Tukuyin ang dami ng memorya upang magreserba (at opsyonal na magkasala) upang magamit bilang kimpal para sa programang ito. Ang default ay 1Mb reserved, 4K nakatuon.

- Ang halaga ng imahe na naka-base

Gamitin ang halaga bilang base address ng iyong programa o dll. Ito ang pinakamababang lokasyon ng memorya na gagamitin kapag na-load ang iyong programa o dll. Upang mabawasan ang pangangailangan upang maglipat at mapabuti ang pagganap ng iyong mga dlls, ang bawat isa ay dapat magkaroon ng isang natatanging base address at hindi magkakapatong sa anumang iba pang mga dlls. Ang default ay 0x400000 para sa mga executable, at 0x10000000 para sa dlls.

--kill-sa

Kung ibinigay, ang mga stdcall suffixes (@ nn ) ay mabubura mula sa mga simbolo bago ma-export ang mga ito.

- Halaga ng imahe ng imahe -major

Itinatakda ang pangunahing bilang ng `` bersyon ng imahe ''. Defaults sa 1.

- Halaga ng bersyon na-os-os

Itinatakda ang pangunahing bilang ng `` os na bersyon ''. Defaults sa 4.

- Halaga ng sub-system-subsystem

Itinatakda ang pangunahing bilang ng `` subsystem na bersyon ''. Defaults sa 4.

- Minamahal na bersyon ng imahe

Itinatakda ang menor de edad na bilang ng `` bersyon ng imahe ''. Defaults sa 0.

- Minor-os-na bersyon na halaga

Itinatakda ang menor na bilang ng `` os na bersyon ''. Defaults sa 0.

- Minor-subsystem-bersyon na halaga

Itinatakda ang menor de edad bilang ng `` subsystem na bersyon ''. Defaults sa 0.

- Output-def file

Ang linker ay lilikha ng file file na naglalaman ng isang DEF file na nararapat sa DLL ang linker ay bumubuo. Ang file na DEF na ito (na dapat tawagin ay "* .def") ay maaaring gamitin upang lumikha ng isang import library na may "dlltool" o maaaring magamit bilang isang sanggunian sa awtomatikong o ganap na nai-export na mga simbolo.

--out-implib file

Ang linker ay lilikha ng file na file na naglalaman ng isang import lib na naaayon sa DLL ang linker ay bumubuo. Ang import na lib na ito (na dapat ay tinatawag na "* .dll.a" o "* .a" ay maaaring gamitin upang iugnay ang mga kliyente laban sa nabuong DLL; ginagawang posible ng pag-uugali na ito na laktawan ang isang hiwalay na "dlltool" na hakbang sa paglikha ng paglikha ng library.

--Kenable-auto-image-base

Awtomatikong piliin ang base ng imahe para sa mga DLL, maliban kung ang isa ay tinukoy gamit ang argument "-image-base". Sa pamamagitan ng paggamit ng isang hash na nabuo mula sa dllname upang lumikha ng mga natatanging mga base ng imahe para sa bawat DLL, mga banggaan sa memory at mga relocation na maaaring maantala ang pagpapatupad ng programa ay maiiwasan.

--Disable-auto-image-base

Huwag awtomatikong bumuo ng isang natatanging imahe base. Kung walang base ng imahe na tinukoy ng gumagamit ("- larawan-base") pagkatapos ay gamitin ang default na platform.

--dll-search-prefix na string

Kapag nag-uugnay nang dynamically sa isang dll na walang library ng pag-import, maghanap ng " .dll" sa kagustuhan sa "lib .dll". Ang pag-uugali na ito ay nagpapahintulot sa madaling pagkakaiba sa pagitan ng mga DLL na binuo para sa iba't ibang mga `` subplatforms '': native, cygwin, uwin, pw, atbp. Halimbawa, ang cygwin DLL ay karaniwang gumagamit ng "--dll-search-prefix = cyg".

--Mag-import-auto-import

Gumawa ng sopistikadong pag-uugnay ng "_symbol" sa "__imp__symbol" para sa mga import ng DATA mula sa DLLs, at lumikha ng kinakailangang mga simbolo sa pagbubungkal kapag nagtatayo ng mga library ng pag-import sa mga DATAexports. Karaniwang ito ay 'magtrabaho lang' --- ngunit kung minsan ay maaaring makita mo ang mensaheng ito:

"Variable '' ay hindi maaaring i-auto-import. Mangyaring basahin ang dokumentasyon para sa" --enable-auto-import "ng ld para sa mga detalye."

Ang mensaheng ito ay nangyayari kapag ang ilang mga (sub) na expression ay naka-access sa isang address sa huli na ibinigay ng kabuuan ng dalawang constants (Win32 import talahanayan lamang payagan ang isa). Halimbawa kung saan maaaring mangyari ito isama access sa mga miyembro ng mga patlang ng struct variable na-import mula sa isang DLL, pati na rin ang paggamit ng isang pare-pareho index sa isang array variable na-import mula sa isang DLL. Ang anumang multiword variable (arrays, structs, matagal na, atbp) ay maaaring magpalitaw ng kondisyon ng error na ito. Gayunpaman, anuman ang eksaktong uri ng data ng nakakasakit na naka-export na variable, ld ay lagi itong matagpuan, maglalabas ng babala, at lumabas.

Mayroong maraming mga paraan upang matugunan ang paghihirap na ito, anuman ang uri ng data ng nai-export na variable:

Ang isang paraan ay ang paggamit ng --enable-runtime-pseudo-reloc switch. Ito ay umalis sa gawain ng pagsasaayos ng mga sanggunian sa iyong client code para sa runtime environment, kaya ang paraang ito ay gumagana lamang kapag sinusuportahan ng runtime environtment ang tampok na ito.

Ang ikalawang solusyon ay upang pilitin ang isa sa mga 'constants' na maging isang variable --- iyon ay, hindi alam at hindi-optimizable sa oras ng pag-compile. Para sa arrays, mayroong dalawang posibilidad: a) gawin ang indexee (address ng array) ng isang variable, o b) gawin ang 'palaging' index isang variable. Kaya:

extern uri extern_array []; extern_array [1] -> {volatile type * t = extern_array; t [1]}

o

extern uri extern_array []; extern_array [1] -> {volatile int t = 1; extern_array [t]}

Para sa structs (at karamihan sa iba pang uri ng data ng multiword) ang tanging pagpipilian ay upang gawin ang struct mismo (o ang mahabang haba, o ang ...) na variable:

extern_struct extern struct; extern_struct.field -> {volatile struct s * t = & extern_struct; t-> field}

o

extern long long extern_ll; extern_ll -> {volatile long long * local_ll = & extern_ll; * local_ll}

Ang ikatlong paraan ng pakikitungo sa kahirapang ito ay upang iwanan ang 'auto-import' para sa nakakasakit na simbolo at markahan ito ng "__declspec (dllimport)". Gayunpaman, sa pagsasagawa na nangangailangan ng paggamit ng #define ng oras ng pag-compile upang ipahiwatig kung ikaw ay nagtatayo ng isang DLL, pagbuo ng code ng client na mag-link sa DLL, o pagbuo / pag-link lamang sa isang static na library. Sa paggawa ng pagpili sa pagitan ng iba't ibang mga paraan ng paglutas ng 'direct address na may pare-pareho na pag-alis ng problema', dapat mong isaalang-alang ang tipikal na paggamit sa real-world:

Orihinal:

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

Solusyon 1:

--foo.h extern int arr []; --foo.c #include "foo.h" void main (int argc, char ** argv) {/ * Ang workaround na ito ay para sa win32 at cygwin; hindi "optimize" * / volatile int * parr = arr; printf ("% d \ n", parr [1]); }

Solusyon 2:

--foo.h / * Tandaan: ang auto-export ay ipinapalagay (walang __declspec (dllexport)) * / #if (tinukoy (_WIN32) || tinukoy (__ CYGWIN__)) &&! (tinukoy (FOO_BUILD_DLL) || tinukoy (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]); }

Ang ika-apat na paraan upang maiwasan ang problemang ito ay muling i-code ang iyong library upang gumamit ng functional interface sa halip na isang interface ng data para sa mga nakakasakit na mga variable (eg set_foo () at get_foo () accessor function).

--Disable-auto-import

Huwag tangkaing magsagawa ng sophisticalted na pag-uugnay ng "_symbol" sa "__imp__symbol" para sa DATAimports mula sa DLLs.

--enable-runtime-pseudo-reloc

Kung ang iyong code ay naglalaman ng mga ekspresyon na inilarawan sa - seksyon ng -enable-auto-import, iyon ay, DATAimports mula sa DLL na may di-zero na offset, lumipat na ito ay lilikha ng isang vector ng 'runtime pseudo relocations' na magagamit ng runtime environment upang ayusin ang mga sanggunian sa gayong data sa iyong code ng kliyente.

- hindi maiiwasan-runtime-pseudo-reloc

Huwag gumawa ng mga pseudo relocation para sa mga non-zero na offset na mga import ng DATA mula sa DLLs. Ito ang default.

--Nakikita-dagdag-pe-debug

Magpakita ng karagdagang impormasyon sa pag-debug na nauugnay sa thunking na simbolo ng auto-import.

- Pagkakasunod-sunod

Itinatakda ang pagkakahanay ng seksyon. Ang mga seksyon sa memorya ay laging magsisimula sa mga address na isang multiple ng numerong ito. Defaults sa 0x1000.

- Stack reserve

- Magtustos ng reserba , gumawa

Tukuyin ang dami ng memorya upang magreserba (at opsyonal na gumawa) na gagamitin bilang stack para sa programang ito. Ang default ay 2Mb reserved, 4K nakatuon.

--subsystem na

--subsystem na : pangunahing

--subsystem na : pangunahing . menor de edad

Tinutukoy ang subsystem kung saan gagawin ang iyong programa. Ang legal na mga halaga na kung saan ay "native", "windows", "console", at "posix". Maaari mo ring opsyonal na itakda ang subsystem na bersyon din.

Mahalaga: Gamitin ang command ng tao ( % man ) upang makita kung paano ginagamit ang isang utos sa iyong partikular na computer.