Linux / Unix Command: Id

NAMA

ld - Nggunakake LD , linker GNU

SINOPSIS

ld [ options ] objfile ...

DESCRIPTION

LD nggabungake sawetara obyek lan arsip file , pindhah data lan nggabungake referensi simbol. Biasane langkah pungkasan nyusun program iku kanggo mbukak ld .

ld nampa file Linker Command Language sing ditulis ing sintaks Sintaks Komando Editor AT & T, kanggo nyedhiyakake kontrol sing jelas lan total liwat proses penyambungan.

Kaca iki ora nggambaraké basa command; pirsani entri kasebut ing "info", utawa ld: linker GNU , kanggo katrangan lengkap ing basa pangandika lan ing aspèk liya saka linker GNU.

Versi ld iki nggunakake pustaka umum BFD kanggo operate file obyek. Iki ngidini ld kanggo maca, gabungke, lan nulis file obyek ing akeh format sing beda-beda --- contone, COFF utawa "a.out". Format sing beda bisa digandhengake kanggo ngasilake file obyek sing kasedhiya.

Luwih saka keluwesan, panyedhiya GNU luwih mbiyantu tinimbang panyedhiya liyane ing nyedhiyakake informasi diagnostik. Akeh linkers nglirwakake eksekusi langsung nalika nandhang kesalahan; manawa bisa, terus dileksanakake, ngidini sampeyan nemtokake kasalahan liyane (utawa, ing sawetara kasus, kanggo njaluk file output sanajan ana kesalahan).

Linker GNU iki dimaksudake kanggo nutupi macem-macem kahanan, lan dadi kompatibel sabisa karo pranala liyane. Minangka asil, sampeyan duwe akeh pilihan kanggo ngontrol prilaku.

PILIHAN

Linker ndhukung plethora pilihan baris perintah , nanging ing praktik nyata sawetara sing digunakake ing konteks tartamtu. Contone, sing kerep nggunakake ld kanggo ngubungake file objek Unix standar ing standar, sistem Unix sing didhukung. Ing sistem kasebut, kanggo ngubungaké file "hello.o":

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

Iki ngandhani ld kanggo ngasilake file sing disebut output minangka asil ngubungake file "/lib/crt0.o" karo "hello.o" lan perpustakaan "libc.a", sing bakal teka saka direktori standar nggoleki. (Pirsani diskusi opsi -l ing ngisor iki.)

Sawetara opsi baris perintah kanggo ld bisa kasebut ing sembarang titik ing baris perintah. Nanging, opsi sing ngarujuk marang file, kayata -l utawa -T , nyebabake file bisa dibaca ing titik ing pilihan kasebut ing baris perintah, relatif marang file obyek lan opsi file liyane. Mbaleni opsi non-file kanthi argumen sing beda-beda ora bakal duwe efek luwih, utawa ngatasi sadurunge (sing luwih ngiwa ing baris perintah) opsine. Pilihan sing bisa ditemtokake luwih saka siji diwatesi ing ngisor iki.

Argumen non-pilihan yaiku obyek file utawa arsip sing bakal dihubungkan bebarengan. Padha bisa ngetutake, ndhisiki, utawa digabung karo pilihan baris perintah, kajaba argumen file obyek sing ora bisa dilebokake ing antarane opsi lan argumen.

Biasane, sing ngubungake kasebut diarani paling kurang siji file obyek, nanging sampeyan bisa nemtokake file-file input biner sing sejen nganggo -l , -R , lan perintah komisi script. Yen ora ana file input binar ing kabeh, panuduh ora ngasilake output, lan ngetokake pesen Ora ana file input .

Yen linker ora bisa ngenali format file obyek, bakal nganggep yèn iku minangka script linker. Aksara sing ditemtokake kanthi cara iki nambah aksara sing ngubungake utamane sing digunakake kanggo tautan (salah siji skrip penanda bawaan utawa sing kasebut kanthi nggunakake -T ). Fitur iki ngidini penyaji sing ngubungake file sing katon minangka obyek utawa arsip, nanging mung nemtokake sawetara simbol nilai, utawa nggunakake "INPUT" utawa "GROUP" kanggo ngemot objek liyane. Elinga yen ngandharake naskah kanthi cara iki mung nambahi script sing ngubungake utama; gunakake opsi -T kanggo ngganti naskah sing ngubungake default.

Kanggo opsi sing asale saka huruf siji, argumen pilihan kudu ngetutake huruf pilihan tanpa ngidul, utawa diwenehake minangka argumen kapisah kanthi langsung sawise pilihan sing mbutuhake.

Kanggo opsi sing jenenge pirang-pirang huruf, salah siji saka siji utawa kalih baris bisa ndhisiki jeneng opsi kasebut; contone, simbol-simbol lan simbol-simbol padha karo. Wigati - ana pangecualian kanggo aturan iki. Opsi multi aksara sing diwiwiti kanthi huruf cilik 'o' mung bisa diawali karo rong garis. Iki kanggo ngurangi kebingungan karo opsi -o . Dadi contone -omagic nemtokake jeneng file output kanggo sihir déné --omagic nemtokake bendera NMAGIC ing output.

Alesan kanggo opsi pirang-pirang kudu dipisahake saka jeneng pilihan kanthi tandha sing padha, utawa diwenehi minangka argumen kapisah kanthi langsung sawise pilihan sing mbutuhake. Contone, --trace-symbol foo lan --trace-symbol = foo padha karo. Singkatan unik saka jeneng opsi pirang-pirang ditampa.

Wigati - yen linker dipindhah sacara ora langsung, liwat driver compiler (contone gcc ), mangka kabeh opsi baris command linker kudu di-prefixed dening -Wl, (utawa apa sing cocog kanggo driver compiler tartamtu) kaya iki:

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

Iki penting, amarga program penggerak kompiler bisa kanthi cepet nyelehake opsi linker, sing bakal nimbulake pranala sing ala.

Ing ngisor iki tabel pangaturan baris perintah umum sing ditampa dening penyajian GNU:

-a kunci

Pilihan iki didhukung kanggo kompatibilitas HP / UX. Alesan kunci kudu salah arsip , sambungan , utawa standar . -Akademik setara karo fungsi -Batik , lan rong kata kunci liya kanthi fungsional sing padha karo -Bdynamic . Pilihan iki bisa dipigunakaké sawetara kali.

- Arsitektur

- arkitektur = arsitektur

Ing release saiki ld , pilihan iki mung migunani kanggo arsitektur kulawarga Intel 960. Ing konfigurasi ld , arsitèktur arsitèktur ngenali arsitèktur tartamtu ing kulawarga 960, nyediakaké sawetara safeguard lan ngowahi jalur pandu arsip-perpustakaan.

Rilasi sing bakal dilakoni ing mangsa ld uga ndhukung fungsi sing padha kanggo kulawarga arsitektur liyane.

-b input-format

--format = input format

ld bisa diatur kanggo ndhukung luwih saka siji file obyek. Yen ld wis diatur kanthi cara iki, sampeyan bisa nggunakake opsi -b kanggo nemtokake format biner kanggo file obyek input sing ngetutake pilihan iki ing baris perintah. Sanajan ld diatur kanggo ndhukung format obyek alternatif, sampeyan ora perlu nemtokake iki, amarga ld kudu dikonfigurasikake minangka format input standar format paling umum ing saben mesin. Format-input minangka senar teks, jeneng format tartamtu sing didhukung dening perpustakaan BFD. (Sampeyan bisa ndhaftar format binary sing kasedhiya karo objdump -i .)

Sampeyan bisa uga pengin nggunakake pilihan iki yen sampeyan ngubungaké file karo format binar sing ora normal. Sampeyan uga bisa nggunakake -b kanggo ngalih format sacara eksplisit (nalika ngubungake file objek saka format sing beda-beda), kanthi ngemot -b format input sadurunge saben klompok file obyek ing format tartamtu.

Format standar dijupuk saka variabel lingkungan "GNUTARGET".

Sampeyan uga bisa netepake format input saka script, nggunakake printah "TARGET";

-c MRI-commandfile

--mri-script = MRI-commandfile

Kanggo kompatibilitas karo panjaluk sing diasilake dening MRI, ld nampa file-file skrip sing ditulis ing basa liya, diwatesi ing basa MRI Compatible Script Files saka dokumentasi GNU. Ngenalaken file skrip MRI kanthi pilihan -c ; gunakake opsi -T kanggo mbukak scripting linker sing ditulis ing basa ld scripting umum. Yen MRI-cmdfile ora ana, banjur nemu ing direktori kasebut kanthi milih opsi -L .

