Perintah Linux / Unix: Id

NAME

ld - Menggunakan LD , penghubung GNU

SINOPSIS

ld [ options ] objfile ...

DESKRIPSI

ld menggabungkan beberapa objek dan fail arkib, memindahkan data mereka dan mengaitkan rujukan simbol. Biasanya langkah terakhir dalam menyusun program adalah untuk menjalankan ld .

ld menerima fail Bahasa Penunjuk Pautan yang ditulis dalam bentuk sintaks Sintaks Bahasa Komando Penyunting AT & T, untuk memberikan kawalan eksplisit dan menyeluruh ke atas proses penyambungan.

Halaman lelaki ini tidak menerangkan bahasa arahan; lihat entri ld di "info", atau ld manual: penyemak imbas GNU , untuk butiran lengkap mengenai bahasa arahan dan aspek lain dari penaut GNU.

Versi ld ini menggunakan perpustakaan umum BFD tujuan untuk beroperasi pada fail objek. Ini membolehkan ld membaca, menggabungkan, dan menulis fail objek dalam banyak format berbeza --- contohnya, COFF atau "a.out". Format yang berbeza mungkin dikaitkan bersama untuk menghasilkan apa-apa jenis fail objek yang tersedia.

Selain dari kelenturannya, penandai GNU lebih membantu daripada penyambung lain dalam menyediakan maklumat diagnostik. Ramai penghubung mengabaikan pelaksanaan sebaik sahaja menghadapi ralat; jika boleh, ld terus melaksanakan, membolehkan anda mengenal pasti ralat lain (atau, dalam beberapa kes, untuk mendapatkan fail output walaupun ralat).

Penyambung GNU ld bertujuan untuk merangkumi pelbagai situasi, dan menjadi serasi mungkin dengan penyambung lain. Akibatnya, anda mempunyai banyak pilihan untuk mengawal kelakuannya.

PILIHAN

Penyambung menyokong banyak pilihan baris perintah , namun dalam praktik sebenar, beberapa dari mereka digunakan dalam konteks tertentu. Sebagai contoh, penggunaan ld yang lazim adalah untuk menghubungkan fail objek Unix standard pada standard, sistem Unix yang disokong. Pada sistem sedemikian, untuk memautkan fail "hello.o":

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

Ini memberitahu ld untuk menghasilkan fail bernama output sebagai hasil menghubungkan fail "/lib/crt0.o" dengan "hello.o" dan perpustakaan "libc.a", yang akan datang dari direktori carian standard. (Lihat perbincangan pilihan -l di bawah.)

Sesetengah pilihan baris perintah ke ld boleh ditentukan pada mana-mana titik dalam baris arahan. Walau bagaimanapun, pilihan yang merujuk kepada fail, seperti -l atau -T , menyebabkan fail dibaca pada titik di mana pilihan muncul dalam baris arahan, berbanding fail objek dan pilihan fail lain. Mengulangi pilihan bukan fail dengan hujah yang berbeza akan sama ada tiada kesan selanjutnya, atau mengatasi kejadian sebelumnya (yang lebih jauh ke kiri pada baris arahan) pilihan itu. Pilihan yang boleh dinyatakan secara bermakna lebih daripada sekali dinyatakan dalam uraian di bawah.

Argumen bukan pilihan adalah objek atau arkib objek yang akan dihubungkan bersama. Mereka boleh mengikuti, mendahului, atau bercampur dengan pilihan baris perintah, kecuali hujah fail objek tidak boleh diletakkan di antara pilihan dan hujahnya.

Biasanya penyalin dipanggil dengan sekurang-kurangnya satu fail objek, tetapi anda boleh menentukan bentuk lain fail input binari menggunakan -l , -R , dan bahasa arahan skrip. Sekiranya tiada fail input binari sama sekali ditentukan, penghubung tidak menghasilkan sebarang output, dan mengeluarkan mesej Tiada fail input .

Jika penyambung tidak dapat mengenali format fail objek, ia akan menganggap bahawa ia adalah skrip penghubung. Skrip yang dinyatakan dengan cara ini menambahkan skrip penghubung utama yang digunakan untuk pautan (sama ada skrip penghubung lalai atau yang ditentukan dengan menggunakan -T ). Ciri ini membenarkan penghubung untuk menghubungkan terhadap fail yang kelihatan sebagai objek atau arkib, tetapi sebenarnya hanya mentakrifkan beberapa nilai simbol, atau menggunakan "INPUT" atau "GROUP" untuk memuat objek lain. Ambil perhatian bahawa menentukan skrip dengan cara ini hanya menambah skrip penghubung utama; gunakan pilihan -T untuk menggantikan skrip penghantar lalai sepenuhnya.

Untuk pilihan yang namanya adalah satu huruf, hujah-hujah pilihan mestilah mengikuti ikatan opsyen tanpa memotong ruang kosong, atau diberikan sebagai hujah-hujah yang berasingan dengan segera mengikuti pilihan yang memerlukannya.

Untuk pilihan yang namanya berbilang huruf, sama ada satu atau dua huruf boleh mendahului nama pilihan; sebagai contoh, simbol-simbol dan simbol-simbol adalah bersamaan. Nota - terdapat satu pengecualian kepada peraturan ini. Pelbagai pilihan huruf yang bermula dengan huruf kecil 'o' hanya boleh diikuti oleh dua baris. Ini adalah untuk mengurangkan kekeliruan dengan pilihan -o . Oleh itu, contohnya -omagik menetapkan nama fail output kepada sihir sedangkan --omagik menetapkan bendera NMAGIC pada output.

Argumen kepada pelbagai pilihan huruf mestilah dipisahkan daripada nama pilihan dengan tanda yang sama, atau diberikan sebagai hujah yang berasingan dengan serta-merta mengikut pilihan yang memerlukannya. Sebagai contoh, simbol -trace-foo dan simbol -trace = foo adalah bersamaan. Singkatan unik nama pilihan berganda-huruf diterima.

Perhatikan - jika linker sedang dipanggil secara tidak langsung, melalui pemacu pengkompil (misalnya gcc ) maka semua pilihan baris perintah penghubung harus diawali oleh -Wl, (atau apa saja yang sesuai untuk pemandu compiler tertentu) seperti ini:

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

Ini penting, kerana jika tidak, program pengemudi compiler secara senyap-senyap akan menjatuhkan pilihan penghubung, sehingga menghasilkan pautan buruk.

Berikut ialah jadual suis baris perintah generik yang diterima oleh pengawal GNU:

-a kata kunci

Pilihan ini disokong untuk keserasian HP / UX. Hujah kata kunci mestilah salah satu arkib rentetan , dikongsi , atau lalai . -aarkif bersamaan dengan fungsi -Batik , dan dua kata kunci yang lain bersamaan dengan -Bdynamic . Pilihan ini boleh digunakan beberapa kali.

- Seni bina

- arkitektur = seni bina

Dalam pelepasan semasa ld , pilihan ini hanya berguna untuk keluarga seni bina Intel 960. Dalam konfigurasi itu, argumen seni bina mengenalpasti seni bina tertentu dalam keluarga 960, yang membolehkan beberapa perlindungan dan mengubah laluan carian arkib-perpustakaan.

Siaran masa depan ld boleh menyokong fungsi yang sama untuk keluarga seni bina yang lain.

-b input-format

--format = input-format

ld boleh dikonfigurasikan untuk menyokong lebih daripada satu jenis fail objek. Jika ld anda dikonfigurasi dengan cara ini, anda boleh menggunakan pilihan -b untuk menentukan format binari untuk fail objek input yang mengikuti pilihan ini pada baris arahan. Walaupun apabila dikonfigurasikan untuk menyokong format objek alternatif, anda biasanya tidak perlu menentukan ini, seperti yang perlu dikonfigurasikan untuk dijangka sebagai format input lalai format yang paling biasa pada setiap mesin. Format input ialah rentetan teks, nama format tertentu yang disokong oleh perpustakaan BFD. (Anda boleh menyenaraikan format binari yang ada dengan objdump -i .)

Anda mungkin mahu menggunakan pilihan ini jika anda menghubungkan fail dengan format perduaan yang luar biasa. Anda juga boleh menggunakan -b untuk menukar format secara eksplisit (semasa menghubungkan fail objek dengan format yang berbeza), dengan memasukkan -b input-format sebelum setiap kumpulan fail objek dalam format tertentu.

Format lalai diambil dari pembolehubah persekitaran "GNUTARGET".

Anda juga boleh menentukan format input daripada skrip, menggunakan arahan "TARGET";

-c MRI-commandfile

--mri-script = MRI-commandfile

Untuk keserasian dengan penghubung yang dihasilkan oleh MRI, ld menerima fail skrip yang ditulis dalam bahasa arahan alternatif yang terhad, yang diterangkan dalam seksyen Fail Skrip MRI yang sesuai dengan dokumentasi GNU. Memperkenalkan fail skrip MRI dengan pilihan -c ; gunakan pilihan -T untuk menjalankan skrip pautan yang ditulis dalam bahasa skrip ld tujuan umum. Jika MRI-cmdfile tidak wujud, ld mencarinya dalam direktori yang ditentukan oleh sebarang -L pilihan.