-d

-dc

-dp

Iki opsi telung padha karo; pirang formulir sing didhukung kanggo kompatibilitas karo panyedhiya liyane. Padha diwenehi spasi simbol umum sanajan file output bisa ditemtokake (karo -r ). Perintah script "FORCE_COMMON_ALLOCATION" duweni efek sing padha.

-e entri

--entry = entry

Gunakake entri minangka simbol sing eksplisit kanggo ngleksanani program wiwit, tinimbang titik entri standar. Yen ora ana entri sing dijenengi simbol, linker bakal nyoba ngisi entri minangka nomer, lan nggunakake sing minangka alamat entri (nomer bakal ditafsirake ing basa 10; sampeyan bisa nggunakake 0x utama kanggo basis 16, utawa 0 kanggo basa 8).

-E

- ekspor-dinamis

Nalika nggawe eksekusi dynamically disambung, nambah kabeh simbol menyang meja simbol dinamis. Tabel simbol dinamis yaiku kumpulan simbol sing katon saka obyek dinamis nalika rutin.

Yen sampeyan ora nggunakake pilihan iki, tabel simbol dinamis bakal mung ngemot simbol-simbol sing kasebut minangka referensi saka sawetara objek dinamis sing kasebut ing link kasebut.

Yen sampeyan nggunakake "dlopen" kanggo ngemot obyek dinamis sing kudu ngrujuk marang simbol-simbol sing ditemtokake dening program, tinimbang sawetara obyek dinamis liyane, sampeyan mesthine kudu nggunakake pilihan iki nalika ngubungake program kasebut.

Sampeyan uga bisa nggunakake skrip versi kanggo ngontrol simbol apa sing kudu ditambahake menyang tabel simbol dinamis yen format output ndhukung. Ndeleng dhaptar --version-script ing @ ref {VERSION}.

-EB

Link objek gedhe-endian. Iki mengaruhi format keluaran standar.

-EL

Link objek cilik-endian. Iki mengaruhi format keluaran standar.

-f

- Jeneng misuwur

Nalika nggawe obyek sing dienggo bareng ELF, atur lapangan DT_AUXILIARY internal menyang jeneng kasebut. Iki nuduhake linker dinamis yen tabel simbol objek bareng kudu digunakake minangka filter tambahan ing tabel simbol jeneng obyek sing dituduhake.

Yen sampeyan nerusake ngubungake program nglawan obyek panyaring iki, banjur, nalika sampeyan nggarap program kasebut, penyair dinamis bakal weruh lapangan DT_AUXILIARY. Yen linker dinamis mbuktekake sembarang simbol saka obyek panyaring, bakal luwih dhisik priksa manawa ana definisi ing jeneng obyek sing dituduhake. Yen ana siji, bakal digunakake tinimbang definisi ing obyek panyaring. Jeneng obyek sing dituduh ora ana. Mangkono jeneng obyek sing bebarengan bisa digunakake kanggo nyedhiyakake implementasi alternatif fungsi tartamtu, mbok menawa kanggo debug utawa kanggo kinerja spesifik mesin.

Pilihan iki bisa ditemtokake luwih saka sepisan. Entri DT_AUXILIARY bakal digawe ing urutan sing katon ing baris perintah.

-F jeneng

- jeneng filter

Nalika nggawe obyek sing dienggo bareng ELF, atur lapangan DT_FILTER internal menyang jeneng kasebut. Iki nuduhake linker dinamis yen tabel simbol objek sing dienggo bareng sing digawe kudu digunakake minangka panyaring ing tabel lambang jeneng obyek bebarengan.

Yen sampeyan nerusake ngubungake program nglawan obyek panyaring iki, banjur, nalika sampeyan nggarap program kasebut, linker dinamis bakal ndeleng kolom DT_FILTER. Penyalinan dinamis bakal mutusake simbol miturut tabel simbol obyek penyaring kayadene biasa, nanging bakal ngubungake definisi sing ditemokake ing jeneng obyek sing dituduhake. Mangkono obyek panyaring bisa digunakake kanggo milih bagean-bagean simbol sing diwenehake dening jeneng obyek.

Sawetara penanda lawas nggunakake opsi -F ing kabeh toolkain kompilasi kanggo ngatonake format file obyek kanggo file obyek input lan output. Linker GNU migunakake mekanisme liyane kanggo tujuan iki: opsi -b , -format , --oformat , perintah "TARGET" ing skrip linker, lan variabel lingkungan "GNUTARGET". Linker GNU bakal nglirwakake pilihan -F nalika ora nggawe objek sing diidhukung dening ELF.

- jeneng cilik

Nalika nggawe obyek sing bisa dieksekusi utawa dienggo bareng ELF, nelpon NAME nalika obyek sing dieksekusi utawa bareng ditrapake, kanthi nyetel DT_FINI menyang alamat fungsi kasebut. Secara default, linker nggunakake "_fini" minangka fungsi kanggo nelpon.

-g

Ora diwenehake. Kasedhiya kanggo kompatibilitas karo piranti liyane.

-G Nilai

--gpsize = nilai

Nyetel ukuran maksimum obyek sing bakal dioptimalake nggunakake daftar GP kanggo ukuran . Iki mung migunani kanggo format file obyek kayata MIPS ECOFF sing ndhukung nggolek obyek gedhe lan cilik menyang bagean sing beda-beda. Iki ora digatèkaké kanggo format file obyek liyané.

-h jeneng

-soname = jeneng

Nalika nggawe obyek sing dienggo bareng ELF, atur kolom DT_SONAME internal menyang jeneng kasebut. Nalika eksekusi digandhengake karo obyek sing dituduhake sing duwe kolom DT_SONAME, banjur nalika eksekusi dimainake linker dinamis bakal nyoba ngemot objek sing dituduhake dening kolom DT_SONAME tinimbang nggunakake jeneng berkas sing diwenehake menyang linker kasebut.

-i

Nindakake link tambahan (padha karo opsi -r ).

- jeneng

Nalika nggawe obyek sing bisa dieksekusi utawa dienggo bareng ELF, nelpon NAME nalika obyek eksekusi utawa bareng dimuat, kanthi nyetel DT_INIT menyang alamat fungsi kasebut. Secara default, sing ngubungake nggunakake "_init" minangka fungsi kanggo nelpon.

-l arsip

- liberal = arsip

Tambah arsip file arsip menyang dhaptar file sing bakal ditubungake. Pilihan iki bisa dipigunakaké sawetara kali. ld bakal nggolèki path-list kanggo kedadeyan "libarchive.a" kanggo saben arsip kasebut .

Ing sistem sing ndhukung perpustakaan bebarengan, uga bisa nelusuri pustaka kanthi ekstensi liya saka ".a". Khusus, ing sistem ELF lan SunOS, ld bakal nelusuri direktori perpustakaan kanthi extension ".so" sadurunge nggoleki sing nganggo extension ".a". Miturut konvènsi, extension ".so" nuduhake pustaka sing dienggo bareng.

Linker bakal nemokake arsip mung sapisan, ing lokasi ing ngendi kasebut ing baris perintah. Yen arsip nemtokake simbol sing ora ditemtokake ing sawetara obyek sing muncul sadurunge arsip ing baris perintah, panyedhiya bakal nyakup file sing cocok saka arsip kasebut. Nanging, simbol sing ora ditemtokake ing objek sing katon ing baris printah ora bakal nimbulake linker kanggo nelusur arsip kasebut maneh.