-d

-dc

-dp

Ketiga pilihan ini bersamaan; pelbagai bentuk disokong untuk keserasian dengan penyambung lain. Mereka memberi ruang kepada simbol umum walaupun fail output yang boleh dipindahkan dinyatakan (dengan -r ). Perintah skrip "FORCE_COMMON_ALLOCATION" mempunyai kesan yang sama.

kemasukan -e

--entry = masuk

Gunakan entri sebagai simbol yang jelas untuk memulakan pelaksanaan program anda, bukan titik masuk lalai. Sekiranya tiada entri bernama simbol, penyambung akan cuba mengasingkan entri sebagai nombor, dan menggunakannya sebagai alamat kemasukan (nombor tersebut akan ditafsirkan dalam asas 10; anda boleh menggunakan 0x utama untuk asas 16, atau 0 yang terkemuka untuk asas 8).

-E

--export-dinamik

Apabila mencipta secara dinamik boleh laku, tambahkan semua simbol ke jadual simbol dinamik. Jadual simbol dinamik adalah set simbol yang dapat dilihat dari objek dinamik pada masa yang berjalan.

Jika anda tidak menggunakan pilihan ini, jadual simbol dinamik biasanya mengandungi hanya simbol-simbol yang dirujuk oleh beberapa objek dinamik yang disebut dalam pautan tersebut.

Jika anda menggunakan "dlopen" untuk memuat objek dinamik yang perlu merujuk kepada simbol-simbol yang ditakrifkan oleh program, bukannya beberapa objek dinamik lain, maka anda mungkin perlu menggunakan pilihan ini ketika menghubungkan program itu sendiri.

Anda juga boleh menggunakan skrip versi untuk mengawal apa simbol harus ditambahkan pada jadual simbol dinamik jika format output menyokongnya. Lihat perihalan skrip -version di @ref {VERSION}.

-EB

Tautan objek besar-endian. Ini mempengaruhi format output lalai.

-EL

Pautan objek kecil-endian. Ini mempengaruhi format output lalai.

-f

- Nama tampal

Apabila mencipta objek bersama ELF, tetapkan medan DT_AUXILIARY dalaman kepada nama yang ditentukan. Ini memberitahu penghubung dinamik bahawa jadual simbol objek kongsi harus digunakan sebagai penolong tambahan pada jadual simbol nama objek bersama.

Jika anda kemudian menghubungkan program terhadap objek penapis ini, maka, apabila anda menjalankan program tersebut, penaut dinamis akan melihat bidang DT_AUXILIARY. Jika penyalin dinamik menyelesaikan sebarang simbol dari objek penapis, ia akan terlebih dahulu memeriksa sama ada terdapat definisi dalam nama objek kongsi. Sekiranya terdapat satu, ia akan digunakan dan bukan definisi dalam objek penapis. Nama objek bersama tidak perlu wujud. Oleh itu, nama objek bersama boleh digunakan untuk menyediakan pelaksanaan alternatif fungsi tertentu, mungkin untuk debug atau untuk prestasi khusus mesin.

Pilihan ini boleh ditentukan lebih daripada sekali. Penyertaan DT_AUXILIARY akan dibuat mengikut urutan di mana ia muncul pada baris arahan.

-F nama

- nama pengfilter

Apabila mencipta objek bersama ELF, tetapkan medan DT_FILTER dalaman kepada nama yang ditentukan. Ini memberitahu penghubung dinamik bahawa jadual simbol objek bersama yang sedang dibuat harus digunakan sebagai penapis pada jadual simbol nama objek bersama.

Jika anda kemudian menghubungkan program terhadap objek penapis ini, maka, apabila anda menjalankan program, penaut dinamis akan melihat bidang DT_FILTER. Penala dinamis akan menyelesaikan simbol-simbol sesuai dengan jadual simbol objek penyaring seperti biasa, tetapi sebenarnya akan menghubungkan dengan definisi yang ditemukan dalam nama objek bersama. Oleh itu, objek penapis boleh digunakan untuk memilih subset simbol yang disediakan oleh nama objek.

Sesetengah penghubung yang lebih lama menggunakan pilihan -F di sepanjang alat penyusun kompilasi untuk menentukan format fail objek untuk kedua-dua input dan output fail objek. Pengantara GNU menggunakan mekanisme lain untuk tujuan ini: -b , --format , --format opsyen, perintah "TARGET" dalam skrip penghubung, dan pembolehubah persekitaran "GNUTARGET". Pengantara GNU akan mengabaikan pilihan -F ketika tidak membuat objek bersama ELF.

-fini nama

Apabila mencipta objek yang boleh dieksekusi atau dikongsi ELF, hubungi NAME apabila objek yang boleh dieksekusi atau dikongsi dipunggah, dengan menetapkan DT_FINI ke alamat fungsi. Secara lalai, penghubung menggunakan "_fini" sebagai fungsi untuk memanggil.

-g

Diabaikan. Disediakan untuk keserasian dengan alat lain.

-G nilai

--gpsize = nilai

Tetapkan saiz maksimum objek yang akan dioptimumkan menggunakan daftar GP untuk saiz . Ini hanya bermakna untuk format fail objek seperti MIPS ECOFF yang menyokong meletakkan objek besar dan kecil ke dalam bahagian yang berlainan. Ini tidak diingini untuk format fail objek lain.

nama- h

-soname = nama

Apabila mencipta objek yang dikongsi ELF, tetapkan medan DT_SONAME dalaman kepada nama yang ditentukan. Apabila eksekusi dikaitkan dengan objek yang dikongsi yang mempunyai medan DT_SONAME, maka apabila executable dijalankan, linker dinamis akan mencoba memuatkan objek bersama yang ditentukan oleh medan DT_SONAME dan bukannya menggunakan nama file yang diberikan kepada linker tersebut.

-i

Lakukan pautan tambahan (sama seperti opsyen -r ).

- nama

Apabila mencipta objek yang dapat dieksekusi atau dikongsi ELF, hubungi NAME apabila objek yang boleh dieksekusi atau dikongsi dimuatkan, dengan menetapkan DT_INIT ke alamat fungsi. Secara lalai, penaut menggunakan "_init" sebagai fungsi untuk memanggil.

-l arsip

--library = arkib

Tambah arkib fail arkib ke senarai fail untuk dihubungkan. Pilihan ini boleh digunakan beberapa kali. ld akan mencari senarai laluan untuk kejadian "libarchive.a" untuk setiap arkib yang ditentukan.

Mengenai sistem yang menyokong perpustakaan kongsi, ld juga boleh mencari perpustakaan dengan pelanjutan selain ".a". Secara khusus, mengenai sistem ELF dan SunOS, saya akan mencari direktori untuk perpustakaan dengan lanjutan ".so" sebelum mencari seseorang dengan pelanjutan ".a". Dengan konvensyen, sambungan ".so" menunjukkan pustaka bersama.

Penautan akan mencari arkib hanya sekali, di lokasi di mana ia ditentukan pada baris arahan. Sekiranya arkib mentakrifkan simbol yang tidak ditentukan dalam sesetengah objek yang muncul sebelum arkib pada baris arahan, penaut akan menyertakan fail yang sesuai dari arkib. Walau bagaimanapun, simbol yang tidak ditakrifkan dalam objek yang muncul kemudian pada baris arahan tidak akan menyebabkan penghubung untuk mencari arkib lagi.