Deleng - ( kanggo opsi kanggo meksa linker kanggo nelusur arsip kaping pirang-pirang.

Sampeyan bisa nampilake arsip sing padha kaping pirang-pirang ing baris perintah.

Jenis telusur arsip iki minangka standar kanggo paugeran Unix. Nanging, yen sampeyan nggunakake ld onAIX, cathet yen beda saka prilaku sing ngubungake AIX.

-L search

--library-path = searchdir

Tambah path searchdir menyang dhaptar path sing ld bakal nelusuri pustaka arsip lan skrip kontrol ld . Sampeyan bisa nggunakake opsi iki nomer kaping. Direktori didhaptar miturut urutan sing kasebut ing baris perintah. Direktori sing kasebut ing baris printah ditelusuri sadurunge direktori gawan. All -L options apply to all -l options, regardless of order where options appear.

Yen searchdir wiwit nganggo "=", banjur "=" bakal diganti dening awalan sysroot , path sing kasebut nalika linker wis dikonfigurasi.

Path standar path digoleki (tanpa ditemtokake karo -L ) gumantung marang mode emulasi sing digunakake, lan ing sawetara kasus uga cara ngonfigurasi.

Path uga bisa kasebut ing skrip pranala karo perintah "SEARCH_DIR". Direktori sing kasebut kanthi cara iki digolèki ing titik ing ngendi script panyedhiya katon ing baris perintah.

-memulasi

Nggabungake linker emulasi . Sampeyan bisa ndhaftar emulasi sing kasedhiya karo opsi --verbose utawa -V .

Yen opsi -m ora digunakake, emulasi dijupuk saka variabel lingkungan "LDEMULATION", yen ditetepake.

Yen ora, emulation standar gumantung marang carane linker wis diatur.

-M

- print-map

Print peta link menyang output standar. A peta link menehi informasi babagan link, kalebu ing ngisor iki:

*

Ngendi obyek file lan simbol dipetakan ing memori.

*

Carane simbol umum dialokasikan.

*

Kabeh anggota arsip kalebu ing pranala, kanthi sebutake simbol sing nyebabake anggota arsip digawa.

-n

--nmagic

Pateni alignment kaca bagean, lan tandhani output minangka "NMAGIC" yen bisa.

-N

--omagic

Nyetel bagian teks lan data supaya bisa diwaca lan ditulis. Uga, aja nglindhungi kaca kanthi bagean babagan data, lan mateni tautan marang pustaka bebarengan. Yen format output ndhukung nomer ajaib gaya Unix, tandha output minangka "OMAGIC".

--no-omagic

Opsi iki negates sebagian besar efek saka opsi -N . Bab iki nyetel bagian teks dadi mung-maca, lan ngepalake babagan data minangka kaca sing selaras. Wigati - opsi iki ora bisa ngubungake nglawan perpustakaan bebarengan. Gunakake -Bdynamic kanggo iki.

-o output

- output = output

Gunakake output minangka jeneng kanggo program sing digawe dening ld ; yen opsi iki ora ditemtokake, jeneng a.out digunakake kanthi standar. Perintah script "OUTPUT" uga bisa nemtokake jeneng file output.

-O tingkat

Yen level iku angka numerik luwih saka zero, sampeyan bisa ngoptimalake output. Iki bisa ditindakake luwih suwe lan mulane mbok menawa mung kudu aktif kanggo binary pungkasan.

-q

--emit-relocs

Ninggalake bagean relocation lan isi ing exececutables kebak related. Kirim link analisis lan alat optimasi mbutuhake informasi kasebut supaya bisa ngowahi modifikasi executable sing bener. Iki nyebabake executables luwih gedhe.

Opsi iki saiki mung didhukung ing platform ELF.

-r

--relocateable

Gawe output bisa diganti --- ie, generate file output sing bisa nyedhiyakake minangka input kanggo ld . Iki asring diarani sebagean . Minangka akibat sampingan, ing lingkungan sing ndhukung nomer unix standar Unix, pilihan iki uga ngeset nomer magic file output menyang "OMAGIC". Yen opsi iki ora ditemtokake, file sing mutlak bakal diprodhuksi. Nalika ngubungaké program C ++, pilihan iki ora bisa mutusake referensi kanggo konstruktor; kanggo nindakake, gunakake -Ur .

Nalika file input ora duwe format sing padha karo file output, linking parsial mung didhukung yen file input ora ngemot relokasi. Format output sing beda bisa diwatesi; contone sawetara format "a.out" ora ndhukung ngubungake sebagean karo file input ing format liya ing kabeh.

Opsi iki ora padha karo -i .

-R filename

--dadi-simbol = jeneng berkas

Maca jeneng simbol lan alamat saka jeneng filen , nanging ora pindhah utawa sambungake ing output. Iki ngidini file output kanggo nggoleki sacara simbolis ing memori absolut sing ditetepake ing program liya. Sampeyan bisa nggunakake opsi iki luwih saka sepisan.

Kanggo kompatibilitas karo linker ELF liyane, yen pilihan -R disusul karo jeneng direktori, tinimbang jeneng berkas, diolah minangka opsi -rpath .

-s

- pancen-kabeh

Omit kabeh informasi simbol saka file output.

-S

--strip-debug

Ngirim informasi simbol debugger (nanging ora kabeh simbol) saka file output.

-t

- pancen

Nyetak jeneng file input minangka pangolahan mau.

-T scriptfile

--script = scriptfile

Gunakake scriptfile minangka script linker. Aksara iki nggantèkaké skrip linker default ld (tinimbang nambahake), supaya commandfile kudu nemtokake kabeh sing perlu kanggo njlèntrèhaké file output. Yen scriptfile ora ana ing direktori saiki, "ld" katon ing direktori kasebut kanthi milih opsi- L sadurungé. Opsi multi- T ngumpulake.

-u simbol

- undefined = symbol

Simbol peksa bakal dilebokake ing file output minangka simbol sing ora ditemtokake. Nglakoke iki bisa, contone, pemicu ngubungake modul tambahan saka perpustakaan standar. -u bakal diulang karo argumen pilihan sing beda kanggo ngetik simbol ora ditemokake tambahan. Opsi iki cocog karo printah script linker "EXTERN".

-Ur

Kanggo apa-apa liyane saka program C ++, opsi iki padha karo -r : ngasilake output bisa relocatable --- ie, file output sing bisa mbiyantu minangka input kanggo ld . Nalika ngubungaké program C ++, -Ur ora mutusake referensi kanggo konstruktor, ora kaya -r . Ora bisa nggunakake -Ur ing file sing disambungake karo -Ur ; yen tabel constructor wis dibangun, ora bisa ditambahake. Gunakake -Ur mung kanggo tautan parsial pungkasan, lan -r kanggo liyane.

--unique [= SECTION ]

Nggawe bagean output sing kapisah kanggo saben bagean input sing cocog SEKSYEN , utawa yen kolom wildcard opsional ora ana, kanggo saben bagean input yatim piatu. Seksi yatim piatu iku ora kasebut ing skrip taut. Sampeyan bisa nggunakake opsi iki kaping pirang-pirang ing baris perintah; Ngalangi panggabungan normal saka bagean input kanthi jeneng sing padha, ngetrapake tugas bagean output ing skrip linker.

-v

--versi

-V

Nampilake nomer versi kanggo ld . Pilihan -V uga nampilake emulasi sing didhukung.

-x

- kabeh-kabeh

Mbusak kabeh simbol lokal.

-X

--discard-locals

Busak kabeh simbol lokal sak wentoro. Kanggo paling target, iki kabeh simbol lokal sing jeneng diwiwiti karo L.

- simbol

- simbol simbol- simbol

Print jeneng saben file sing disambung ing simbol kasebut . Opsi iki bisa diwenehi sawetara kali. Ing akeh sistem perlu prepend underscore.

Opsi iki migunani yen sampeyan duwe simbol ora ditemokake ing link sampeyan, nanging ora ngerti endi referensi.

-Y path

Tambah path menyang path panelusuran perpustakaan standar. Opsi iki ana kanggo kompatibilitas Solaris.

-z kata kunci

Kata kunci dikenali yaiku "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" and "nocopyreloc ". Kata kunci liyane diabaikan kanggo kompatibilitas Solaris. "initfirst" nandani obyek kasebut bakal diwiwiti nalika runtime sadurunge obyek liya. "interpose" nandhani obyek sing nglambangake tabel simbol sadurunge kabeh simbol nanging bisa dieksekusi utamane. "loadfltr" nandani obyek sing bakal diolah kanthi cepet ing runtime. "nodefaultlib" nandhani obyek sing nggoleki dependensi obyek kasebut bakal ditolak sembarang jalur golèk pustaka default. "nodelete" tandha obyek kasebut ora kudu ditrapake nalika runtime. "nodlopen" nandhani obyek ora kasedhiya kanggo "dlopen". "nodump" tandha obyek kasebut ora bisa dibuang dening "dldump". "saiki" mbandhingake obyek kasebut kanthi naleni runtime runtime. "asal" tandha obyek kasebut bisa ngemot $ ORIGIN. "defs" ora ditampa simbol sing ora ditemtokake. "muldefs" ngidinake sawetara definisi. "combreloc" nggabungake pirang-pirang bagean relokasi lan nglebokne nggawe caching lookup simbol dinamis.

"nocombreloc" disables multiple reloc sections combining. "nocopyreloc" disables produksi salinan relocs.

- ( arsip -)

- arsip- arsip grup --dend-grup

Arsip kudu dadi dhaptar file arsip . Iku bisa uga jeneng file eksplisit, utawa opsi -l .

Arsip-arsip sing ditemtokake terus-terusan nganti ora ana referensi sing durung ditemtokake anyar. Biasane, arsip ditelusuri mung sepisan miturut urutan sing kasebut ing baris perintah. Yen simbol ing arsip kasebut dibutuhake kanggo mutusake masalah simbol sing ora ditemtokake sing diarani obyek ing arsip sing katon ing baris perintah, panuduh ora bakal bisa ngrampungake referensi kasebut. Miturut klompok arsip, kabeh mau bakal ditelusuri nganti pirang-pirang referensi bisa diselesaikan.

Nggunakake opsi iki nduweni biaya kinerja sing signifikan. Paling apik nggunakake mung nalika ana referensi bunder sing ora bisa digunakke ing antarane rong utawa luwih arsip.

- aksès-ora dingerteni-input-arch

--no-accept-unknown-input-arch

Ngandhani linker kanggo nampa file input sing arsitektur ora bisa dikenali. Panyangka kasebut minangka pangguna ngerti apa sing dilakoni lan sengaja pengin nyambungake ing file input sing ora dikenal. Iki minangka prilaku standar linker, sadurunge release 2.14. Prilaku standar saka rilis 2.14 lan sabanjuré yaiku kanggo nolak file input kasebut, lan supaya opsi --accept-unknown-input-arch wis ditambahake kanggo mulihake prilaku sing lawas.

tembung kunci

Opsi iki diabaikan kanggo kompatibilitas SunOS .

-Bdynamic

-dy

-call_shared

Link marang perpustakaan dinamis. Iki mung migunani ing platform sing pustaka sing didhukung. Pilihan iki biasane dadi standar ing platform kasebut. Varian beda pilihan iki kanggo kompatibilitas karo macem-macem sistem. Sampeyan bisa nggunakake pilihan iki kaping pirang-pirang ing baris perintah: nyebabake perpustakaan nggoleki opsi -l sing ngetutake.

-Kumpulan

Atur bendera "DF_1_GROUP" ing entri "DT_FLAGS_1" ing bagean dinamis. Iki nyebabake linker runtime kanggo nangani goleki ing obyek kasebut lan dependensi sing bisa dileksanakake mung nang klompok. - Ora ana undefined sing diwenehake. Opsi iki mung migunani ing platform ELF sing ndhukung perpustakaan bebarengan .

-Batik

-dn

-non_shared

-static

Aja link nglawan perpustakaan bebarengan. Iki mung migunani ing platform sing pustaka sing didhukung. Varian beda pilihan iki kanggo kompatibilitas karo macem-macem sistem. Sampeyan bisa nggunakake pilihan iki kaping pirang-pirang ing baris perintah: nyebabake perpustakaan nggoleki opsi -l sing ngetutake.

- Simbolis

Nalika nggawe perpustakaan sing dienggo bareng, sambungake referensi kanggo simbol global karo definisi ing pustaka bebarengan, yen ana. Biasane, bisa kanggo program sing disambung karo perpustakaan sing dienggo kanggo ngatasi definisi ing perpustakaan sing dienggo bareng. Opsi iki mung migunani ing ELFplatforms sing ndhukung perpustakaan bebarengan.

- mriksa-bagean

--no-mriksa-bagean

Nuduhake linker ora mriksa alamat bagean sawise ditugasake kanggo ndeleng yen ana tumpang tindih. Biasane sing ngubungake bakal nglakoni cek iki, lan yen nemokake tumpang tindih bakal ngasilake pesen kesalahan sing cocok. Linker ora ngerti babagan, lan nggawe tunjangan kanggo bagean ing overlay. Prilaku standar bisa dibalèkaké kanthi nggunakake command line switch --check-sections .

--cref

Output tabel referensi salib. Yen file peta linker dibentuk, tabel rujukan salib dicithak ing file peta. Yen ora, wis dicithak ing output standar.

Format tabel kasebut kanthi sengaja prasaja, supaya bisa gampang diproses kanthi skrip yen perlu. Simbol dicithak, diurut kanthi jeneng. Kanggo saben simbol, dhaptar jeneng berkas diwenehi. Yen simbol ditemtokake, file sing kapisan kasebut minangka lokasi definisi. File sing isih ana referensi kanggo simbol.

--no-define-common

Opsi iki nyegah penugasan alamat kanggo simbol umum. Perintah script "INHIBIT_COMMON_ALLOCATION" duweni efek sing padha.

Opsi --no-define-common ngidini decoupling kaputusan kanggo nglebokake alamat menyang simbol umum saka pilihan jinis file output; digunakake minangka jinis output tipe Non-Relocateable sing ngatur alamat menyang simbol umum. Nggunakake --no-define-common ngidini simbol umum sing dirujuk saka perpustakaan sing dituduh dadi alamat sing ditugasake mung ing program utama. Iki ngilangi spasi duplikat sing ora dienggo ing perpustakaan sing dienggo bareng, lan uga ngalangi kebingungan apa wae kanggo ngrampungake duplikat sing salah nalika ana akeh modul dinamis kanthi path panelusuran khusus kanggo resolusi simbol runtime.

--defsym symbol = expression

Nggawe simbol global ing file output, ngemot alamat absolut sing diwenehi ekspresi . Sampeyan bisa nggunakake opsi iki sapisan maneh kanggo nemtokake pirang-pirang simbol ing baris printah. Wangun aritmetika winates didhukung kanggo ekspresi ing konteks iki: sampeyan bisa menehi konstanta heksadesimal utawa jeneng simbol sing ana, utawa nggunakake "+" lan "-" kanggo nambah utawa nyuda konstanta utawa simbol heksadesimal. Yen sampeyan butuh ekspresi sing luwih njelasake, gunakake nggunakake command commander language saka script. Cathetan: ora ana papan putih antarane simbol , tanda sing padha (`' = ' '), lan ekspresi .

- irisan [= gaya ]

- ora nyenyet

Opsi iki ngontrol manawa demasing jeneng simbol ing pesen kesalahan lan output liyane. Nalika linker dipateni, demokrasi bakal menehi jeneng simbol kanthi cara sing bisa dibaca: ngudani garis ngisor garis sing arep ditrapake manawa digunakake dening format file object, lan ngowahi jeneng simbol C ++ menyang jeneng panganggo sing bisa diwaca. Kompilator beda duwe gaya mangling sing beda. Alesan argumentasi demangling pilihan bisa digunakake kanggo milih gaya demangling sing cocok kanggo kompilator. Pengirim bakal ngilangi kanthi cetha kajaba variabel COLLECT_NO_DEMANGLE sing ana ing lingkungan. Opsi iki bisa digunakake kanggo ngatasi standar.

- file pendhudhukan -dynamic

Setel jeneng linker dinamis. Iki mung migunani nalika ngasilake executable ELF sing dynamically linked. Linker dinamis standar biasane bener; aja nggunakake iki kajaba sampeyan ngerti apa sing dilakoni.

- disambungake-relocs

Opsi iki mung migunani nalika ngubungaké kode PIC sing dilindhungi PIPS, didadekake dening opsi -membedded-pic menyang kompilator GNU lan assembler. Iki nyebabake linker nggawe tabel sing bisa digunakake nalika runtime kanggo pindhah data manawa statis wis initialized menyang nilai pointer. Deleng kode ing tes / ld-empik kanggo rincian.

- kesalahan-peringatan

Ngrawat kabeh bebaya minangka kasalahan .

--force-exe-suffix

Priksa manawa file output duwe akhiran .exe.

Yen file output sing disambungake kanthi sukses ora duwe suffix " .exe " utawa " .dll ", opsi iki nandhai panyambung kanggo nyalin file output menyang salah siji saka jeneng sing padha karo suffix ".exe". Opsi iki migunani nalika nggunakake makefiles Unix sing ora dimodifikasi ing host Microsoft, amarga sawetara versi Windows ora mbukak gambar kajaba mungkasi ing akhiran ".exe".

--no-gc-sections

--gc-sections

Mbisakake koleksi sampah saka bagean input sing ora dienggo. Digatekake ing target sing ora ndhukung pilihan iki. Opsi iki ora kompatibel karo -r , utawa ngirim digunakake kanthi dinamis. Perilaku standar (tanpa melakukan pemungutan sampah ini) bisa dipulihkan dengan menentukan --no-gc-bagian pada baris perintah.

--Takon

Print ringkesan pilihan baris komando ing output standar lan metu.

--target-help

Nyithak ringkesan kabeh opsi tartamtu target ing output standar lan metu.

-Map mapfile

Print peta link menyang filefilefile . Waca deskripsi pilihan -M , ing ndhuwur.

--no-keep-memory

ld biasane ngoptimalake kecepatan nganggo panggunaan memori kanthi caching tabel simbol saka file input ing memori. Opsi iki ngandhani ld tinimbang kanggo ngoptimalake panggunaan memori, kanthi maca tabel simbol sing perlu. Iki bisa dibutuhake yen ld bisa metu saka ruang memori nalika ngubungake executable gedhe.

--no-undefined

-z defs

Biasane nalika nggawe perpustakaan bebarengan sing ora simbolis, simbol sing ora ditemtokake bakal diijini lan ditinggalake kanggo ngilangi loader runtime. Opsi iki ora nglilani simbol sing ora ditemtokake.

- kabeh-definisi

-z muldefs

Biasane nalika simbol ditemtokake kaping pirang-pirang, panuduh bakal laporan kesalahan fatal. Pilihan iki ngidini sawetara definisi lan definisi pisanan bakal digunakake.

--allow-shlib-undefined

Ngidini simbol sing ora ditemtokake ing obyek sing dituduh sanajan - ora ana undhake sing disetel. Asil bersih bakal dadi simbol sing ora ditemtokake ing objek biasa isih bakal memicu kesalahan, nanging simbol-simbol sing ora ditemtokake ing objek-objek bareng bakal diabaikan. Pelaksanaan no_undefined ndadekake asumsi yen linker runtime bakal keselak ing simbol sing ora ditemtokake. Nanging ana sethithik siji sistem (BeOS) ing endi simbol sing ora ditemtokake ing perpustakaan sing dianggo biasa amarga kernel patches kasebut nalika mbukak wektu kanggo milih fungsi sing paling cocok kanggo arsitektur saiki. IE milih kanthi selaras fungsi pset sing cocok. Pranyata uga normal kanggo pustaka bebarengan HPPA duwe simbol ora ditemtokake.

--no-undefined-version

Biasane nalika simbol duwe versi sing ora ditemtokake, linker ora bakal nglirwakake. Opsi iki nglarang simbol karo versi sing ora ditemtokake lan kesalahan sing bakal ditemokake bakal ditanggepi.

- ora ngelingake ora

Biasane ld bakal menehi kesalahan yen sampeyan nyoba nggabungake file input sing cocog kanggo sawetara alesan, mbok menawa amarga wis dikompilasi kanggo prosesor beda utawa endiannesse beda. Opsi iki ngandhani yen kudu ngidini kanthi diam-diam kasalahan kasebut. Opsi iki mung kudu digunakake kanthi ati-ati, ing kasus nalika sampeyan njupuk sawetara tindakan khusus sing njamin yen kasalahan panuduh ora pantes.

--no-kabèh-arsip

Mateni efek opsi --whole - arsip kanggo file arsip sakteruse.

--noinhibit-exec

Nggawe file output eksekusi kapan isih bisa digunakake. Biasane, sing ngubungake ora ngasilake file output yen nemokake kasalahan nalika proses link; iku metu tanpa nulis file output nalika masalah apa wae kesalahan.

-nostdlib

Mung direktori direktori panelusuran sing kasebut kanthi jelas ing baris printah. Direktori direktori sing ditemtokake ing skrip pangirim (kalebu skrip tag sing dituduhake ing baris perintah) ora digatekake.

- Format format -oformat

ld bisa diatur kanggo ndhukung luwih saka siji file obyek. Yen ld wis diatur kanthi cara iki, sampeyan bisa nggunakake opsi --oformat kanggo nemtokake format biner kanggo file obyek output. Sanajan nalika ld diatur kanggo ndhukung format obyek alternatif, sampeyan ora perlu nemtokake iki, amarga ld kudu dikonfigurasi kanggo gawé minangka format output standar format sing paling umum ing saben mesin. Format-output minangka senar teks, jeneng format tartamtu sing didhukung dening perpustakaan BFD. (Sampeyan bisa nampilake format binary sing kasedhiya kanthi objdump -i .) Perintah script "OUTPUT_FORMAT" uga bisa nemtokake format output, nanging opsi iki nglebokake.

-qmagic

Opsi iki diilangi kanggo kompatibilitas Linux.

-Aku

Pilihan iki ora dikepengini kanggo kompatibilitas SVR4.

--relax

Opsi karo efek gumantung mesin. Opsi iki mung didhukung ing sawetara target.

Ing sawetara platform, pilihan -relax nindakake optimasi global sing bisa dadi nalika linker nemtokake alamat ing program, kayata mode alamat santai lan sintesis instruksi anyar ing file obyek output.

Ing sawetara platform iki wektu optimasi optimasi global bisa nggawe debugging simbolis saka eksekusi asil ora mungkin. Iki dikenal minangka kasus kanggo pemroses Matsushita MN10200 lan MN10300.

Ing platform ngendi iki ora didhukung, --relax ditampa, nanging digathekno.

--retain-symbols-file jeneng berkas

Simpen mung simbol-simbol sing kadhaptar ing jeneng file, mbuwang kabeh liyane. Jeneng berkas mung minangka berkas sing rata, kanthi jeneng siji simbol saben baris. Opsi iki utamané migunani ing lingkungan (kayata VxWorks) ing endi tabel simbol global sing gedhé akumulasih, kanggo ngreksa memori run-time.

- Retaka-simbol-file ora mbatalake simbol ora ditemtokake, utawa simbol-simbol sing dibutuhake kanggo relokasi.

Sampeyan mung bisa nemtokake --retain-symbols-file sakdurunge ing baris perintah. Iku ditindakake -s lan -S .

-rpath dir

Tambah direktori menyang path panelusuran pustaka runtime. Iki digunakake nalika nyambugake ELFexecutable karo objek sing dienggo bareng. All -rpath arguments are concatenated and passed to linker runtime, which uses them to locate shared objects at runtime. Opsi -rpath uga digunakake nalika nggolek obyek sing dituduhake sing dibutuhake dening obyek sing disedhiyakake sacara eksplisit kalebu ing tautan kasebut; ndeleng gambaran opsi -rpath-link . Yen -rpath ora dipigunakaké nalika ngubungaké eksekusi ELF, isi variabel lingkungan "LD_RUN_PATH" bakal dipigunakaké yèn ditetepaké.

Opsi -rpath uga bisa digunakake ing SunOS. Secara default, ing SunOS, penyajian bakal mbentuk patung panelusuran runtime metu saka kabeh opsi -L sing diwenehi. Yen opsi -rpath digunakake, path panelusuran runtime bakal dibentuk sacara eksklusif nggunakake opsi -rpath , ora nggatekake opsi -L . Iki bisa migunani nalika nggunakake gcc, sing nambah akeh opsi -L sing mungkin ana ing filesystem sing dipasang ning NFS.

Kanggo kompatibilitas karo linker ELF liyane, yen pilihan -R disusul karo jeneng direktori, tinimbang jeneng berkas, diolah minangka opsi -rpath .

-rpath-link DIR

Nalika nggunakake ELF utawa SunOS, siji perpustakaan sing dikarepake mbutuhake liyane. Iki kedadeyan nalika link "ld -shared" kalebu pustaka bebarengan minangka salah sawijining file input.

Nalika linker nemokke ketergantungan kasebut nalika nglakoni link non-shared, non-relocatable, bakal kanthi otomatis nyoba nemokake pustaka bebarengan sing dibutuhake lan kalebu ing pranala kasebut, yen ora kalebu sacara eksplisit. Ing kasus kasebut, pilihan -rpath-link nemtokake sapanunggalan sapanjarah kanggo nelusuri. Opsi -rpath-link bisa nemtokake urutan jeneng direktori kanthi nemtokake daftar jeneng sing dipisahake karo titik, utawa kanthi kaping pirang-pirang.

Opsi iki kudu digunakake kanthi ati-ati amarga ngatasi dalan panelusuran sing uga disusun hard menyang perpustakaan sing dienggo bareng. Ing kasus iki, sampeyan bisa nggunakake ora sengaja path panelusuran sing beda tinimbang sing ngubungake runtime.

Linker nggunakake jalur panelusuran ing ngisor iki kanggo nemokake pustaka bebarengan sing dibutuhake.

1.

Sembarang direktori sing ditemtokake dening opsi -rpath-link .

2.

Sembarang direktori sing ditemtokake dening opsi -rpath . Bentenipun antarane -rpath lan -rpath-link punika petunjuk sing ditemtokake dening opsi -rpath disertakake ing eksekusi lan digunakake nalika runtime, dene opsi -rpath-link mung efektif ing wektu tautan. Iku mung kanggo linker native.

3.

Ing sistem ELF, yen opsi -rpath lan "rpath-link" ora diguna, nelusuri isi variabel lingkungan "LD_RUN_PATH". Iku mung kanggo linker native.

4.

On SunOS, yen opsi -rpath ora dipigunakaké, golèk sembarang direktori sing kasedhiya nganggo opsi -L .

5.

Kanggo linker asli, isi variabel lingkungan "LD_LIBRARY_PATH".

6.

Kanggo panyedhiya native ELF, direktori ing "DT_RUNPATH" utawa "DT_RPATH" saka perpustakaan sing dituju digoleki kanggo pustaka bebarengan sing dibutuhake. Entri "DT_RPATH" ora dikepengini yen ana entri "DT_RUNPATH".

7.

Direktori standar, normal / lib lan / usr / lib .

8.

Kanggo linker asli ing sistem ELF, yen file /etc/ld.so.conf ana , dhaptar direktori sing ana ing file kasebut.

Yen perpustakaan sing dibutuhake ora ditemokake, linker bakal ngetokake bebaya lan terus karo link kasebut.

-shared

-Banget

Nggawe perpustakaan sing dienggo bareng. Saiki iki mung didhukung platform ELF, XCOFF, lan SunOS. On SunOS, linker bakal kanthi otomatis nggawe perpustakaan sing dienggo yen opsi -e ora dipigunakaké lan ana simbol sing ora ditemtokake ing link kasebut.

--sort-common

Opsi iki ngandhani ld kanggo ngurutake simbol-simbol umum kanthi ukuran nalika nempatake mau ing bagean output sing cocok. Pisanan mlebu kabeh simbol byte, banjur kabeh loro byte, banjur kabeh papat byte, lan kabeh liyane. Iki kanggo nyegah kesenjangan ing antarane simbol amarga kendala alihan.

--split-by-file [ size ]

Kaya --split-by-reloc nanging nggawe bagean output anyar kanggo saben file input nalika ukuran kacepetan. ukuran standar kanggo ukuran 1 yen ora diwenehi.

--split-by-reloc [ count ]

Nyoba nggawe bagean ekstra ing file output supaya ora ana bagian output siji ing file luwih akeh tinimbang relokasi. Iki migunake nalika ngasilake file relocatable gedhe kanggo ngundhuh menyang kernel wektu tartamtu kanthi format file obyek COFF; wiwit COFFcannot makili luwih saka 65535 relokasi ing bagean siji. Elinga yen iki bakal gagal nggarap format file obyek sing ora ndhukung bab kasil. Linker ora nyisihake bagean input individu kanggo redistribusi, supaya yen bagean input siji ngemot luwih saka relocation count siji bagean output bakal ngemot sing akeh relokasi. jumlah default menyang nilai 32768.

--stats

Ngitung lan nampilake statistik babagan operasi linker, kayata wektu eksekusi lan panggunaan memori.

- format-format

Kanggo sawetara target, output ld beda-beda ing sawetara cara saka output sawetara linker sing ana. Alih-alih ngowahi format kasebut kanggo nggunakake format tradisional.

Contone, ing SunOS, ld nggabungake duplikat entri ing lambang string simbol. Iki bisa nyuda ukuran file output kanthi informasi debugging lengkap kanthi luwih saka 30 persen. Sayange, program SunOS "dbx" ora bisa maca program sing diasilake ("gdb" ora ana masalah). Switch swara-format wis ngandhani ld kanggo ora nggabungake duplikat entri.

- bagean-wiwitan bagean = org

Goleki bagean ing file output ing alamat Absolute sing diwenehake dening org . Sampeyan bisa nggunakake opsi iki separo kanggo nemokake sawetara bagean ing baris perintah. org kudu dadi intine heksadesimal tunggal; kanggo kompatibilitas karo penyambungan liyane, sampeyan bisa ngilangi 0x leading sing biasane ana hubungane karo nilai heksadesimal. Wigati: ora ana spasi putih ing antarane prabandhan kasebut , tandha sing padha karo (`' = ' '), lan org .

-Tbss org

-Todha org

-Teks org

Gunakake org minangka alamat wiwitan kanggo --- saben - bss, "data", utawa "teks" babagan file output. org kudu dadi intine heksadesimal tunggal; kanggo kompatibilitas karo penyambungan liyane, sampeyan bisa ngilangi 0x leading sing biasane ana hubungane karo nilai heksadesimal.

--dll-verbose

- ujung

Nampilake nomer versi kanggo ld lan dhaptar emulator linker sing didhukung. Nampilake file input sing bisa lan ora bisa dibukak. Nuduhake scripting linker sing digunakake dening linker.

- version-script = version-scriptfile

Nemtokake jeneng skrip versi kanggo linker. Iki biasane digunakake nalika nggawe perpustakaan bebarengan kanggo nemtokake informasi tambahan babagan versi heirarki kanggo perpustakaan sing digawe. Opsi iki mung migunani ing platform ELF sing ndhukung perpustakaan bebarengan.

--warn-common

Nyatak yen simbol umum digabungake karo simbol umum utawa karo definisi simbol. Tautan Unix ngijini praktik sing rada ora apik iki, nanging pranala ing sawetara sistem operasi liyane ora. Opsi iki ngidini sampeyan nemokake masalah potensial saka nggabungake simbol global. Sayange, sawetara perpustakaan C nggunakake praktik iki, supaya sampeyan bisa njaluk sawetara peringatan babagan simbol ing perpustakaan uga ing program sampeyan.

Ana telung jinis simbol global, digambarake ing kene dening conto C:

int i = 1;

A definisi, sing dadi ing bagean data initialized saka file output.

extern int i;

Referensi sing ora ditemtokake, sing ora nggayuh spasi. Ana kudu definisi utawa simbol sing umum kanggo variabel ing endi wae.

int i;

Simbol umum. Yen ana mung (siji utawa luwih) simbol sing umum kanggo variabel, dadi ing area data sing ora diidini file output. Linker gabungan sawetara simbol umum kanggo variabel sing padha dadi simbol tunggal. Yen ukurane beda, ukurane paling gedhe. Linker dadi simbol umum menyang deklarasi, yen ana definisi saka variabel sing padha.

Opsi --warn-umum bisa ngasilake limang jinis peringatan. Saben peringatan kasusun saka sepasang garis: sing sepisanan nggambarake simbol sing ditemokake, lan sing liya nggambarake simbol sadurungé ditemoni kanthi jeneng sing padha. Siji utawa loro simbol kasebut bakal dadi simbol umum.

1.

Nguripake simbol umum menyang referensi, amarga wis ana definisi simbol.

(
): warning: common of ` 'ditindih nganggo dhéfinisi (
): warning: defined here

2.

Nguripake simbol sing umum dadi referensi, amarga definisi liyane kanggo simbol ditemokake. Iki padha karo kasus sadurunge, kejaba simbol ditemokake ing urutan sing beda.

(
): warning: definition of ` 'overriding common (
): warning: common is here

3.

Nggabungake simbol umum karo simbol umum ukuran sing padha.

(
): warning: multiple common of ` ' (
): warning: common common is here

4.

Nggabungake simbol umum karo simbol umum sing luwih gedhe sadurunge.

(
): warning: common of ` 'ditindhes dening luwih umum (
): warning: larger common is here