Lihat - ( pilihan cara untuk memaksa penghubung untuk mencari arkib beberapa kali.

Anda boleh menyenaraikan arkib yang sama beberapa kali pada baris arahan.

Jenis carian arkib ini adalah standard untuk pengawal Unix. Walau bagaimanapun, jika anda menggunakan ld onAIX, perhatikan bahawa ia adalah berbeza daripada tingkah laku penyambung AIX.

-L carian

--library-path = searchdir

Tambah path searchdir ke senarai laluan yang akan mencari perpustakaan arkib dan skrip kawalan ld . Anda boleh menggunakan pilihan ini beberapa kali. Direktori dicari dalam urutan di mana ia ditentukan pada baris arahan. Direktori yang dinyatakan pada baris arahan dicari sebelum direktori lalai. Semua opsyen -L terpakai kepada semua -l pilihan, tanpa mengira susunan pilihan.

Jika searchdir bermula dengan "=", maka "=" akan digantikan oleh awalan sysroot , jalan yang dinyatakan apabila penyemak itu dikonfigurasi.

Seting laluan lalai yang dicari (tanpa ditentukan dengan -L ) bergantung pada mod emulasi yang digunakan, dan dalam beberapa kes juga bagaimana ia dikonfigurasikan.

Laluan juga boleh ditentukan dalam skrip pautan dengan arahan "SEARCH_DIR". Direktori yang dinyatakan dengan cara ini dicari pada titik di mana skrip penghubung muncul di baris arahan.

-memulasi

Emulate the linking emulation . Anda boleh menyenaraikan emulasi yang tersedia dengan pilihan --verbose atau -V .

Jika pilihan -m tidak digunakan, emulasi diambil dari pembolehubah persekitaran "LDEMULATION", jika itu ditakrifkan.

Jika tidak, emulasi lalai bergantung kepada bagaimana penyalin itu dikonfigurasikan.

-M

--print-map

Cetak peta pautan ke output standard. Peta pautan menyediakan maklumat mengenai pautan, termasuk yang berikut:

*

Di mana fail dan simbol objek dipetakan ke dalam memori.

*

Bagaimana simbol biasa diperuntukkan.

*

Semua ahli arkib termasuk dalam pautan itu, dengan menyebut simbol yang menyebabkan ahli arkib dibawa masuk.

-n

--nagih

Matikan penjajaran halaman seksyen, dan tandakan output sebagai "NMAGIC" jika boleh.

-N

--omagik

Tetapkan teks dan bahagian data supaya dapat dibaca dan ditulis. Juga, jangan jajarkan segmen data segmen, dan lumpuhkan pautan terhadap perpustakaan yang dikongsi. Jika format output menyokong nombor sihir gaya Unix, tandakan output sebagai "OMAGIC".

- tidak menghairankan

Pilihan ini menafikan kebanyakan kesan pilihan -N . Ia menetapkan bahagian teks untuk dibaca sahaja, dan memaksa segmen data menjadi selaras halaman. Nota - opsyen ini tidak membolehkan menghubungkan terhadap perpustakaan yang dikongsi. Gunakan -Bdynamic untuk ini.

-o output

- output = keluaran

Gunakan keluaran sebagai nama untuk program yang dihasilkan oleh ld ; jika pilihan ini tidak ditentukan, nama a.out digunakan secara lalai. Perintah skrip "OUTPUT" juga boleh menentukan nama fail output.

-O tahap

Jika tahap adalah nilai angka lebih besar daripada sifar ld mengoptimumkan output. Ini mungkin mengambil masa yang lama dan oleh itu mungkin hanya perlu didayakan untuk binari akhir.

-q

--emit-relocs

Tinggalkan bahagian dan isi kandungan penempatan dalam pelaksana yang berkaitan sepenuhnya. Analisis pautan pos dan alat pengoptimuman mungkin memerlukan maklumat ini untuk melakukan pengubahsuaian yang betul bagi laku laku. Ini akan dapat dieksekusi lebih besar.

Pilihan ini pada masa ini hanya disokong pada platform ELF.

-r

- tidak dapat dikalahkan

Hasilkan output yang dapat ditarik balik --- iaitu, menghasilkan fail output yang boleh berfungsi sebagai input kepada ld . Ini sering dipanggil penyambungan separa . Sebagai kesan sampingan, dalam persekitaran yang menyokong nombor sihir Unix standard, pilihan ini juga menetapkan nombor sihir fail output kepada "OMAGIC". Jika pilihan ini tidak ditentukan, fail mutlak dihasilkan. Apabila menghubungkan program C ++, pilihan ini tidak akan menyelesaikan rujukan kepada pembina; untuk melakukan itu, gunakan -Ur .

Apabila fail input tidak mempunyai format yang sama dengan fail output, penyambungan separa hanya disokong jika fail input itu tidak mengandungi sebarang relokasi. Format keluaran yang berbeza boleh mempunyai sekatan lebih lanjut; contohnya format berasaskan "a.out" tidak menyokong pautan sebahagian dengan fail input dalam format lain sama sekali.

Pilihan ini melakukan perkara yang sama seperti -i .

-R nama fail

--just-symbols = filename

Bacalah nama simbol dan alamat mereka dari nama fail , tetapi jangan pindahkannya atau sertakan dalam output. Ini membolehkan fail output anda merujuk simbol ke lokasi memori mutlak yang ditakrifkan dalam program lain. Anda boleh menggunakan pilihan ini lebih daripada sekali.

Untuk keserasian dengan penghubung ELF yang lain, jika pilihan -R diikuti dengan nama direktori, bukan nama fail, ia dianggap sebagai pilihan -rpath .

-s

--strip-semua

Omit semua maklumat simbol dari fail output.

-S

--strip-debug

Omit maklumat simbol debugger (tetapi tidak semua simbol) dari fail output.

-t

- jejak

Cetak nama-nama fail input sebagai prosesnya.

-T skrip fail

--script = scriptfile

Gunakan skrip skrip sebagai skrip penghubung. Skrip ini menggantikan skrip pautan lalai ld (bukannya menambahnya), jadi commandfile mesti menentukan semua yang diperlukan untuk menggambarkan fail output. Jika fail skrip tidak wujud dalam direktori semasa, "ld" mencarinya dalam direktori yang dinyatakan oleh mana-mana pilihan -L sebelumnya. Pelbagai pilihan T- terkumpul.

-u simbol

--disiplin = simbol

Simbol angkatan untuk dimasukkan ke dalam fail output sebagai lambang yang tidak ditentukan. Melakukan ini boleh, sebagai contoh, mencetuskan menghubungkan modul tambahan dari perpustakaan standard. -u boleh diulang dengan hujah opsyen yang berbeza untuk memasukkan simbol-simbol tidak jelas yang lain. Pilihan ini bersamaan dengan arahan skrip penghubung "EXTERN".

-Ur

Untuk apa-apa selain daripada program C ++, pilihan ini bersamaan dengan -r : ia menghasilkan keluaran yang boleh ditukar ganti --- iaitu, fail output yang boleh berfungsi sebagai input kepada ld . Apabila menghubungkan program C ++, -Ur menyelesaikan penyelesaian kepada pembina, tidak seperti -r . Ia tidak berfungsi untuk menggunakan -Ur pada fail yang sendiri dikaitkan dengan -Ur ; sebaik sahaja jadual pembina telah dibina, ia tidak boleh ditambah. Gunakan -Ur hanya untuk pautan separa terakhir, dan -r untuk yang lain.

--unique [= SECTION ]

Mencipta bahagian keluaran berasingan bagi setiap bahagian yang sepadan dengan SEKSYEN , atau jika argumen SEKSYEN wildcard pilihan hilang, untuk setiap bahagian input yatim piatu. Seksyen yatim adalah salah satu yang tidak disebutkan secara khusus dalam skrip penghubung. Anda boleh menggunakan pilihan ini beberapa kali pada baris arahan; Ia menghalang penggabungan normal bahagian masukan dengan nama yang sama, mengetepikan tugasan bahagian output dalam skrip penghubung.

-v

- pengalihan

-V

Paparkan nombor versi untuk ld . Pilihan -V juga menyenaraikan emulasi yang disokong.

-x

--discard-all

Padamkan semua simbol tempatan.

-X

- penduduk setempat

Padam semua simbol tempatan sementara. Untuk kebanyakan sasaran, ini adalah semua simbol tempatan yang namanya bermula dengan L.

- simbol

--trace-symbol = symbol

Cetak nama setiap fail yang dipautkan di mana simbol muncul. Pilihan ini boleh diberikan berapa kali. Pada banyak sistem adalah perlu untuk menyediakan garis bawah.

Pilihan ini berguna apabila anda mempunyai simbol yang tidak ditentukan dalam pautan anda tetapi tidak tahu di mana rujukannya datang.

-Ya laluan

Tambah laluan ke laluan carian pustaka default. Opsyen ini wujud untuk keserasian Solaris.

-z kata kunci

Kata kunci yang diakui adalah "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" and "nocopyreloc ". Kata kunci lain diabaikan untuk keserasian Solaris. "initfirst" menandakan objek yang akan dimulakan pertama pada runtime sebelum sebarang objek lain. "interpose" menandakan objek yang jadual simbolnya dipisahkan sebelum semua simbol tetapi yang boleh dieksekusi. "loadfltr" menandakan objek yang filestinya diproses dengan segera pada masa runtuh. "nodefaultlib" menandakan objek bahawa pencarian untuk dependencies objek ini akan mengabaikan mana-mana laluan carian perpustakaan lalai. "nodelete" menandakan objek tidak boleh dimunggah semasa runtime. "nodlopen" menandakan objek tidak tersedia untuk "dlopen". "nodump" menandakan objek tidak boleh dibuang oleh "dldump". "sekarang" menandakan objek dengan runtime runtime yang tidak malas. "asal" menandakan objek mungkin mengandungi $ ORIGIN. "defs" melarang simbol yang tidak ditentukan. "muldefs" membolehkan pelbagai definisi. "combreloc" menggabungkan beberapa bahagian relok dan menyusunnya untuk menjadikan cache simbol carian dinamik mungkin.

"nocombreloc" melumpuhkan beberapa bahagian relokasi yang bergabung. "nocopyreloc" melumpuhkan pengeluaran relocs salinan.

- ( arkib -)

- arkib kumpulan akhir --end-kumpulan

Arkib mestilah senarai fail arkib . Mereka mungkin sama ada nama fail eksplisit, atau pilihan -l .

Arkib yang ditentukan dicari berulang kali sehingga tiada rujukan yang belum ditentukan baru dibuat. Biasanya, arkib hanya dicari sekali dalam susunan yang ditentukan pada baris arahan. Sekiranya simbol dalam arkib itu diperlukan untuk menyelesaikan simbol yang tidak ditakrifkan dirujuk oleh objek dalam arkib yang muncul kemudian pada baris arahan, penyambung tidak dapat menyelesaikan rujukan tersebut. Dengan mengelompokkan arkib, semuanya akan dicari berulang kali sehingga semua kemungkinan rujukan dapat diselesaikan.

Menggunakan pilihan ini mempunyai kos prestasi yang ketara. Lebih baik menggunakannya hanya apabila terdapat rujukan pekeliling yang tidak dapat dielakkan di antara dua atau lebih arsip.

- penerimaan-tidak diketahui-masuk-gerbang

- tidak menerima-tidak-input-gerbang

Memberitahu penghubung untuk menerima fail masukan yang senibina tidak dapat diiktiraf. Anggapannya ialah pengguna mengetahui apa yang mereka lakukan dan sengaja mahu menghubungkan dalam fail input yang tidak diketahui ini. Ini adalah tingkah laku lalai penyambung, sebelum pelepasan 2.14. Tingkah laku lalai dari pelepasan 2.14 dan seterusnya adalah untuk menolak fail input tersebut, dan oleh itu, pilihan - penerimaan-tidak diketahui-lengkungan telah ditambah untuk memulihkan tingkah laku lama.

kata kunci kata kunci

Pilihan ini diabaikan untuk keserasian SunOS .

-Bdynamic

-dy

-call_shared

Pautkan terhadap perpustakaan dinamik. Ini hanya bermakna pada platform yang mana perpustakaan berkongsi disokong. Pilihan ini biasanya adalah lalai pada platform sedemikian. Varian berbeza pilihan ini adalah untuk keserasian dengan pelbagai sistem. Anda boleh menggunakan pilihan ini beberapa kali pada baris arahan: ia memberi kesan kepada perpustakaan mencari -l pilihan yang mengikutnya.

-Bahagian

Tetapkan bendera "DF_1_GROUP" dalam entri "DT_FLAGS_1" dalam bahagian dinamik. Ini menyebabkan penghubung runtime untuk mengendalikan carian dalam objek ini dan dependensinya hanya dilakukan di dalam kumpulan. - tidak ada undefined tersirat. Pilihan ini hanya bermakna pada platform ELF yang menyokong perpustakaan berkongsi .

-Batik

-dn

-non_shared

-statik

Jangan hubungkan dengan perpustakaan berkongsi. Ini hanya bermakna pada platform yang mana perpustakaan berkongsi disokong. Varian berbeza pilihan ini adalah untuk keserasian dengan pelbagai sistem. Anda boleh menggunakan pilihan ini beberapa kali pada baris arahan: ia memberi kesan kepada perpustakaan mencari -l pilihan yang mengikutnya.

-Bakterik

Apabila membuat perpustakaan yang dikongsi, ikut rujukan kepada simbol global kepada definisi dalam perpustakaan kongsi, jika ada. Biasanya, ada kemungkinan program berkaitan dengan perpustakaan yang dikongsi untuk mengatasi definisi dalam perpustakaan kongsi. Pilihan ini hanya bermakna pada ELFplatforms yang menyokong perpustakaan berkongsi.

- bahagian centang

- tidak menyemak bahagian

Minta penaut tidak menyemak alamat seksyen selepas mereka ditugaskan untuk melihat sama ada terdapat pertindihan. Biasanya penghubung akan melakukan pemeriksaan ini, dan jika ia mendapati apa-apa tumpang tindih ia akan menghasilkan mesej ralat yang sesuai. Penghubung itu tahu tentang, dan membuat peruntukan bagi seksyen dalam overlays. Tingkah laku lalai boleh dipulihkan dengan menggunakan suis baris perintah - bahagian centang .

--cref

Output jadual rujukan salib. Jika fail peta pautan dihasil, jadual rujukan salib dicetak ke fail peta. Jika tidak, ia dicetak pada output piawai.

Format jadual adalah sengaja mudah, supaya ia dapat diproses dengan mudah oleh skrip jika perlu. Simbol-simbol dicetak, disusun mengikut nama. Untuk setiap simbol, senarai nama fail diberikan. Sekiranya simbol ditakrifkan, fail pertama yang disenaraikan ialah lokasi definisi. Fail yang tinggal mengandungi rujukan kepada simbol.

- tidak menentukan-biasa

Opsyen ini menghalang tugasan alamat untuk simbol umum. Arahan skrip "INHIBIT_COMMON_ALLOCATION" mempunyai kesan yang sama.

Opsyen --no-define-common membolehkan decoupling keputusan untuk menetapkan alamat ke simbol umum dari pilihan jenis fail output; jika tidak, jenis keluaran bukan Relocatable menugaskan alamat ke simbol umum. Menggunakan - tidak mendefinisikan-umum membolehkan simbol-simbol umum yang dirujuk dari perpustakaan yang dikongsi untuk diberikan alamat hanya dalam program utama. Ini menghapuskan ruang pendua yang tidak digunakan dalam pustaka bersama, dan juga menghalang sebarang kekeliruan yang mungkin untuk menyelesaikan dengan duplikasi yang salah apabila terdapat banyak modul dinamik dengan laluan carian khusus untuk resolusi simbol runtime.

--defsym symbol = ekspresi

Buat simbol global dalam fail output, yang mengandungi alamat mutlak yang diberikan oleh ekspresi . Anda boleh menggunakan pilihan ini sebanyak yang diperlukan untuk menentukan beberapa simbol dalam baris arahan. Bentuk aritmetik yang terhad disokong untuk ungkapan dalam konteks ini: anda boleh memberikan pemalar heksadesimal atau nama simbol yang sedia ada, atau menggunakan "+" dan "-" untuk menambah atau menolak pemalar atau simbol heksadesimal. Sekiranya anda memerlukan ungkapan yang lebih rumit, pertimbangkan untuk menggunakan bahasa arahan pautan dari skrip. Nota: tidak ada ruang putih antara simbol , tanda sama (`` = ''), dan ungkapan .

--mengesan [= gaya ]

- tidak ada demam

Pilihan ini mengawal sama ada untuk menyudutkan nama simbol dalam mesej ralat dan output lain. Apabila penyalin diberitahu untuk menyekat, ia cuba untuk membentangkan nama simbol dalam cara yang boleh dibaca: ia membariskan garis bawah yang utama jika ia digunakan oleh format fail objek, dan menukarkan nama-nama simbol C ++ yang dicerna ke nama pengguna yang mudah dibaca. Pengkompil yang berbeza mempunyai gaya mangling yang berbeza. Argumen gaya demangling pilihan boleh digunakan untuk memilih gaya demangling yang sesuai untuk pengkompil anda. Penautan akan menyekat secara lalai melainkan jika variabel lingkungan COLLECT_NO_DEMANGLE ditetapkan. Pilihan ini boleh digunakan untuk mengatasi lalai.

- fail penaut-bloger

Tetapkan nama penyalin dinamik. Ini hanya bermakna apabila menjana kadangkala ELF boleh dieksekusi secara dinamik. Linker dinamik lalai biasanya betul; jangan gunakan ini kecuali anda tahu apa yang anda lakukan.

- rebat-relocs

Pilihan ini hanya bermakna ketika menghubungkan kod PIC tertanam MIPS, yang dihasilkan oleh pilihan -membubuh-pic ke pengkomputer GNU dan assembler. Ia menyebabkan penghubung untuk membuat jadual yang boleh digunakan pada masa runtime untuk memindahkan mana-mana data yang dimulakan secara statik kepada nilai penunjuk. Lihat kod dalam testuite / ld-empic untuk butiran.

- peringatan-peringatan

Rawat semua amaran sebagai kesilapan .

--force-exe-suffix

Pastikan fail output mempunyai akhiran .exe.

Sekiranya file output yang disambungkan dengan sukses tidak mempunyai akhiran " .exe " atau " .dll ", opsyen ini memaksa penyalin untuk menyalin fail output kepada salah satu daripada nama yang sama dengan akhiran ".exe". Pilihan ini berguna apabila menggunakan makefiles Unix yang tidak diubahsuai pada host Microsoft Windows, kerana beberapa versi Windows tidak akan menjalankan imej kecuali ia berakhir dengan akhiran ".exe".

- tidak-gc-bahagian

--gc-sections

Dayakan koleksi sampah bahagian input yang tidak digunakan. Ia diabaikan pada sasaran yang tidak menyokong pilihan ini. Pilihan ini tidak bersesuaian dengan -r , dan tidak seharusnya digunakan dengan menghubungkan dinamik. Tingkah laku lalai (tidak melakukan pengumpulan sampah ini) boleh dipulihkan dengan menyatakan - not-gc-bahagian pada baris perintah.

- membantu

Cetak ringkasan pilihan baris arahan pada output standard dan keluar.

--target-help

Cetak ringkasan semua pilihan khusus sasaran pada output standard dan keluar.

-Map mapfile

Cetak peta pautan ke fail map fail. Lihat perihalan pilihan -M , di atas.

- jangan simpan-ingatan

ld biasanya mengoptimumkan untuk mempercepat penggunaan memori dengan mencatat jadual simbol fail input dalam memori. Opsyen ini memberitahu ld untuk mengoptimumkan penggunaan memori, dengan membaca semula jadual simbol seperti yang diperlukan. Ini mungkin diperlukan sekiranya ls kehabisan ruang memori semasa menghubungkan laku yang boleh dilaksanakan.

- tidak jelas

-z defs

Biasanya apabila membuat perpustakaan berkongsi tidak simbolik, simbol yang tidak ditentukan dibenarkan dan dibiarkan diselesaikan oleh pemuat runtime. Pilihan ini tidak membenarkan simbol-simbol yang tidak jelas.

- pelbagai definisi pelbagai

-z muldefs

Biasanya apabila simbol ditakrifkan beberapa kali, penaut akan melaporkan ralat yang membawa maut. Opsyen ini membolehkan pelbagai definisi dan definisi pertama akan digunakan.

--allow-shlib-undefined

Benarkan simbol-simbol yang tidak ditakrifkan dalam objek yang dikongsi walaupun tidak ada undefined. Hasil bersih akan menjadi simbol yang tidak ditentukan dalam objek tetap masih akan mencetuskan ralat, tetapi simbol yang tidak ditentukan dalam objek yang dikongsi akan diabaikan. Pelaksanaan no_undefined membuat andaian bahawa linker runtime akan tersedak pada simbol yang tidak ditentukan. Walau bagaimanapun terdapat sekurang-kurangnya satu sistem (BeOS) di mana simbol-simbol yang tidak ditakrifkan dalam perpustakaan berkongsi adalah normal kerana kernel menumpuk mereka pada masa beban untuk memilih fungsi mana yang paling sesuai untuk seni bina semasa. IE secara dinamik memilih fungsi memset yang sesuai. Rupa-rupanya ia juga biasa bagi perpustakaan berkongsi HPPA untuk mempunyai simbol yang tidak jelas.

- tidak ada undefined-version

Biasanya apabila simbol mempunyai versi yang tidak jelas, penyambung akan mengabaikannya. Opsyen ini melarang simbol dengan versi yang tidak ditentukan dan ralat yang akan membawa maut dikeluarkan.

- tidak memberi peringatan

Biasanya ia akan memberikan ralat jika anda cuba menghubungkan bersama-sama fail input yang tidak sesuai untuk beberapa sebab, mungkin kerana ia telah dikumpulkan untuk pemproses yang berbeza atau untuk endiannesses yang berbeza. Pilihan ini memberitahu bahawa ia sepatutnya membenarkan kesilapan sedemikian. Pilihan ini hanya boleh digunakan dengan berhati-hati, dalam kes-kes apabila anda telah mengambil beberapa tindakan khas yang memastikan bahawa kesalahan penyambung tidak sesuai.

- tidak ada-arkib

Matikan kesan pilihan --pengarah-arkib untuk fail arkib seterusnya.

- tindakan mengharamkan

Kekalkan fail output boleh laku apabila ia masih boleh digunakan. Biasanya, penghubung tidak akan menghasilkan fail output jika ia menemui ralat semasa proses pautan; ia keluar tanpa menulis fail output apabila ia mengeluarkan apa-apa ralat.

-nostdlib

Hanya direktori perpustakaan carian yang dinyatakan secara jelas pada baris arahan. Direktori perpustakaan yang ditentukan dalam skrip penghubung (termasuk skrip penghubung yang dinyatakan pada baris arahan) tidak diendahkan.

- format output-format

ld boleh dikonfigurasikan untuk menyokong lebih daripada satu jenis fail objek. Jika ld anda dikonfigurasikan dengan cara ini, anda boleh menggunakan pilihan --oformat untuk menentukan format binari untuk fail objek output. Walaupun ld dikonfigurasikan untuk menyokong format objek alternatif, anda biasanya tidak perlu menentukan ini, kerana harus dikonfigurasikan untuk menghasilkan sebagai format output lalai format yang paling biasa pada setiap mesin. format output ialah rentetan teks, nama format tertentu yang disokong oleh perpustakaan BFD. (Anda boleh menyenaraikan format perduaan yang tersedia dengan objdump -i .) Perintah skrip "OUTPUT_FORMAT" juga boleh menentukan format output, tetapi opsyen ini mengesahkannya.

-qmagic

Pilihan ini diabaikan untuk keserasian Linux.

-Saya

Pilihan ini diabaikan untuk keserasian SVR4.

--relax

Pilihan dengan kesan bergantung mesin. Pilihan ini hanya disokong pada beberapa sasaran.

Pada beberapa platform, opsyen-opsyen ini melaksanakan pengoptimuman global yang mungkin berlaku apabila penyambung menyelesaikan alamat dalam program, seperti mod alamat santai dan mensintesis arahan baru dalam fail objek output.

Pada sesetengah platform, masa pautan ini pengoptimuman global boleh membuat penyahkodan simbolik yang mungkin tidak dapat dilaksanakan. Ini diketahui sebagai kes bagi pemroses Matsushita MN10200 dan MN10300.

Pada platform yang mana ini tidak disokong, - diterima tetapi dilupakan.

--retain-simbol-fail nama fail

Hanya simpan simbol-simbol yang disenaraikan dalam nama fail fail , membuang semua yang lain. Nama fail hanyalah fail yang rata, dengan satu nama simbol per baris. Pilihan ini amat berguna dalam persekitaran (seperti VxWorks) di mana jadual simbol global besar terkumpul secara beransur-ansur, untuk memelihara memori jangka masa.

- fail-simbol rahsia tidak membuang simbol yang tidak ditentukan, atau simbol yang diperlukan untuk penempatan semula.

Anda hanya boleh menentukan --retain-simbol-fail sekali dalam baris arahan. Ia menimpa -s dan -S .

-rpath dir

Tambah direktori ke laluan carian perpustakaan runtime. Ini digunakan apabila menghubungkan ELFexecutable dengan objek yang dikongsi. Argumen semua -rpath digabungkan dan dihantar kepada penghubung runtime, yang menggunakannya untuk mencari objek yang dikongsi semasa runtime. Pilihan -rpath juga digunakan apabila mencari objek yang dikongsi yang diperlukan oleh objek yang dikongsi secara jelas termasuk dalam pautan; lihat penerangan pilihan -rpath-link . Jika -rpath tidak digunakan ketika menghubungkan ELF yang boleh dieksekusi, kandungan pembolehubah persekitaran "LD_RUN_PATH" akan digunakan jika ditetapkan.

Pilihan -rpath juga boleh digunakan pada SunOS. Secara lalai, pada SunOS, penghubung akan membentuk patch carian runtime daripada semua pilihan -L yang diberikan. Sekiranya pilihan -rpath digunakan, laluan carian runtime akan dibentuk secara eksklusif menggunakan pilihan -rpath , mengabaikan pilihan -L . Ini berguna apabila menggunakan gcc, yang menambah banyak -L pilihan yang mungkin berada pada sistem fail yang dipasangNFS.

Untuk keserasian dengan penghubung ELF yang lain, jika pilihan -R diikuti dengan nama direktori, bukan nama fail, ia dianggap sebagai pilihan -rpath .

-rrath-link DIR

Apabila menggunakan ELF atau SunOS, satu perpustakaan yang dikongsi mungkin memerlukan yang lain. Ini berlaku apabila pautan "ld-shared" merangkumi pustaka bersama sebagai salah satu fail input.

Apabila penghubung bertemu seperti ketergantungan apabila melakukan pautan yang tidak dikongsi, tidak boleh dipindahkan, ia akan secara automatik cuba mencari perpustakaan yang dikehendaki yang dikehendaki dan memasukkannya ke dalam pautan, jika ia tidak disertakan dengan jelas. Dalam hal sedemikian, pilihan -rpath-link menentukan set pertama direktori untuk mencari. Pilihan -rpath-link boleh menentukan jujukan nama direktori sama ada dengan menentukan senarai nama yang dipisahkan oleh titik, atau dengan muncul beberapa kali.

Pilihan ini harus digunakan dengan berhati-hati kerana ia mengatasi laluan carian yang mungkin sukar dikompilasi ke perpustakaan bersama. Dalam hal sedemikian, kemungkinan untuk menggunakan laluan carian yang tidak sengaja daripada yang menghubungkan penghubung runtime akan dilakukan.

Pengantara menggunakan laluan carian berikut untuk mencari perpustakaan kongsi yang dikehendaki.

1.

Sebarang direktori yang ditentukan oleh pilihan -rpath-link .

2.

Sebarang direktori yang ditentukan oleh pilihan -rpath . Perbezaan di antara -rpath dan -rpath-link ialah direktori yang ditentukan oleh opsyen -rpath dimasukkan dalam laku dan digunakan semasa runtime, sedangkan pilihan -rpath-link hanya berkesan pada masa pautan. Ia hanya untuk penutur asli sahaja.

3.

Pada sistem ELF, jika pilihan -rpath dan "rpath-link" tidak digunakan, cari kandungan pembolehubah persekitaran "LD_RUN_PATH". Ia hanya untuk penutur asli sahaja.

4.

Pada SunOS, jika pilihan -rpath tidak digunakan, cari apa-apa direktori yang ditentukan menggunakan pilihan -L .

5.

Untuk penaut asal, kandungan pembolehubah persekitaran "LD_LIBRARY_PATH".

6.

Bagi penaung ELF asli, direktori dalam "DT_RUNPATH" atau "DT_RPATH" perpustakaan kongsi digunakan mencari perpustakaan kongsi yang diperlukan olehnya. Penyertaan "DT_RPATH" diabaikan jika penyertaan "DT_RUNPATH" wujud.

7.

Direktori lalai, biasanya / lib dan / usr / lib .

8.

Untuk penaut asli pada sistem ELF, jika fail /etc/ld.so.conf ada, senarai direktori yang terdapat dalam fail itu.

Jika perpustakaan yang dikehendaki yang dikehendaki tidak ditemui, penghubung akan mengeluarkan amaran dan teruskan dengan pautan tersebut.

-shared

-Bebar

Buat perpustakaan kongsi. Ini pada masa ini hanya disokong pada platform ELF, XCOFF dan SunOS. Pada SunOS, penaut akan secara automatik membuat pustaka bersama jika pilihan -e tidak digunakan dan terdapat simbol yang tidak ditentukan dalam pautan.

--sort-common

Pilihan ini memberitahu ld untuk menyusun simbol-simbol yang sama mengikut saiz apabila ia meletakkannya di bahagian output yang sesuai. Mula-mula datang semua simbol satu byte, kemudian semua dua byte, kemudian semua empat byte, dan kemudian segala-galanya. Ini adalah untuk mengelakkan jurang antara simbol kerana kekangan penjajaran.

--split-by-file [ size ]

Sama seperti --split-by-reloc tetapi mencipta bahagian keluaran baru untuk setiap fail input apabila saiz dicapai. saiz default kepada saiz 1 jika tidak diberikan.

--split-by-reloc [ count ]

Cuba mencipta bahagian tambahan dalam fail output supaya tiada bahagian keluaran tunggal dalam fail mengandungi lebih banyak daripada relokasi kiraan . Ini berguna apabila menghasilkan fail yang boleh dimuat turun untuk memuat turun ke dalam kernel masa sebenar dengan format fail objek COFF; sejak COFFcannot mewakili lebih daripada 65535 penempatan semula dalam seksyen tunggal. Ambil perhatian bahawa ini akan gagal berfungsi dengan format fail objek yang tidak menyokong bahagian sewenang-wenangnya. Penghubung tidak akan memisahkan bahagian input individu untuk pengedaran semula, jadi jika seksyen input tunggal mengandungi lebih daripada relokasi kiraan satu bahagian output akan mengandungi banyak relokasi. kiraan mungkir kepada nilai 32768.

--stats

Kiraan dan paparkan statistik mengenai operasi penghubung, seperti masa pelaksanaan dan penggunaan memori.

- format berstruktur

Untuk sesetengah sasaran, output ld adalah berbeza dalam beberapa cara dari output beberapa penyambung yang sedia ada. Tukar suis ini memohon untuk menggunakan format tradisional sebaliknya.

Sebagai contoh, pada SunOS, ld menggabungkan entri pendua dalam jadual rentetan simbol. Ini dapat mengurangkan saiz fail output dengan maklumat debugging penuh sebanyak 30 peratus. Malangnya, program SunOS "dbx" tidak dapat membaca program yang dihasilkan ("gdb" tidak mempunyai masalah). Suis format format- ld memberitahu ld untuk tidak menggabungkan penyalin pendua.

- seksyen mulai-awal = org

Cari seksyen dalam fail output pada alamat mutlak yang diberikan oleh org . Anda boleh menggunakan pilihan ini sebanyak yang diperlukan untuk mencari beberapa bahagian dalam baris arahan. org mesti menjadi integer heksadesimal tunggal; untuk keserasian dengan penghubung lain, anda boleh meninggalkan 0x utama yang biasanya dikaitkan dengan nilai heksadesimal. Nota: tidak boleh ada ruang putih di antara nama bahagian, tanda sama (`` = ''), dan org .

-Ts org

-Tdata org

-Teks org

Gunakan org sebagai alamat permulaan untuk --- masing-masing --- "bss", "data", atau "teks" segmen fail output. org mesti menjadi integer heksadesimal tunggal; untuk keserasian dengan penghubung lain, anda boleh meninggalkan 0x utama yang biasanya dikaitkan dengan nilai heksadesimal.

--dll-verbose

- kata

Paparkan nombor versi untuk ld dan senaraikan emulasi pautan yang disokong. Paparkan fail input yang boleh dan tidak boleh dibuka. Paparkan skrip penghubung yang digunakan oleh penghubung.

--Version-script = version-scriptfile

Tentukan nama skrip versi kepada penghubung. Ini biasanya digunakan apabila mencipta perpustakaan berkongsi untuk menentukan maklumat tambahan mengenai heirarki versi untuk perpustakaan yang diwujudkan. Pilihan ini hanya bermakna pada platform ELF yang menyokong perpustakaan berkongsi.

--warn-common

Amaran apabila simbol umum digabungkan dengan simbol biasa atau dengan definisi simbol. Pautan Unix membenarkan amalan ini agak ceroboh, tetapi pautan pada beberapa sistem operasi lain tidak. Pilihan ini membolehkan anda mencari masalah yang berpotensi daripada menggabungkan simbol global. Malangnya, sesetengah perpustakaan C menggunakan amalan ini, jadi anda mungkin mendapat beberapa amaran mengenai simbol-simbol di dalam perpustakaan serta dalam program anda.

Terdapat tiga jenis simbol global, digambarkan di sini oleh contoh C:

int i = 1;

Definisi, yang masuk dalam seksyen data yang diisytiharkan pada fail output.

extern int i;

Rujukan tidak jelas, yang tidak memperuntukkan ruang. Harus ada definisi atau lambang umum bagi pembolehubah di suatu tempat.

int i;

Simbol yang biasa. Sekiranya terdapat hanya simbol biasa (satu atau lebih) untuk pemboleh ubah, ia akan masuk ke dalam kawasan data yang tidak dinamakan fail output. Penyambung menggabungkan beberapa simbol umum untuk pembolehubah yang sama ke dalam simbol tunggal. Jika mereka mempunyai saiz yang berbeza, ia memilih saiz terbesar. Penghubung itu menjadikan simbol biasa menjadi perisytiharan, jika terdapat definisi pembolehubah yang sama.

Pilihan - pilihan umum boleh menghasilkan lima jenis amaran. Setiap amaran terdiri daripada sepasang garis: yang pertama menerangkan simbol yang baru ditemui, dan yang kedua menggambarkan simbol sebelumnya yang ditemui dengan nama yang sama. Satu atau kedua-dua simbol ini akan menjadi simbol biasa.

1.

Mengubah simbol biasa menjadi rujukan, kerana sudah ada definisi simbol.

(): amaran: biasa dari ` 'ditindih oleh takrif (): amaran: ditakrifkan di sini

2.

Menukar simbol yang biasa menjadi rujukan, kerana definisi kemudian untuk simbol itu ditemui. Ini adalah sama dengan kes sebelumnya, kecuali simbol-simbol itu ditemui dalam susunan yang berbeza.

(): amaran: definisi ` 'mengatasi umum (): amaran: umum ada

3.

Menggabungkan simbol yang sama dengan simbol biasa bersaiz yang sama sebelumnya.

(): amaran: berbilang umum dari ` ' (): amaran: umum terdahulu disini

4.

Menggabungkan simbol biasa dengan simbol biasa yang lebih besar sebelum ini.

(): amaran: biasa dari ` 'yang ditindih oleh lebih besar (): amaran: yang lebih besar adalah di sini

5.

Menggabungkan simbol biasa dengan simbol biasa yang lebih kecil sebelumnya. Ini adalah sama dengan kes sebelumnya, kecuali simbol-simbol itu ditemui dalam susunan yang berbeza.

(): amaran: biasa dari ` 'mengatasi lebih umum (): amaran: lebih umum adalah di sini

- pembina-pembina

Amaran jika mana-mana pembina global digunakan. Ini hanya berguna untuk beberapa format fail objek. Untuk format seperti COFF atau ELF, penghubung tidak dapat mengesan penggunaan pembina global.

--warn-multiple-gp

Amaran jika banyak nilai penunjuk global diperlukan dalam fail output . Ini hanya bermakna bagi pemproses tertentu, seperti Alpha. Khususnya, sesetengah pemproses meletakkan pemalar bernilai tinggi dalam bahagian khas. Daftar khas (penunjuk global) menunjuk ke tengah-tengah bahagian ini, supaya pemalar boleh dimuatkan dengan cekap melalui mod alamat relatif berdaftar pangkalan. Oleh kerana offset dalam mod relatif mendatar asas tetap dan relatif kecil (contohnya, 16 bit), ini mengehadkan saiz maksimum kolam berterusan. Oleh itu, dalam program besar, ia sering diperlukan untuk menggunakan pelbagai nilai penunjuk global untuk dapat menangani semua pemalar yang mungkin. Opsyen ini menyebabkan amaran dikeluarkan apabila kes ini berlaku.

--warn-once

Hanya memberi amaran sekali untuk setiap simbol yang tidak ditentukan, dan bukannya sekali setiap modul yang merujuknya.

--warn-section-align

Amaran jika alamat seksyen output diubah kerana penyelarasan. Biasanya, penjajaran akan ditetapkan oleh bahagian input. Alamat hanya akan ditukar jika tidak dinyatakan dengan jelas; iaitu, jika arahan "SEKSYEN" tidak menentukan alamat permulaan bagi bahagian itu.

--whole-archive

Untuk setiap arkib yang disebutkan pada baris arahan selepas pilihan --whole-archive , masukkan setiap fail objek dalam arkib dalam pautan, dan bukannya mencari arkib untuk fail objek yang diperlukan. Ini biasanya digunakan untuk menghidupkan fail arkib ke dalam perpustakaan yang dikongsi, memaksa setiap objek dimasukkan ke dalam perpustakaan kongsi yang terhasil. Pilihan ini boleh digunakan lebih daripada satu kali.

Dua nota apabila menggunakan opsyen ini dari gcc: Pertama, gcc tidak tahu tentang pilihan ini, jadi anda perlu menggunakan -Wl, -laku-arsip . Kedua, jangan lupa untuk menggunakan -Wl, -dengan keseluruhan arsip selepas senarai arsip anda, kerana gcc akan menambah senarai arsipnya sendiri ke pautan anda dan anda mungkin tidak mahu bendera ini memberi kesan kepada mereka juga.

- simbol wain

Gunakan fungsi bungkus untuk simbol . Sebarang rujukan yang tidak jelas kepada simbol akan diselesaikan kepada "__ wrap_symbol". Sebarang rujukan yang tidak jelas kepada "__real_symbol" akan diselesaikan menjadi simbol .

Ini boleh digunakan untuk menyediakan pembungkus untuk fungsi sistem. Fungsi pembungkus harus dipanggil "__wrap_symbol". Jika ingin memanggil fungsi sistem, ia harus memanggil "__ real_symbol".

Berikut adalah contoh remeh:

tidak sah * __wrap_malloc (int c) {printf ("malloc dipanggil dengan% ld \ n", c); kembali __real_malloc (c); }

Jika anda menghubungkan kod lain dengan fail ini dengan menggunakan --wrap malloc , maka semua panggilan ke "malloc" akan memanggil fungsi "__wrap_malloc" sebaliknya. Panggilan untuk "__real_malloc" dalam "__wrap_malloc" akan memanggil fungsi sebenar "malloc".

Anda mungkin ingin memberikan fungsi "__real_malloc" juga, supaya pautan tanpa pilihan --pilihan akan berjaya. Jika anda melakukan ini, anda tidak sepatutnya meletakkan definisi "__ real_malloc" dalam fail yang sama dengan "__wrap_malloc"; jika anda lakukan, penghimpun boleh menyelesaikan panggilan sebelum penyambung mempunyai peluang untuk membungkusnya ke "malloc".

--buat-baru-dtags

--disable-new-dtags

Penghubung ini boleh membuat tag dinamik baru dalam ELF. Tetapi sistem ELF yang lebih tua mungkin tidak memahami mereka. Jika anda menentukan - boleh-baru-dtags , tag dinamik akan dibuat seperti yang diperlukan. Jika anda menentukan --disable-new-dtags , tiada tag dinamik baru akan dibuat. Secara lalai, teg dinamik baru tidak dibuat. Ambil perhatian bahawa pilihan tersebut hanya tersedia untuk sistem ELF.

Linker PE i386 menyokong pilihan -shared , yang menyebabkan keluaran menjadi perpustakaan dinamik (DLL) yang dinamik dan tidak dapat dijalankan secara normal. Anda harus menamakan output "* .dll" apabila anda menggunakan pilihan ini. Selain itu, linker menyokong sepenuhnya fail "* .def" standard, yang mungkin ditentukan pada baris arahan linker seperti file objek (sebenarnya, ia harus mendahului arkib ia mengeksport simbol dari, untuk memastikan bahawa mereka dapat dihubungkan, seperti fail objek biasa).

Sebagai tambahan kepada pilihan umum untuk semua sasaran, linker i386 PE menyokong pilihan baris perintah tambahan yang khusus untuk target PE i386. Pilihan yang mengambil nilai boleh dipisahkan dari nilai mereka dengan sama ada ruang atau tanda sama.

--add-stdcall-alias

Sekiranya diberikan, simbol dengan stdcall akhiran (@ nn ) akan dieksport sebagai-dan juga dengan akhiran dilucutkan.

- file fail asas

Gunakan fail sebagai nama fail untuk menyimpan alamat asas semua relokasi yang diperlukan untuk menjana DLL dengan dlltool .

--dll

Buat DLL dan bukan laku laksana tetap. Anda juga boleh menggunakan atau berkongsi "PERPUSTAKAAN" dalam fail ".def" yang diberikan.

--penyediaan-stdcall-fixup

--disable-stdcall-fixup

Jika pautan itu menemui simbol yang tidak dapat diselesaikan, ia akan cuba melakukan `` linking fuzzy '' dengan mencari simbol lain yang jelas yang berbeza hanya dengan format nama simbol (cdecl vs stdcall) dan akan menyelesaikan simbol tersebut dengan menghubungkan kepada perlawanan. Sebagai contoh, simbol "_foo" yang tidak jelas mungkin dikaitkan dengan fungsi "_foo @ 12", atau lambang yang tidak jelas "_bar @ 16" mungkin dikaitkan dengan fungsi "_bar". Apabila penyambung melakukan ini, ia mencetak amaran, kerana biasanya ia sepatutnya gagal dihubungkan, tetapi kadang-kadang mengimport perpustakaan yang dihasilkan dari dll pihak ketiga mungkin memerlukan ciri ini dapat digunakan. Jika anda menyatakan - pembungkusan yang boleh digunakan , ciri ini didayakan sepenuhnya dan amaran tidak dicetak. Jika anda menentukan --disable-stdcall-fixup , ciri ini dinyahdayakan dan ketidakpadanan itu dianggap sebagai ralat.

- eksport-semua-simbol

Sekiranya diberikan, semua simbol global dalam objek yang digunakan untuk membina DLL akan dieksport oleh DLL. Perhatikan bahawa ini adalah lalai jika terdapat sebaliknya tidak akan menjadi sebarang simbol yang dieksport. Apabila simbol secara eksplisit dieksport melalui fail DEF atau secara eksplisit dieksport melalui atribut fungsi, lalai adalah untuk tidak mengeksport apa-apa lagi kecuali pilihan ini diberikan. Perhatikan bahawa simbol "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12", dan "impure_ptr" tidak akan dieksport secara automatik. Selain itu, simbol yang diimport dari DLL lain tidak akan dieksport semula, dan juga simbol-simbol yang menentukan susunan dalaman DLL seperti yang bermula dengan "_head_" atau berakhir dengan "_iname". Di samping itu, tiada simbol dari "libgcc", "libstd ++", "libmingw32", atau "crtX.o" akan dieksport. Simbol-simbol yang namanya bermula dengan "__rtti_" atau "__builtin_" tidak akan dieksport, untuk membantu dengan C ++ DLL. Akhir sekali, terdapat senarai simbol cygwin-private yang tidak dieksport (jelasnya, ini berlaku ketika membina DLL untuk sasaran cygwin).

Ini termasuk 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 ", dan" lingkungan ".

- lambang simbol , lambang , ...

Menentukan senarai simbol yang tidak seharusnya dieksport secara automatik. Nama simbol boleh dibatasi oleh koma atau titik.

--exclude-libs lib , lib , ...

Menentukan senarai arkib perpustakaan yang simbolnya tidak seharusnya dieksport secara automatik. Nama perpustakaan boleh dibatasi oleh koma atau titik. Menentukan "--exclude-libs ALL" tidak memasukkan simbol di semua perpustakaan arkib dari eksport automatik. Simbol-simbol yang disenaraikan secara tersurat dalam fail .def masih dieksport, tanpa mengira pilihan ini.

- penyelarasan fail

Tentukan penjajaran fail. Seksyen dalam fail akan selalu bermula pada offset fail yang gandaan nombor ini. Lalai ini menjadi 512.

- simpanan rizab

- rizab rizab , komit

Tentukan jumlah memori untuk simpanan (dan komit pilihan) untuk digunakan sebagai timbunan untuk program ini. Lalai adalah 1Mb reserved, 4K komited.

- nilai asas gambar

Gunakan nilai sebagai alamat asas program anda atau dll. Ini adalah lokasi ingatan terendah yang akan digunakan apabila program atau dll anda dimuatkan. Untuk mengurangkan keperluan untuk memindahkan dan memperbaiki prestasi dsb anda, masing-masing harus mempunyai alamat pangkalan yang unik dan tidak bertindih dengan mana-mana dll lain. Lalai adalah 0x400000 untuk executable, dan 0x10000000 untuk dll.

--kan-pada

Sekiranya diberikan, akhiran stdcall (@nn) akan dilucutkan dari simbol sebelum ia dieksport.

- nilai-imej-imej-versi

Menetapkan bilangan utama `` versi imej ''. Lalai kepada 1.

- nilai versi-os-os

Menetapkan bilangan utama `` versi os ''. Lalai ke 4.

- nilai versi subskription -major

Menetapkan nombor utama 'versi subsistem' '. Lalai ke 4.

- nilai versi imej-minor

Menetapkan bilangan kecil `` versi imej ''. Lalai ke 0.

- Nilai minor-os-versi

Menetapkan bilangan kecil versi `` os ''. Lalai ke 0.

- nilai minim-subsistem

Menetapkan bilangan kecil 'versi subsistem' '. Lalai ke 0.

- fail output-def

Penautan akan membuat fail fail yang akan mengandungi fail DEF yang bersamaan dengan DLL yang menjana pautan. Fail DEF ini (yang sepatutnya dipanggil "* .def") boleh digunakan untuk membuat perpustakaan import dengan "dlltool" atau boleh digunakan sebagai rujukan kepada simbol-simbol secara automatik atau tersirat dieksport.

- fail luar-implib

Penautan akan membuat fail fail yang akan mengandungi lib import yang sepadan dengan DLL yang menjana pautan. Lib import ini (yang harus dipanggil "* .dll.a" atau "* .a" boleh digunakan untuk menghubungkan klien terhadap DLL yang dijana; tingkah laku ini memungkinkan untuk melangkau langkah penciptaan perpustakaan import "dlltool" yang terpisah.

--enable-auto-image-base

Secara automatik memilih asas imej untuk DLL, kecuali satu ditentukan menggunakan hujah "- gambar-asas". Dengan menggunakan hash yang dihasilkan dari nama dll untuk membuat pangkalan imej yang unik untuk setiap DLL, perlanggaran dalam-memori dan relokasi yang boleh melengahkan pelaksanaan program dihindari.

--disable-auto-image-base

Jangan secara automatik menghasilkan asas imej yang unik. Sekiranya tiada dasar imej yang ditentukan pengguna ("--image-base") maka gunakan lalai platform.

- rentetan awalan -dll-carian

Apabila menghubungkan secara dinamik ke dsb tanpa pustaka import, cari " .dll" dalam pilihan untuk "lib .dll". Tingkah laku ini memudahkan perbezaan antara DLL yang dibina untuk pelbagai `subplatforms ': native, cygwin, uwin, pw, dll. Sebagai contoh, cygwin DLL biasanya menggunakan" --dll-search-prefix = cyg ".

--memasukkan auto-import

Lakukan pautan "_symbol" kepada "__imp__symbol" untuk impor DATA dari DLL, dan buat simbol penambahan yang diperlukan semasa membina perpustakaan import dengan mereka DATAexports. Ini secara amnya akan 'hanya berfungsi' --- tetapi kadang-kadang anda mungkin melihat mesej ini:

"Variabel '' tidak boleh diimport secara automatik. Sila baca dokumentasi untuk" --enable-auto-import "ld untuk butiran."

Mesej ini berlaku apabila beberapa ungkapan (sub) mengakses alamat yang akhirnya diberikan oleh jumlah dua pemalar (Jadual import Win32 hanya membenarkan satu). Contoh-contoh di mana ini mungkin berlaku termasuk mengakses kepada ahli-ahli pemboleh ubah struktur yang diimport dari DLL, serta menggunakan indeks yang berterusan ke dalam pembolehubah array yang diimport dari DLL. Mana-mana pembolehubah pelbagai (array, struktur, panjang, dll) boleh mencetuskan keadaan ralat ini. Bagaimanapun, tanpa mengira jenis data yang tepat bagi pemboleh ubah yang dieksport yang menyalahi undang-undang, ia akan selalu mengesannya, mengeluarkan amaran, dan keluar.

Terdapat beberapa cara untuk menangani kesukaran ini, tanpa mengira jenis data pemboleh ubah yang dieksport:

Salah satu cara ialah menggunakan suis reloen-runtime-pseudo-reloc. Ini meninggalkan tugas menyesuaikan rujukan dalam kod klien anda untuk persekitaran runtime, jadi kaedah ini hanya berfungsi apabila enjin runtime menyokong ciri ini.

Penyelesaian kedua adalah untuk memaksa salah satu 'pemalar' menjadi pemboleh ubah --- iaitu, tidak diketahui dan tidak dapat dioptimumkan pada masa penyusunan. Untuk array, terdapat dua kemungkinan: a) membuat indeks (alamat array) pembolehubah, atau b) membuat indeks 'malar' pembolehubah. Oleh itu:

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