5.

Nggabungake simbol umum karo simbol umum sing luwih cilik sadurunge. Iki padha karo kasus sadurunge, kejaba simbol ditemokake ing urutan sing beda.

(
): warning: common of ` 'overriding common common (
): warning: common common is here

--warn-constructors

Ngandika manawa konstruktor global digunakake. Iki mung migunani kanggo sawetara format file obyek. Kanggo format kaya COFF utawa ELF, linker ora bisa ndeteksi panggunaan pambangun global.

--warn-multiple-gp

Ngelingi yen akeh nilai pointer global sing dibutuhake ing file output . Iki mung migunani kanggo prosesor tartamtu, kayata Alpha. Khusus, sawetara prosesor nglebokake konstanta sing gedhe-gedhe ing bagean khusus. Dhaptar khusus (pointer global) nuduhake menyang tengah bagean iki, supaya konstanta bisa dimuat kanthi irit liwat mode alamat dhasar relatif dhaptar. Wiwit offset ing mode registri dhasar tetep tetep lan relatif cilik (umpamane, 16 bit), iki watesan ukuran maksimal blumbang konstan. Mangkono, ing program gedhe, asring perlu nggunakake pirang-pirang nilai pointer global supaya bisa ngatasi kabeh konstanta bisa. Opsi iki nyebabake bebaya bakal ditindakake kapan kasus iki kedadeyan.

--warn-once

Mung dielingake yen saben simbol sing ora ditemtokake, tinimbang sapisan saben modul sing nuduhake.

--warn-section-align

Ngelingi yen alamat saka bagean output diganti amarga keselarasan. Biasane, alignment bakal disetel dening bagean input. Alamat kasebut bakal mung diganti yen ora kasebut kanthi jelas; yaiku, yen printah "SEKSYEN" ora nemtokake alamat wiwitan kanggo bagean kasebut.

--whole-archive

Kanggo saben arsip kasebut ing baris printah sawise pilihan - any - arsip , klebu kabeh file obyek ing arsip ing tautan, tinimbang nggoleki arsip kanggo file obyek sing dibutuhake. Iki biasane digunakake kanggo nguripake file arsip menyang perpustakaan bebarengan, meksa saben obyek kudu kalebu ing perpustakaan sing dienggo bareng. Pilihan iki bisa digunakake luwih saka sepisan.

Loro cathetan nalika nggunakake pilihan iki saka gcc: Pisanan, gcc ora ngerti babagan pilihan iki, dadi sampeyan kudu nggunakake -Wl, -whole-archive . Kapindho, aja lali migunakake -Wl, -no-kabeh-arsip sawise daftar arsip, amarga gcc bakal nambah daftar arsip dhewe menyang link sampeyan lan sampeyan ora pengin flag iki kanggo mengaruhi sing uga.

--wrap symbol

Gunakake fungsi pambungkus kanggo simbol . Saben referensi sing ora ditemtokake kanggo lambang bakal diatasi kanggo "__ wrap_symbol". Saben referensi sing ora ditemtokake menyang "__real_symbol" bakal ditindakake.

Iki bisa digunakake kanggo nyedhiyakake pambungkus kanggo fungsi sistem. Fungsi pambungkus kudu kasebut "__wrap_symbol". Yen pengin ngundang fungsi sistem, kasebut kudu diarani "__ real_symbol".

Punika conto sepele:

ora sah * __wrap_malloc (int c) {printf ("malloc disebut kanthi% ld \ n", c); bali __real_malloc (c); }

Yen sampeyan ngubungake kode liyane nganggo berkas iki nganggo --wrap malloc , kabeh panggilan menyang "malloc" bakal kasebut fungsi "__wrap_malloc" tinimbang. Panggilan kanggo "__real_malloc" ing "__wrap_malloc" bakal nyebat fungsi "malloc" nyata.

Sampeyan uga pengin nyedhiyakake fungsi "__real_malloc" uga, supaya pranala tanpa opsi --wrap bakal sukses. Yen sampeyan nindakake iki, sampeyan ora kudu nggawe definisi "__ real_malloc" ing file sing padha karo "__wrap_malloc"; yen sampeyan nindakake, assembler bisa ngatasi panggilan sadurunge linker duwe kesempatan kanggo mbungkus menyang "malloc".

--enable-new-dtags

--disable-new-dtags

Linker iki bisa nggawe label dinamis anyar ing ELF. Nanging sistem ELF lawas ora bisa ngerti. Yen sampeyan nemtokake --enable-new-dtags , tag dinamis bakal digawe yen perlu. Yen sampeyan nemtokake --disable-new-dtags , ora ana tag dinamis sing anyar. Secara default, tag dinamis sing anyar ora digawe. Elinga yen opsi kasebut mung kasedhiya kanggo sistem FORFF.

Linker PE i386 ndhukung opsi -shared , sing nyebabake output dadi perpustakaan kanthi dinamis (DLL) tinimbang eksekusi normal. Sampeyan kudu jeneng output "* .dll" nalika sampeyan nggunakake opsi iki. Saliyane, linker kanthi ndhukung standar "* .def" file, sing bisa ditemokake ing baris perintah linker kaya file obyek (nyatane, kudu ndhisiki arsip kasebut ngekspor simbol, kanggo mesthine sing disambung, kaya file obyek normal).

Saliyane opsi sing umum kanggo kabeh target, linker i386 PE ndhukung pilihan baris perintah tambahan sing spesifik kanggo target i386 PE. Pilihan sing njupuk nilai bisa dipisahake saka nilai kasebut kanthi salah siji papan utawa tandha sing padha.

--add-stdcall-alias

Yen diwenehi, simbol karo suffix stdcall (@ nn ) bakal diekspor minangka-lan uga akhiran kasebut dilorot.

- berkas berkas - berkas

Gunakake file minangka jeneng file kanggo nyimpen alamat basis kabeh relokasi sing dibutuhake kanggo ngasilake DLL kanthi dlltool .

- kabeh

Nggawe DLL tinimbang bisa dieksekusi biasa. Sampeyan uga bisa nggunakake-nganggo utawa nemtokake "PERPUSTAKAAN" ing file ".def" sing diwenehake.

--enable-stdcall-fixup

--disable-stdcall-fixup

Yen pranala nemokake simbol sing ora bisa diselesaikan, bakal nyoba nglakoni '' fuzzy linking '' kanthi nggoleki simbol sing ditemtokake liyane sing beda karo format simbol (cdecl vs stdcall) lan bakal ngatasi simbol kasebut kanthi ngubungake kanggo pertandhingan. Contone, simbol "_foo" sing ora ditemtokake bisa disambung menyang fungsi "_foo @ 12", utawa simbol sing ora ditemtokake "_bar @ 16" bisa disambung menyang fungsi "_bar". Nalika pengirim nglakokake iki, ngetrapake bebaya, amarga biasane kudu gagal ngidinke, nanging kadhangkala ngimpor manufaktur sing digawe saka pihak katelu mbutuhake fitur iki dadi bisa digunakke. Yen sampeyan nemtokake - fixable-stdcall-fixup , fitur iki diaktifake kanthi lengkap lan bebaya ora dicithak. Yen sampeyan nemtokake - ora bisa di-stdcall-fixup , fitur iki dipateni lan mismatches kasebut dianggep kasalahan.

- ekspor-kabeh-simbol

Yen diwenehi, kabeh simbol global ing obyek sing digunakake kanggo mbangun DLL bakal diekspor dening DLL. Elinga yen iki minangka standar yen ana ora bakal ana simbol sing diekspor. Nalika simbol kasebut kanthi eksplisit diekspor liwat file DEF utawa sacara implisit diekspor liwat atribut fungsi, standar kasebut ora bakal diekspor apa-apa manawa kajaba pilihan iki diwenehi. Elinga simbol "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12", lan "impure_ptr" ora bakal diekspor kanthi otomatis. Kajaba iku, simbol sing diimpor saka DLL liyane ora bakal diekspor ulang, utawa bakal simbol nemtokake tata letak internal DLL kayata sing diwiwiti karo "_head_" utawa diakhiri karo "_iname". Kajaba iku, ora ana simbol saka "libgcc", "libstd ++", "libmingw32", utawa "crtX.o" bakal diekspor. Simbol-simbol sing jenenge diwiwiti kanthi "__rtti_" utawa "__builtin_" ora bakal diekspor, kanggo mbantu karo C ++ DLLs. Akhire, ana daftar ekstensif simbol cygwin-private sing ora diekspor (jelas, iki ditrapake nalika mbangun DLLs kanggo target cygwin).

Iki kalebu 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 ", lan" lingkungan ".

- Simbol simbol , simbol , ...

Nemtokake daftar simbol sing ora bakal diekspor sacara otomatis. Jeneng simbol bisa diatasi dening koma utawa titik.

- klebu libs lib , lib , ...

Nemtokake dhaptar pustaka arsip sing simbol-simbol ngirim ora sacara otomatis diekspor. Jeneng-jeneng perpustakaan bisa dibusak dening koma utawa titik. Nyetujoni "--exclude-libs ALL" ora kalebu simbol ing kabeh pustaka arsip saka ekspor otomatis. Simbol-simbol kasebut sacara eksplisit kadhaptar ing file .def masih diekspor, tanpa dipikirake opo iki.

- file-alignment

Temtokake panyelarasan file. Bagian ing file bakal miwiti ing offset file sing minangka nomer saka nomer kasebut. Iki minangka standar kanggo 512.

--heap cadangan

--ke cadangan , laku

Nemtokake jumlah memori kanggo cadangan (lan milih opo) kanggo digunakake minangka numpuk kanggo program iki. Default iki 1Mb undhang, 4K dileksanakake.

- Nilai-gambar-basis

Gunakake nilai minangka alamat basis program utawa DLL. Iki minangka lokasi memori sing paling murah sing bakal digunakake nalika program utawa DLL diiseni. Kanggo ngurangi perlu kanggo pindhah lan nambah kinerja DLL, saben kudu duwe alamat basa sing unik lan ora tumpang tindhih liyane DLS liyane. Default iki 0x400000 kanggo executables, lan 0x10000000 kanggo dlls.

--kill-at

Yen diwenehi, suffixes stdcall (@nn) bakal dilucuti saka simbol sadurunge diekspor.

- Nilai-gambar-versi -major

Manggon nomer utama `` versi gambar ''. Default kanggo 1.

- Nilai-os-versi

Ngeset nomer utama saka versi `os '. Default kanggo 4.

- Nilai-sub-sistem-versi

Nyetel nomer utama saka 'versi subsistem' '. Default kanggo 4.

- Nilai-image-version

Setel nomer suntingan saka `` versi gambar ''. Default kanggo 0.

- Nilai minor-os-versi

Setel nomer suntingan saka versi `` os ''. Default kanggo 0.

- nilai minim-subsystem

Nemtokake nomer suntingan saka 'versi subsistem' '. Default kanggo 0.

- file output-def

Linker bakal nggawe berkas file sing bakal ngemot file DEF sing cocog karo DLL sing ngubungake. File DEF iki (sing kudu diarani "* .def") bisa digunakake kanggo nggawe perpustakaan impor kanthi "dlltool" utawa bisa digunakake minangka referensi simbol kanthi otomatis utawa sacara implisit diekspor.

- metu-implib file

Linker bakal nggawe berkas file sing bakal ngemot lib impor sing cocog karo DLL sing ngubungake sing ngasilake. Lib ngimpor iki (sing kudu diarani "* .dll.a" utawa "* .a" bisa digunakake kanggo nggandhengake klien marang DLL sing digawé; prilaku iki ndadekake bisa ngliwati langkah penciptaan pustaka impor "dlltool" sing kapisah.

--enable-auto-image-base

Secara otomatis milih basis gambar kanggo DLL, kajaba siji kasebut kanthi nggunakake argumen "--image-base". Kanthi nggunakake hash sing dijupuk saka jeneng DLL kanggo nggawe dhasar gambar sing unik kanggo saben DLL, tabrakan ing-memori lan relokasi sing bisa nanggepi eksekusi program sing bisa dihindari.

--disable-auto-image-base

Aja kanthi otomatis nggawé basis gambar sing unik. Yen ora ana basis gambar pengguna sing spesifik ("--image-base") banjur gunakake default platform.

--dll-search-prefix string

Nalika nggathukake dynamically menyang dll tanpa perpustakaan impor, nelusuri " . DLL" ing pilihan kanggo "lib . DLL". Prilaku iki ngidini gampang bédané antara DLL sing diwangun kanggo macem-macem subplatforms: native, cygwin, uwin, pw, etc. Kayata, cygwin DLL biasane nganggo "--dll-search-prefix = cyg".

--enable-auto-import

Nindakake link "_symbol" canggih kanggo "__imp__symbol" kanggo impor DATA saka DLL, lan nggawe simbol thunking sing dibutuhake nalika mbangun perpustakaan impor karo sing DATAexports. Iki umume bakal 'kerja' - nanging kadhangkala sampeyan bisa ndeleng pesen iki:

"Variabel '' ora bisa diimpor otomatis. Mangga maca dokumentasi kanggo" --enable-auto-import "ld kanggo rincian."

Pesen iki ana nalika sawetara ekspresi (sub) ngakses alamat pungkasan sing diwenehake dening jumlah loro konstanta (tabel ngimpor Win32 mung ngidini siji). Contoh sing bisa kedadeyan kalebu akses menyang kolom anggota variabel struct sing diimpor saka DLL, uga nggunakake indeks konstan menyang variabel array sing diimpor saka DLL. Variabel sembarang multiware (array, struct, long dawa, etc) bisa micu kondisi kesalahan iki. Nanging, tanpa mangerteni jenis data sing bener saka variabel sing dieksekusi sing dilirwakaké, ld bakal ndeteksi, menehi tandha, lan metu.

Ana sawetara cara kanggo ngatasi kasulitan iki, tanpa dipikirake jenis data saka variabel ekspor:

Salah sawijining cara kanggo nggunakake - switch -enable-runtime-pseudo-reloc switch. Iki nerangake tugas nyetel referensi ing kode klien kanggo lingkungan runtime, supaya metode iki bisa dianggo mung nalika enkripsi runtime ndhukung fitur iki.

Solusi kapindho yaiku kanggo meksa salah siji saka 'konstanta' dadi variabel --- yaiku, ora dingerteni lan ora bisa dioptimalisasi nalika wektu kompilasi. Kanggo array, ana rong kemungkinan: a) nggawe indeks (alamat array) minangka variabel, utawa b) nggawe indeks 'konstan' minangka variabel. Mangkono:

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