atau

ekstern jenis extern_array []; extern_array [1] -> {volatile int t = 1; extern_array [t]}

Untuk struct (dan kebanyakan jenis data multiword lain) satu-satunya pilihan adalah membuat struct itu sendiri (atau panjang, atau ...) pembolehubah:

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

atau

extern_ll jauh panjang; extern_ll -> {longgar long long * local_ll = & extern_ll; * local_ll}

Kaedah ketiga menangani kesukaran ini ialah meninggalkan 'import auto' untuk simbol yang menyinggung perasaan dan menandakannya dengan "__declspec (dllimport)". Walau bagaimanapun, dalam amalan yang memerlukan menggunakan #define masa kompilasi untuk menunjukkan sama ada anda sedang membina DLL, membina kod klien yang akan dihubungkan dengan DLL, atau hanya membina / menghubungkan ke perpustakaan statik. Dalam membuat pilihan antara pelbagai kaedah untuk menyelesaikan masalah 'alamat langsung dengan masalah mengimbangi', anda harus mempertimbangkan penggunaan dunia yang biasa:

Asal:

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

Penyelesaian 1:

--foo.h extern int arr []; --foo.c #include "foo.h" void main (int argc, char ** argv) {/ * Workaround ini adalah untuk win32 dan cygwin; jangan "mengoptimumkan" * / tidak menentu int * parr = arr; printf ("% d \ n", parr [1]); }