utawa

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

Kanggo structs (lan paling akeh tipe data multiword liyane) pilihan mung kanggo nggawe struct dhewe (utawa sing dawa banget, utawa ...) variabel:

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

utawa

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

Cara katelu kanggo ngatasi masalah iki yaiku ninggalake 'ngimpor otomatis' kanggo simbol ngalahake lan tandhani karo "__declspec (dllimport)". Nanging, ing praktek sing mbutuhake nggunakake #defines kompilasi-wektu kanggo nandhani yen sampeyan mbangun DLL, mbangun kode klien sing bakal nyambung menyang DLL, utawa mung mbangun / nyambung menyang perpustakaan statis. Nalika nggawe pilihan antarane macem-macem cara kanggo ngrampungake 'alamat langsung kanthi masalah sing tetep diatasi', sampeyan kudu nimbang migunakake donya nyata:

Asli:

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

Solusi 1:

--foo.h extern int arr []; --foo.c #include "foo.h" void main (int argc, char ** argv) {/ * Workaround iki kanggo win32 lan cygwin; aja "ngoptimalake" * / molah malih int * parr = arr; printf ("% d \ n", parr [1]); }

Solusi 2:

- foo.h / * Wigati: ekspor otomatis dianggep (ora __declspec (dllexport)) * / #if (ditetepake (_WIN32) || didefinisikan (__ CYGWIN__)) &&! )) #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]); }

Cara papat kanggo nyegah masalah iki yaiku ngode ulang perpustakaan sampeyan nggunakake antarmuka fungsional tinimbang antarmuka data kanggo variabel offending (eg set_foo () lan get_foo () fungsi accessor).

--disable-auto-import

Aja nyoba nglakoni pranala "_symbol" sophisticalted menyang "__imp__symbol" kanggo DATAimports saka DLLs.

--enable-runtime-pseudo-reloc

Yen kode sampeyan ngandhut ekspresi sing dijelasake ing bagian --enable-auto-import, yaiku, DATAimports saka DLL karo non-nol offset, saklar iki bakal nggawe vektor saka 'runtime pseudo relocation' kang bisa digunakake dening lingkungan runtime kanggo nyetel referensi kanggo data kasebut ing kode klien sampeyan.

--disable-runtime-pseudo-reloc

Aja nggawe pocapan relokasi kanggo non-nol impor DATA impor saka DLLs. Iki minangka standar.

--enable-extra-pe-debug

Tampilake info debug tambahan sing gegandhengan karo simbol impor otomatis.

--section-alignment

Setsake alignment bagean. Bagéan ing memori bakal tansah diwiwiti ing alamat sing macem-macem nomer iki. Default kanggo 0x1000.

- Stack cadangan

- Stack cadangan , laku

Nemtokake jumlah memori kanggo cadangan (lan opo komit) kanggo digunakake minangka tumpukan kanggo program iki. Default yaiku 2Mb, 4K dileksanakake.

--subsystem kang

--subsystem kang : utama

--subsystem kang : utama . suntingan

Nemtokake subsistem ing ngisor program sampeyan bakal dieksekusi. Nilai-nilai hukum sing "native", "windows", "console", lan "posix". Sampeyan uga bisa milih versi subsistem uga.

Penting: Gunakake perintah wong ( % man ) kanggo ndeleng carane printah sing digunakake ing komputer sampeyan.