Penyelesaian 2:

- foo.h / * Catatan: auto-eksport diandaikan (tidak ada __declspec (dllexport)) * / #if (ditentukan (_WIN32) || ditakrifkan (__ 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 yang keempat untuk mengelakkan masalah ini ialah kod semula perpustakaan anda untuk menggunakan antara muka fungsian dan bukannya antara muka data untuk pembolehubah yang menyinggung (contohnya set_foo () dan get_foo () fungsi aksesori).

--disable-auto-import

Jangan cuba melakukan sophisticalted linking "_symbol" ke "__imp__symbol" untuk DATAimports dari DLLs.

--enable-runtime-pseudo-reloc

Sekiranya kod anda mengandungi ungkapan yang diterangkan dalam bahagian auto-import - iaitu, DATAimports dari DLL dengan penolakan bukan-nol, suis ini akan mewujudkan vektor 'relokasi pseudo runtime' yang boleh digunakan oleh persekitaran runtime untuk menyesuaikan rujukan kepada data sedemikian dalam kod klien anda.

--disable-runtime-pseudo-reloc

Jangan buat penempatan semula palsu untuk import DATA mengimbangi bukan-nol dari DLL. Ini adalah lalai.

--pengguna-tambahan-debug

Tunjukkan maklumat debug tambahan yang berkaitan dengan simbol auto-import thunking.

- penjajaran-penjajaran

Tetapkan penjajaran bahagian. Bahagian-bahagian dalam memori akan sentiasa bermula pada alamat yang berganda nombor ini. Lalai ke 0x1000.

- simpanan simpanan

- Rizab stack , komit

Tentukan jumlah memori untuk simpanan (dan komit pilihan) untuk digunakan sebagai timbunan untuk program ini. Lalai adalah 2Mb reserved, 4K komited.

--subsystem yang

--subsystem yang : utama

--subsystem yang : utama . kecil

Menentukan subsistem di mana program anda akan dilaksanakan. Nilai undang-undang yang "asli", "tingkap", "konsol", dan "posix". Anda juga boleh menetapkan versi subsistem juga.

Penting: Gunakan arahan lelaki ( % man ) untuk melihat bagaimana arahan digunakan pada komputer tertentu anda.