Линукс / Unix Тушаал: Id

NAME

ld - LD ашиглах , GNU холбоосыг ашиглах

Синнассис

ld [ options ] objfile ...

ТОДОРХОЙЛОЛ

Ld нь хэд хэдэн обьект болон архивын файлыг нэгтгэж, тэдгээрийн өгөгдлийг нүүлгэн шилжүүлж, тэмдэглэгээний лавлах холболтуудыг холбодог. Ихэвчлэн програмыг хөрвүүлэх сүүлийн алхам нь ихэвчлэн ld -ийг ажиллуулах явдал юм.

ld нь холболтын үйл явцын талаар тодорхой бөгөөд бүрэн хяналт тавихын тулд AT & T-ийн Link Editor-ийн Command Translation синтаксын superset-д бичигдсэн Linker Command Language файлуудыг хүлээн авдаг.

Энэ хүний ​​хуудас тушаалын хэлийг тайлбарлахгүй; "info" дахь ld оруулгыг үзнэ үү, эсвэл гарын авлагын ld: GNU холбоосыг, тушаалын хэл дээрх бүрэн мэдээлэл болон ГНУ холбогчын бусад талуудад хандана уу.

Ld-ийн энэ хувилбар нь обьект файл дээр ажиллах BFD-ийн ерөнхий сангуудыг ашигладаг. Энэ нь ld нь олон төрлийн форматтай объект файлуудыг унших, нэгтгэх, бичих боломжийг олгодог --- жишээлбэл, COFF эсвэл "a.out". Өөр өөр форматтай файлын файлыг үүсгэхийн тулд өөр өөр форматтай байж болно.

Үүнээс гадна уян хатан чанараас гадна GNU холбогч нь оношлогооны мэдээллээр хангах бусад холбоосуудаас илүү ашигтай байдаг. Олон холбогч алдаатай тулгарсан даруйд цаазаар авах ялыг халах; Боломжтой бол ld үргэлжлүүлэн ажиллуулж, бусад алдааг (зарим тохиолдолд алдаатай ч гэсэн гаралтын файл олж авах) боломжийг олгодог.

GNU холбогч ld нь өргөн хүрээний нөхцөл байдлыг хамрах бөгөөд бусад холбогчуудтай аль болох тохирч байх ёстой. Үүний үр дүнд та өөрийн зан үйлийг хянах олон сонголт бий.

OPTIONS

Холбогч нь тушаалын мөрийн олон тооны хувилбарыг дэмждэг боловч бодит практик дээр цөөхөн нь ямар нэгэн тодорхой нөхцөлд ашиглагддаг. Жишээлбэл, ld-ийн байнгын хэрэглээ нь стандарт Unix систем дээр стандарт Unix обьект файлуудыг холбох явдал юм. Ийм систем дээр "hello.o" файлыг холбох хэрэгтэй:

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

Энэ нь ld файлыг "/lib/crt0.o" файлыг "hello.o" болон "libc.a" номын сантай холбосон үр дүнг стандарт хайлтын сангаас гаргана. (Доорх -l тохируулгын талаар үзнэ үү.)

Ld уруу тушаалын мөрийн тохируулгуудын заримыг тушаалын мөрөнд дурын цэгээс зааж өгч болно. Гэхдээ, -l эсвэл -T зэрэг файлуудтай холбоотой сонголтууд нь тушаалын мөрөнд опционыг обьект файл болон бусад файлын тохируулгуудтай харьцуулах цэгийг уншихад хүргэдэг. Өөр өөр аргументтай файлын бус файлуудыг давтах нь цаашдын нөлөө байхгүй эсвэл өмнөх сонголтоороо (тушаалын мөрөнд зүүн талд байгаа тэдгээрийг оруулаад) дарах болно. Илүү тодорхой утгатай байж болох хувилбаруудыг дор тайлбарлав.

Опционы бус аргументууд нь хоорондоо холбоотой объектын файлууд эсвэл архивууд юм. Тэд объект файлын нэмэлт өгөгдөл ба түүний аргументаас хамааралгүй байж болохоос гадна командын мөрийн сонголтоор дагалдан тэдгээрийг дагаж мөрдөж болно.

Ихэнхдээ холбогч нь хамгийн багадаа нэг обьект файлтай ажилладаг боловч хоёртын оролтын файлуудын бусад хэлбэрүүдийг -l , -R болон скриптийг команд хэлээр зааж өгч болно. Хэрэв хоёртын файлыг бүгдийг нь зааж өгөөгүй бол холбогч нь ямар ч гаралтыг үүсгэдэггүй бөгөөд ямар ч оролтын файлыг үүсгэдэггүй.

Хэрэв холбогч нь обьект файлын форматыг таних боломжгүй бол энэ нь холбогч скрипт гэж тооцох болно. Энэ аргаар тодорхойлогдсон скрипт нь холбоосод ашигласан гол холбогч скриптийг (анхдагч холбогч скрипт эсвэл -T ) ашиглан зааж өгсөн скриптийг нэмдэг. Энэ функц нь холбоосыг обьект эсвэл архив мэт харагдах файлын эсрэг холбоосыг холбохыг зөвшөөрдөг боловч үнэндээ зөвхөн зарим тэмдэгтийн утгыг тодорхойлдог, эсвэл "INPUT" эсвэл "GROUP" -г бусад объектуудыг дуудах боломжийг олгодог. Энэ аргаар скриптийг зааж өгөх нь үндсэн холбогч скриптийг нэмэгдүүлдэг гэдгийг анхаараарай; -T сонголтыг анхдагч холбогч скриптийг бүхлээр нь солих хэрэгтэй.

Нэрс нь нэг үсэг байгаа сонголтуудын хувьд сонголтуудын нэмэлт өгөгдлүүд нь тохирох үсэгийг ашиглахгүй байх эсвэл тэдгээрийг шаарддаг тохируулгын дараа тусдаа нэмэлт аргументаар өгөх ёстой.

Нэрийн олон үсэг байгаа сонголтуудын хувьд, нэг зураас эсвэл хоёулаа опционы нэрээс өмнө байж болно; Жишээ нь -trace-symbol ба -trace-symbol нь тэнцүү юм. Тэмдэглэл - Энэ дүрэмд нэг онцгой тохиолдол байна. Бага үсгээр эхэлж байгаа олон үсгийн тохируулгууд нь зөвхөн хоёр зураасаар урагшлах боломжтой байдаг. Энэ нь -o сонголттой төөрөгдөлийг багасгах явдал юм. Жишээ нь - үйлдлийн файлын нэр нь гаралтын файлын нэрийг ид шидээр үүсгэдэг бол --omagic нь NMAGIC тугийг гаралтанд тохируулж өгдөг.

Олон үсэгний сонголтуудтай холбоотой нэмэлт өгөгдлүүд нь тохируулгын нэрээс equals тэмдэгээр тусгаарлагдсан байх эсвэл тэдгээрийг шаарддаг тохируулгын дараа тусдаа нэмэлт өгөгдөл болгон өгөх ёстой. Жишээ нь: - face -trace-тэмдэгт ба --trace-symbol = foo нь тэнцүү юм. Олон үсэгний сонголтуудын нэрний товчлолыг хүлээн авдаг.

Тэмдэглэл - холбогчийг хөрвүүлэгч драйвераар дамжуулан (жишээ нь gcc ) шууд бус байдлаар ажиллуулж байгаа бол бүх холбогч тушаалын мөрийн тохируулгууд -wl -ээр урагшлах ёстой (эсвэл хөрвүүлэгч драйверийн хувьд хамаатай юу байх ёстой):

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

Энэ нь чухал юм, өөрөөр хэлбэл хөрвүүлэгч драйвер програм нь холбогч сонголтыг дуугүй орхиж болох бөгөөд ингэснээр муу холбоос үүсгэдэг.

GNU холбогчоор хүлээн зөвшөөрсөн ерөнхий командын шугамын сэлгүүрийг доор үзүүлэв:

түлхүүр үг

Энэ тохируулга нь HP / UX-ийн нийцтэй байдлыг дэмждэг. Түлхүүр үгний аргумент нь мөр архив , хуваалцсан , эсвэл анхдагч байх ёстой. -дараах нь функциональ хэлбэрээр -Bstatic ба бусад хоёр түлхүүр үг нь функционалиар -Bdynamic- тэй адил байна. Энэ сонголтыг хэд хэдэн удаа ашиглаж болно.

- Архитектур

- architectural = архитектур

Ld-н одоогийн хувилбарт энэ тохируулга нь зөвхөн Intel 960 архитектурын хувьд ашигтай байдаг. Энэ ld тохиргоонд архитектурын нэмэлт өгөгдөл нь 960 гэр бүлийн тодорхой архитектурыг тодорхойлдог бөгөөд зарим аргууд нь архивын сангаас хайх аргыг өөрчилж байдаг.

Ld-ийн ирээдүйн хувилбар бусад архитектурын гэр бүлийнхэнд адил төстэй ажиллагааг дэмжиж чаддаг .

-b оролтын хэлбэршилт

--format = оролтын хэлбэр

ld нь нэгээс илүү төрлийн обьект файлыг дэмждэг. Хэрэв таны ld ийм аргаар тохируулагдсан бол, та энэ тохируулгыг дагадаг оролтын файлыг binary форматын хувьд -b сонголтыг ашиглан тушаалыг ашиглаж болно. Хэдийгээр ld нь өөр нэг обьект форматыг дэмжихээр тохируулагдсан байсан ч гэсэн үүнийг ихэвчлэн тодорхой зааж өгөх шаардлагагүй боловч машин бүр дээр хамгийн ердийн хэлбэрийн анхдагч оруулга хэлбэрээр байхаар тохируулах хэрэгтэй гэж үздэг. Оролтын-хэлбэр нь BFD-ийн номын сангийн дэмждэг тодорхой форматын нэр юм. (Та objdump -i тушаалаар байгаа хоёртын хэлбэрүүдийг жагсааж болно.)

Хэрэв та ердийн хоёртын форматтай файлуудыг холбож байгаа бол энэ сонголтыг ашиглахыг хүсэж болох юм. Та бас -b форматыг форматаа өөрчлөхийн тулд (өөр хэлбэрийн объект файлуудыг холбох үед), -b хэлбэрийн оролт-форматыг тодорхой форматаар объект файлуудын бүлгийн өмнө оруулан ашиглаж болно.

Анхдагч форматыг "GNUTARGET" орчны хувьсагчаас авсан болно.

Та "TARGET" тушаал ашиглан скриптээс оролтын форматыг тодорхойлж болно.

-c MRI-commandfile

--mri-script = MRI-commandfile

МРRI-ийн үйлдвэрлэсэн холбоосуудтай нийцтэй байхын тулд GNU ld-ийн баримт бичгийн MRI Compatible Script Files хэсэг хэсэгт тодорхойлогдсон, хязгаарлагдмал тушаалын хэл дээр бичигдсэн скрипт файлуудыг хүлээн авна. MRI скрипт файлыг -c тохируулгатай танилцуулаарай; -l тохируулгыг ашиглан ерөнхий зориулалтын ld скрипт хэл дээр бичигдсэн линкийн скриптүүдийг ажиллуулах хэрэгтэй. Хэрэв MRI-cmdfile байхгүй бол ld -н ​​аль нэг -L тохируулгаар зааж өгсөн сан дотроос хайна .

-d

-dc

-dp

Эдгээр гурван сонголт нь тэнцүү юм; олон холбоосыг бусад холбоосуудтай харьцуулахад дэмждэг. Тэдгээр нь relocatable output файлыг зааж өгсөн (гэхдээ -r ) гэхэд тэд нийтлэг тэмдэгтийг зайгаар өгдөг. Скрипт "FORCE_COMMON_ALLOCATION" гэсэн тушаал нь адилхан нөлөөтэй.

-тухай оруулга

--entry = оруулга

Оруулсан анхдагч нэвтрэлтийн цэгээс биш програмыг эхэлж ажиллуулахад зориулсан илт тэмдэг хэрэглэнэ. Хэрэв нэрлэсэн тэмдэг байхгүй бол холбогч нь нэвтрэхийг тоогоор нь задлан шинжлэхийг оруулна. Энэ нь үндсэн хаягаар 10 дугаарт бичигдэх болно; та үндсэн 0хдоо 0x тэргүүлэх хэрэглэж болно, эсвэл тэргүүлэх 0 суурь 8).

-E

- экспорт-динамик

Динамикаар холбоотой гүйцэтгэгддэг файл үүсгэх үед бүх тэмдэглэгээг динамик тэмдэгт хүснэгтэд нэмнэ. Динамик тэмдэгийн хүснэгт нь ажиллуулах үеийн динамик объектуудаас харагдах тэмдэгтүүдийн багц юм.

Хэрэв та энэ сонголтыг ашиглахгүй байгаа бол динамик тэмдэгийн хүснэгт нь зөвхөн холбоосод дурдсан зарим динамик объектын нэрээр тодорхойлогддог эдгээр тэмдгүүдийг агуулна.

Хэрэв та динамик обьектыг ачаалахдаа "dlopen" -ийг ашигладаг бол зарим нэг динамик объектын оронд програмын тодорхойлсон тэмдэглэгээнүүд рүү буцаах хэрэгтэй болно. Хэрэв та програмыг өөрөө холбох үед энэ сонголтыг ашиглах хэрэгтэй болно.

Хэрэв та гаралтын форматыг дэмждэг бол динамик тэмдгийн хүснэгтэд ямар тэмдэгтүүдийг нэмэхийг хянахын тулд хувилбар скриптийг ашиглаж болно. - refersion-скриптийн тодорхойлолтыг @ref {VERSION} дээрээс үзнэ үү.

-EB

Big-endian объектыг холбох. Энэ нь анхдагч гаралтын форматад нөлөөлдөг.

-EL

Бага оврын объектуудыг холбох. Энэ нь анхдагч гаралтын форматад нөлөөлдөг.

-f

- Холбоо барих нэр

ELF хуваалцсан обьект үүсгэх үед тодорхой нэртэй дотоод DT_AUXILIARY талбарыг тохируулна. Энэ нь хуваалцсан обьектын билгийн хүснэгтийг хуваалцсан обьектийн нэрний хүснэгтэд туслах шүүлтүүр болгон ашигладаг динамик холбогчдод өгнө.

Хэрэв та хожим энэ шүүлтүүртэй холбоотой програмыг холбодог бол програмыг ажиллуулах үед динамик холбогч нь DT_AUXILIARY талбарыг харах болно. Хэрэв динамик холбогч нь шүүлтүүрийн объектоос ямар нэгэн тэмдэгийг шийдвэрлэдэг бол эхлээд хуваалцсан объектын нэрэнд тодорхойлолт байгаа эсэхийг шалгана. Хэрэв нэг нь байвал шүүлтүүрийн объектын тодорхойлолтыг ашиглана. Хуваалцсан объектын нэр байхгүй байна. Тиймээс хуваалцсан обьектын нэр нь зарим функцүүдийн альтернатив шийдэл, магадгүй дибаг хийх эсвэл машины онцгой гүйцэтгэлд зориулж хэрэглэгдэж болно.

Энэ сонголтыг нэгээс олон удаа зааж өгч болно. DT_AUXILIARY оруулгууд тушаалын мөрөнд гарч ирэх дарааллаар үүсэх болно.

нэр

- Шүүлтүүрийн нэр

ELF хуваалцсан обьект үүсгэх үед дотоод DT_FILTER талбарыг заасан нэрээр тохируулна. Энэ нь динамик холбоослагчийг хуваалцсан обьектийн билэгийн хүснэгтэд хуваалцсан обьектийн нэрний хүснэгтийн скрипт байдлаар ашиглагдах болно.

Хэрэв та хожим энэ шүүлтүүртэй холбоотой програмыг холбодог бол програмыг ажиллуулах үед динамик холбогч нь DT_FILTER талбарыг харах болно. Динамик холбогч нь шүүлтүүрийн объектын хүснэгтийн тэмдгийн дагуу тэмдгийг шийддэг боловч хуваалцсан обьектийн нэрэн дэх тодорхойлолтуудыг холбоно. Тиймээс шүүлтүүр объектын нэрний тэмдэглэгээг сонгоход шүүлтүүрийг ашиглаж болно.

Зарим хуучин холбоосууд нь оролтын болон гаралтын обьект файлыг хоёуланг нь зориулж обьект файл форматыг тодорхойлох зорилгоор эмхэтгэлийн хэрэгслүүдийн хэрэгсэлийг ашигласан. GNU холбогч нь энэ зорилгоор бусад арга замыг ашигладаг: -b , --format , --oformat тохируулгууд, холбоос скрипт дэх "TARGET" гэсэн тушаал, "GNUTARGET" орчны хувьсагчийн утгыг хэрэглэдэг. GNU холбогч нь ELF хуваалцсан объект үүсгээгүй тохиолдолд -F тохируулгыг хэрэгсэхгүй болно.

-Энэ нэр

ELF-ийн гүйцэтгэгддэг эсвэл хуваалцсан обьект үүсгэх үед, функцийн хаягийг DT_FINI-ийг тохируулснаар гүйцэтгэгдэнэ эсвэл хуваалцсан объектыг буулгаад NAME руу залгаарай. Анхдагчаар холбогч нь "_fini" дуудах функцийг ашигладаг.

-g

Харамсалтай нь. Бусад хэрэгсэлтэй нийцтэй байх.

-G үнэ цэнэ

--gpsize = утга

GP бүртгэлийн хэмжээг ашиглан оновчтой байх объектын дээд хэмжээг тохируулна. Энэ нь том болон жижиг объектуудыг өөр өөр хэсгүүдийг байрлуулахыг дэмждэг MIPS ECOFF гэх мэт объект файлын форматад зөвхөн ач холбогдолтой юм. Энэ нь бусад обьектийн файлын форматад зориулагдаагүй.

-h нэр

-soname = нэр

ELF хуваалцсан обьект үүсгэх үед дотоод DT_SONAME талбарыг заасан нэрээр тохируулна. Гүйцэтгэгч нь DT_SONAME талбартай хуваалцсан обьекттой холбоотой үед, дилер холбогч нь холбогчдод өгсөн файлын нэрийг ашиглахын оронд DT_SONAME талбараар тодорхойлсон хуваалцсан обьектыг дуудахыг оролдох болно.

-i

Өсөн нэмэгдэж буй холбоосыг гүйцэтгэх (option -r сонголттой адил).

-мөн нэр

ELF-ийн гүйцэтгэгддэг эсвэл хуваалцсан обьектыг үүсгэхдээ дуудлага хийгдсэн эсвэл хуваалцсан объект ачаалагдсан үед NAME дуудлага хийж DT_INIT-ийг функцийн хаягаар тохируулах замаар дуудна. Анхдагчаар холбогч нь "_init" дуудах функцийг ашигладаг.

-l архив

--library = архив

Архив файл архивыг холбохын тулд файлуудын жагсаалтыг нэмнэ. Энэ сонголтыг хэд хэдэн удаа ашиглаж болно. ld нь архивын хувьд "libarchive.a" гэсэн тохиолдолуудын хувьд өөрийн замын жагсаалтыг хайх болно.

Хуваалцсан сангуудыг дэмждэг системүүд дээр бас ".a" -с бусад өргөтгөлүүдтэй номын санг бас хайж болох юм. Ялангуяа, ELF болон SunOS системүүд дээр ".a" өргөтгөлтэйгээр хайхаасаа өмнө ".so" өргөтгөл бүхий сангаас лавлах хайх болно. Конвенцоор ".so" өргөтгөл нь хуваалцсан санг илэрхийлнэ.

Холбогч нь тушаалын мөрөнд зааж өгсөн байршилд зөвхөн нэг архив хайх болно. Хэрэв архив нь тушаалын мөрөнд архивын өмнө үзэгддэг зарим обьектод тодорхойгүй тэмдэгтийг тодорхойлдог бол холбогч нь архиваас тохирох файлыг агуулах болно. Гэсэн хэдий ч, командын мөрөн дээр гарч ирэх обьектод тодорхойгүй тэмдэг байхгүй нь холбогчийг архиваас хайхад хүргэхгүй.

Харилцагчийг ар араас хайж олон удаа дарах арга замыг харна уу.

Та тушаалын мөрөнд ижил архивыг олон удаа жагсааж болно.

Архивын энэ төрлийн хайлт нь Unix холбогчдод зориулагдсан стандарт юм. Гэсэн хэдий ч, хэрэв та ld дээр ашигладаг бол энэ нь AIX холбоосын үйлдлээс өөр байгааг тэмдэглэх хэрэгтэй.

-L хайлт

--library-path = searchdir

Архивын сангууд болон ld хяналтын скриптүүдийг хайх замын жагсаалтыг path searchdir гэж нэмээрэй . Та энэ сонголтыг хэд хэдэн удаа ашиглаж болно. Эдгээр сангуудыг тушаалын мөрөнд зааж өгсөн дарааллаар хайдаг. Тушаалын мөрөнд зааж өгсөн сангууд анхдагч сангуудаас өмнө хайлт хийдэг. Бүх -L сонголтууд нь бүх -l сонголтуудад хамаарах бөгөөд эдгээр нь сонголтууд гарч ирэх дарааллаас хамаарна.

Хэрэв searchdir нь "=" эхэлсэн бол "=" нь sysroot угтвараар солигдох болно, холбогч тохируулагдсан үед тодорхойлогдсон зам.

Оруулсан анхдагч замын багц ( -L тохируулгагүйгээр ) аль эмуляцын горим аль нь ашиглагдаж байгаагаас хамаарч зарим тохиолдолд мөн тохируулагдсан эсэхээс хамаарна.

Замууд нь "SEARCH_DIR" командтай холбоос скриптээр зааж өгч болно. Энэ аргаар зааж өгсөн зааврууд нь холбогч скрипт тушаалын мөрөнд байгаа цэгийг хайж олох болно.

эмуляц

Зохион байгуулагч холбогчийг дууриах . Та боломжит эмуляцуудыг --verbose эсвэл -V сонголтуудаар жагсааж болно.

Хэрэв -m сонголт ашиглагдахгүй бол эмуляцыг "LDEMULATION" орчны хувьсагчаас авсан бол энэ нь тодорхойлогдсон бол.

Үгүй бол үндсэн холбоос нь холбогч хэрхэн тохируулагдсанаас хамаарна.

--print-map

Стандарт гаралт руу холбоосын зургийг хэвлэх. Холбоосын газрын зураг нь дараах холбоосын тухай мэдээллийг агуулна. Үүнд:

*

Объект файл ба тэмдэгийг санах ойд байрлуулсан бол.

*

Нийтлэг тэмдэглэгээг хэрхэн хуваарилдаг вэ?

*

Архивын гишүүдийг оруулахад хүргэсэн бэлгэ тэмдгийг дурдсан холбоосод оруулсан бүх архивын гишүүд.

-n

--маник

Хэсэгүүдийн хуудасны байрлалыг унтраах ба боломжтой бол гаралтыг "NMAGIC" гэж тэмдэглээрэй.

-N

--мөнгө

Текст болон өгөгдлийн хэсгүүдийг уншиж, бичих боломжтой болгох. Мөн өгөгдлийн сегментийг хооронд нь холбохыг бүү хий, хуваалцсан номын сангийн эсрэг холбоосыг хаах хэрэгтэй. Хэрэв гаралтын формат нь Unix загварын шидэт тоог дэмждэг бол гаралтыг "OMAGIC" гэж тэмдэглээрэй.

- үгүй-omagic

Энэ сонголт нь -N тохируулгын үр нөлөөг ихэнхдээ үгүйсгэдэг . Энэ нь текстийн хэсгийг зөвхөн уншигдахаар болгож өгдөг бөгөөд өгөгдлийн сегментийг дараалсан хуудас байх болно. Тэмдэглэл - энэ сонголт нь хуваалцсан сангуудтай холбохыг идэвхжүүлдэггүй. -Bdynamic-г ашиглахын тулд.

-o гарц

--output = гаралт

Гаралтын үр дүнг ld-ийн гаргасан програмын нэрээр ашиглах; Хэрэв энэ тохируулгыг зааж өгөөгүй бол a.out нэрийг анхдагчаар ашигладаг. Скрипт "OUTPUT" гэсэн тушаал нь гаралтын файлын нэрийг зааж өгч болно.

-O түвшин

Түвшин бол тоон утга нь тэгээс илүү гарна. Энэ нь илүү урт хугацаа шаардаж магадгүй тул эцсийн хоёртын файлд зөвхөн идэвхжүүлсэн байх магадгүй юм.

-q

--emit-relocs

Бүрэн холболттой гүйцэтгэгчид нь нүүлгэн шилжүүлэлтийн хэсэг болон агуулгыг орхи. Шууд холболтын шинжилгээ, оновчлолын хэрэгслүүд нь эдгээр мэдээллийг гүйцэтгэхийн зөв өөрчлөлтийг хийхийн тулд энэ мэдээллийг шаарддаг. Энэ нь том хэмжээний гүйцэтгэгдэнэ.

Энэ тохируулга нь одоогоор ELF тавцангуудад дэмждэг.

-r

- Боломжгүй

Нүүлгэн шилжүүлэлтийг гаргана --- өөрөөр хэлбэл гаралтын файлыг үүсгэх бөгөөд ингэснээр ld- д оролт болж өгдөг. Энэ нь ихэвчлэн хэсэгчилсэн холболт гэж нэрлэгддэг. Нөгөө талаас, стандарт Unix шидэт тоог дэмждэг орчинд энэ сонголт нь гаралтын файлын шидэт дугаарыг "OMAGIC" болгож өгдөг. Хэрэв энэ тохируулгыг зааж өгөөгүй бол үнэмлэхүй файлыг үүсгэнэ. C ++ програмуудыг холбох үед энэ тохируулга нь үйлдвэрлэгчдэд хамааралтай асуудлыг шийдэхгүй; Үүнийг хийхийн тулд -Ur .

Оролтын файл нь гаралтын файлтай ижил форматгүй бол, уг оролтын файл ямар ч нүүлгэн шилжүүлэлт агуулаагүй тохиолдолд хэсэгчилсэн холболтыг дэмждэг. Гарцын өөр хэлбэрүүд нь цаашдын хязгаарлалттай байж болно; жишээ нь зарим "a.out" дээр суурилсан форматууд нь бусад форматтай оролтын файлуудтай хэсэгчлэн холбохыг дэмждэггүй.

Энэ тохируулга нь -i- тай адилхан үйлдэл хийдэг.

-R файлын нэр

--just-symbols = filename

Тэмдгийн нэр болон тэдгээрийн хаягийг файлын нэрээс уншина уу, гэхдээ үүнийг шилжүүлэх эсвэл гаралтад оруулахгүй байх. Энэ нь таны гаралтын файлыг бусад програмуудад тодорхойлсон санах ойн үнэмлэхүй байршлыг бэлгэдэл байдлаар олгодог. Та энэ сонголтыг нэгээс илүү удаа ашиглаж болно.

Бусад ELF холболтуудтай нийцтэй бол -R сонголт нь файлын нэр биш сангийн нэрийг дагаж байдаг бөгөөд энэ нь -rpath тохируулга юм.

-s

- бүгдээрээ

Гаралтын файлаас бүх тэмдэгийн мэдээллийг очих.

-S

- зурвас-дибаг хийх

Гаралтын файлаас дибаггер тэмдэгийн мэдээлэл (гэхдээ бүх тэмдэг биш) орхих.

- урсгал

Оруулах файлын нэрийг ld болгож хэвлэнэ.

-T scriptfile

--script = scriptfile

Скрипт файлыг холбогч скрипт болгон ашиглах. Энэ скрипт нь ld- ийн анхдагч холбогч скриптийг орлуулдаг (тэгээд үүгээр нэмнэ ), тэгэхээр тушаалын файл нь гаралтын файлыг тайлбарлахад шаардлагатай бүх зүйлийг зааж өгөх ёстой. Хэрэв скрипт файл нь одоогийн лавлахад байхгүй бол "ld" нь өмнөх Л-ийн тохируулгуудаас зааж өгсөн сангуудыг хайдаг. Олон- Т тохируулгууд нь хуримтлагддаг.

-u тэмдэг

--үйлсэн = тэмдэг

Гаралтын файлд тодорхойгүй тэмдэг гэж тэмдэглэх хүч тэмдэг. Жишээ нь, жишээлбэл, стандарт номын сангийн нэмэлт модулиудыг холбоход хүргэж болох юм. -u нэмэлт нэмэлт тэмдгүүдийг оруулахын тулд өөр өөр нэмэлт өгөгдлөөр давтаж болно. Энэ сонголт "EXTERN" холбоос скрипттэй адил байна.

-Уу

C ++ програмуудаас өөр ямар ч хувьд энэ сонголт нь -r : энэ нь relocatable output буюу өөрөөр хэлбэл гаралтын файлыг ld-д оруулна. C ++ програмуудыг холбох үед, -Ur нь -r -сээс ялгаатай, байгуулагчдын талаар лавлах болно. Ашиглахад тохирохгүй . -Ur- тэй холбоотой байсан файлууд дээрээ ; бүтээх хүснэгтэд баригдаж дууссаны дараа үүнийг нэмэх боломжгүй юм. Зөвхөн сүүл хэсэгчилсэн холбоосынхоо хувьд -Ur болон бусад -r -г ашигла.

- шинэ [= SECTION ]

Оролтын хэсэг бүрт тус тусад нь гаралтын хэсэг үүсгэх, эсвэл орлуулах оруулгын хэсэг бүрт нэмэлт орлуулагддаг тэмдэгтийн БҮЛЭГ гэсэн нэмэлт өгөгдөл байхгүй бол. Өнчин хэсэг нь холбогч скриптэд тусгайлан заагаагүй юм. Та энэ сонголтыг тушаалын мөрөөс олон удаа ашиглаж болох юм; Энэ нь холбогч скрипт дэх орлуулах хэсгүүдийн хэвийн нийлүүлэлтийг ижил нэртэй хэвээр байлгадаг.

-v

- хувилбар

-V

Ld-ийн хувилбарын дугаарыг харуул . -V тохируулга нь дэмжигдсэн эмуляцуудыг жагсаадаг.

-x

- бүгдийг хамарсан

Бүх орон нутгийн тэмдэгийг устгах.

-X

- орон нутгийн иргэд

Түр зуурын орон нутгийн тэмдэгийг бүгдийг нь устгах. Ихэнх зорилтуудын хувьд энэ нь L- тэй эхэлж байгаа орон нутгийн бүх бэлгэдэл юм.

-мөн билэг тэмдэг

--trace-symbol = тэмдэг

Холбогдох файл бүрийн нэрийг бэлгэдэл гарч ирнэ. Энэ сонголтыг хэд хэдэн удаа өгч болно. Олон системүүд дээр доогуур зураас бэлтгэх шаардлагатай байдаг.

Энэ сонголт нь таны холбоосод тодорхойгүй тэмдэг байх үед ашигтай байдаг боловч лавлагаа хаанаас ирснийг мэдэхгүй.

-Y зам

Анхдагч номын сангийн хайлтын зам руу замыг нэмэх. Solaris-ийн хувьд энэ тохируулга байдаг.

-z түлхүүр үг

Зөвшөөрөгдсөн түлхүүр үгүүд нь "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" and "nocopyreloc ". Бусад түлхүүр үгүүд нь Solaris-ийн нийцгүй эсэхийг үл тоомсорлодог. "initfirst" нь обьектыг бусад ямар ч объектийн өмнө ажиллуулах үед эхэлж байхыг заана. "завсарлага" нь бүх бэлгэ тэмдэг болохоос өмнө, түүний тэмдэгийн хүснэгтийг завсарлах обьектийг тэмдэглэдэг. "loadfltr" нь уг файлыг ажиллуулах явцад нэн даруй боловсруулагдах обьектийг тэмдэглэдэг. "nodefaultlib" нь энэ объектын хамаарлуудыг хайх обьектыг тэмдэглэж байна номын сангийн хайлтын үндсэн замууд. "nodelete" нь ажиллуулах үед объектыг буулгаж болохгүй. "nodlopen" нь "dlopen" -д байхгүй объектыг тэмдэглэдэг. "nodump" энэ обьектыг "dldump" демпэрлэж болохгүйг тэмдэглэж байна. "одоо" залгагдсан залхуу ажиллах хугацаатай объектыг тэмдэглэнэ. "гарал үүсэл" нь объект $ ORIGIN агуулж болно. "defd" нь тодорхойгүй тэмдэгтүүдийг хориглодоггүй. "muldefs" нь олон тодорхойлолтыг зөвшөөрдөг. "combreloc" нь олон reloc хэсгүүдийг хослуулж, динамик тэмдгийн хайлт хийх боломжийг олгодог.

"nocombreloc" хослуулах олон reloc хэсгүүдийг идэвхгүй болгодог. "nocopyreloc" хувилбарын relocs хуулбарлах үйлдвэрлэлийг идэвхгүй болгох.

- ( архивууд -)

- бүлгийн бүлгийн архив --end-group

Архивууд архивын файлуудын жагсаалт байх ёстой. Тэдгээр нь тодорхой файлын нэрс эсвэл -l тохируулгууд байж болох юм.

Тодорхойгүй архив үүсгэхгүйгээр тодорхой архивыг дахин хайх болно. Ер нь, архив зөвхөн тушаалын мөрөнд заасан дарааллаар нэг удаа л хайлт хийгддэг. Тухайн архив дахь тэмдэглэгээ нь тушаалын мөрөнд сүүлд харагдах архивт очих обьектоор тодорхойлогдоогүй тодорхойлогдох тэмдэглэгээ шаардлагатай бол холбогч энэ зааврыг шийдвэрлэх боломжгүй болно. Архивыг бүлэглэн бүлэглэн бүх боломжит лавлагаа шийдвэрлэгдэх хүртэл бүгдийг дахин нягтлан шалгана.

Энэ сонголтыг ашиглах нь гүйцэтгэлийн зардал мэдэгдэхүйцтэй байдаг. Хоёр болон түүнээс дээш архивын хоорондох тойрог замбараагүй зайлшгүй шаардлагатай үед үүнийг ашиглах нь зүйтэй.

- хүлээн зөвшөөрөгдөөгүй-оролтын-нум

- болохгүй хүлээн авах-үл мэдэгдэх-оролтын-нум

Архитектурыг таних боломжгүй оролтын файлуудыг хүлээн авах холбоосыг хэлдэг. Хэрэглэгч нь юу хийж байгааг нь мэдэж байгаа бөгөөд эдгээрийг үл мэдэгдэх оролтын файлд холбох хүсэлтэй байгаа гэсэн таамаглал юм. Энэ нь 2.14-ээс өмнө холбогчийн үндсэн үйлдэл байсан. Хувилбар 2.14 оноос хойшхи анхдагч зан авир нь ийм оролтын файлуудыг татгалзах явдал юм. Тиймээс хуучин хүлээн авах сэргээхэд хүлээн авах -гүй-оролт-нуман тохируулга нэмэгдсэн байна.

түлхүүр үг

Энэ тохируулга нь SunOS-ийн нийцтэй байдлыг үл тоомсорлодог.

-Бидиннам

-сого хуваалцах

Динамик номын сантай холбогдох. Энэ нь хуваалцсан сангууд дэмжигдсэн платформ дээр зөвхөн ач холбогдолтой юм. Энэ сонголт нь ихэвчлэн ийм тавцангууд дээр анхдагч байдаг. Энэ тохируулгын өөр өөр хувилбарууд нь төрөл бүрийн системүүдтэй нийцтэй байх явдал юм. Та энэ сонголтыг тушаалын мөрөөс олон удаа ашиглаж болох юм: энэ нь түүнийг дагалддаг -l тохируулгуудыг хайх сантай байдаг.

-Бүлгийн хэсэг

Динамик хэсгийг "DF_1_GROUP" тугийг "DT_FLAGS_1" гэсэн тэмдэглэгээгээр тохируулна уу. Энэ нь энэ обьект дээрх хайлтуудыг зохицуулах ажиллах үеийн холбогчийг үүсгэдэг бөгөөд тэдгээрийн хамаарлыг зөвхөн бүлгийн дотор гүйцэтгэх болно. - Ямар ч тодорхой бус байна. Энэ сонголт нь хуваалцсан сангуудыг дэмждэг ELF тавцан дээр зөвхөн ач холбогдолтой юм.

- Статистик

-dn

-он_shared

статистик

Дундын номын сангийн эсрэг холбоос бүү холбоорой. Энэ нь хуваалцсан сангууд дэмжигдсэн платформ дээр зөвхөн ач холбогдолтой юм. Энэ тохируулгын өөр өөр хувилбарууд нь төрөл бүрийн системүүдтэй нийцтэй байх явдал юм. Та энэ сонголтыг тушаалын мөрөөс олон удаа ашиглаж болох юм: энэ нь түүнийг дагалддаг -l тохируулгуудыг хайх сантай байдаг.

- Бэлгэдэл

Хуваалцсан сан үүсгэх үед хуваалцсан сан доторх тодорхойлолтыг ашиглан дэлхийн бэлгэдэлүүдтэй холбогдох холбоосуудыг холбох. Ихэнхдээ хуваалцсан санг хуваалцсан сан доторх тодорхойлолтыг дарахын тулд хуваалцсан санах ойтой холболт хийх боломжтой байдаг. Энэ сонголт нь хуваалцсан сангуудыг дэмждэг ELFplatforms-д зөвхөн ач холбогдолтой юм.

- шалгах хэсэг

--хараагүй хэсгүүд

Холбогчийг давхардсан хаяг байгаа эсэхийг харахаар хуваарийн хаягуудыг шалгахгүй байхыг асууна. Ер нь холбогч нь энэ шалгалтыг гүйцэтгэх бөгөөд ямар нэг давхцал олдвол энэ нь тохиромжтой алдааны мэдээллүүдийг үүсгэнэ. Холбогч нь мэддэг бөгөөд зардлын хэсгүүдэд хуваарилалт хийдэг. Үндсэн зан төлөвийг тушаалын мөрийн шилжүүлэгч - check-sections тушаалаар сэргээж болно.

- сэргээх

Гарах лавлагааны хүснэгтийг гаргана уу. Холбогч газрын зургийн файл үүсгэгдсэн бол хөндлөн лавлах хүснэгтийг газрын зургийн файлд хэвлэнэ. Үгүй бол стандарт гаралт дээр хэвлэгдэнэ.

Хүснэгтийн хэлбэр нь санаатай энгийн бөгөөд хэрэв шаардлагатай бол скриптээр хялбархан боловсруулж болох юм. Тэмдэгтүүдийг нэрээр нь эрэмбэлдэг. Тэмдэгт бүрийн хувьд файлын нэрсийн жагсаалтыг өгнө. Хэрэв тэмдэг нь тодорхойлогдвол хамгийн эхний файл нь тодорхойлолтыг тодорхойлно. Үлдсэн файлууд нь тэмдэглэгээтэй холбоотой байна.

- бус тодорхойлох-нийтлэг

Энэ сонголт нь хаягийн хуваарилалтыг нийтлэг бэлгэдлүүдэд саад болгодог. Скрипт "INHIBIT_COMMON_ALLOCATION" гэсэн тушаал нь адилхан нөлөөтэй.

- -define-common сонголт нь гаралтын файлын төрлийг сонгохоос Нийтлэг тэмдэглэгээн дэх хаягуудыг хуваарилах шийдвэрийг decoupling болгодог; өөрөөр хэлбэл хаягууд нь Relocatable гаралтын төрлийн тэмдэгтүүд нь хаягуудыг Нийтлэг тэмдэглэгээнүүдэд хуваарилдаг. Common -default-common хэрэглээг ашиглах нь хуваалцсан сангаас ишлэгддэг Нийтлэг тэмдэгүүдийг зөвхөн үндсэн програмд ​​заана. Энэ нь хуваалцсан сан доторх ашиглагдаагүй давхардсан зайг арилгаж өгдөг бөгөөд ажиллах явцад алдаа гарсныг тэмдэглэхэд зориулсан олон тооны динамик модулиудтай тусгай хайлтын замууд байгаа үед буруу давхар хуулбарыг арилгахаас сэргийлдэг.

--defsym symbol = илэрхийлэл

Үзүүлсэн форматын абсолют хаяг агуулсан гаралтын файлд дэлхийн тэмдэглэгээг үүсгэх. Та командын мөрөнд олон тэмдэгтийг тодорхойлохын тулд энэ сонголтыг олон удаа ашиглаж болно. Арифметик хязгаарлагдмал хэлбэрийг энэ нөхцөлд илэрхийлэхэд зориулж дэмждэг: та 16-тын тооллын тогтмол эсвэл тэмдэгт зургуудын нэрийг өгч болно, эсвэл "+" ба "-" гэгддэг зургуудыг нэмэх эсвэл хасахын тулд "+" гэж хэрэглэж болно. Хэрэв та илүү дэлгэрэнгүй илэрхийллүүд хэрэгтэй бол linker тушаалын хэлийг скриптээс ашиглана уу. Тэмдэглэгээ: тэмдэгийн хоорондох цагаан зай байхгүй, тэнцүү тэмдэг (" = = ''), илэрхийлэл байх ёстой .

--demangle [= style ]

- бус-demangle

Эдгээр тохируулгууд нь алдааны мэдээллүүд болон бусад гаралтанд тэмдэгтийн нэрийг товчлохыг хянадаг. Холбогчийг ардчилал гэж хэлэхэд тэмдгийн нэрийг уншигдахуйц хэлбэрээр өгөхийг оролдох болно: хэрэв обьект файлын форматаар ашигладаг бол тэргүүлэх драфтуудыг зурж C ++ хэрэглэсэн тэмдэгтийн нэрийг хэрэглэгчийн унших боломжтой нэрс уруу хөрвүүлдэг. Янз бүрийн хөрвүүлэгч нь мөлхөө өөр өөр загвартай. Нэмэлт demangling style argument нь таны хөрвүүлэгчд тохирсон demangling загварыг сонгоход ашиглагдаж болно. Холбогч нь COLLECT_NO_DEMANGLE орчны хувьсагч тохируулагдаагүй бол анхдагчаар налуугаар хандах болно. Эдгээр тохируулгууд нь анхдагч утгыг өөрчлөхөд хэрэглэгдэж болно.

- хайх-холбогч файл

Динамик холбогчийн нэрийг тохируулна уу. Энэ нь зөвхөн динамикаар холбосон ELF-ийн файлуудыг үүсгэхэд зөвхөн чухал юм. Анхдагч динамик холбогч нь ихэвчлэн зөв байдаг; Хэрэв та юу хийж байгаагаа мэдэхгүй бол үүнийг бүү ашиглаарай.

- буулгах-relocs

Энэ тохируулга нь GNU хөрвүүлэгч ба assembler -т суулгагдсан-пик хувилбарыг үүсгэсэн MIPS-д суулгагдсан PIC кодыг холбоход зөвхөн ач холбогдолтой юм. Энэ нь зангилааны утгуудаар статикаар эхлүүлсэн ямар ч өгөгдлийг нүүлгэн шилжүүлэхийн тулд холбогчийг үүсгэхэд зориулж хүснэгт үүсгэх холбогчийг үүсгэдэг. Тестүүд / ld-empic дахь кодыг дэлгэрэнгүйг үзнэ үү.

- аюултай сэрэмжлүүлэг

Бүх сэрэмжлүүлгийг алдаа гэж үздэг.

--force-exe-suffix

Гаралтын файл нь .exe дагавартай эсэхийг шалгаарай.

Хэрэв бүрэн холболттой гаралтын файл амжилттай бүтээгдсэн бол " .exe " эсвэл " .dll " дагавар байхгүй бол энэ холбоос нь гаралтын файлыг ".exe" дагавартай адил нэртэйгээр хуулахыг идэвхжүүлдэг. Энэ хувилбар нь Microsoft Windows хост дээр өөрчлөгдөөгүй Unix makefiles ашигласнаар ашигтай байдаг. Учир нь Windows-ийн зарим хувилбарууд нь ".exe" дагавар дуусахаас нааш зураг ажиллуулахгүй болно.

--no-gc-хэсгүүд

- хэсгүүд

Ашиглагдаагүй оруулгын хэсгийн хогийг цуглуулах. Энэ сонголтыг дэмжихгүй байгаа зорилтуудад анхаарал тавьдаггүй. Энэ тохируулга нь -r тохирохооргүй , динамик холболт хийхэд бас ашиглагдахгүй. Үндсэн үйлдэл (энэ хогийг цуглуулахгүй байх ) нь тушаалын мөрөн дэх -гүй-gc-хэсгүүдийг зааж өгч болно.

--Туслаач

Стандарт гаралт болон гарах гаралтын тушаалын мөрийн тохируулгыг товчоор хэвлэх.

- зорилтот тусламж

Стандарт гаралт болон гарах гаралтын бүх зорилтот хувилбарын хураангуйг хэвлэ.

-Мап зургийн файл

Холбоосын газрын зураг файлfile файлд хэвлэх . Дээрх -M тохируулгын description -ийг үзнэ үү.

- болохгүй-санах ой

Мөн санах ойн хэрэглээг хурдасгахын тулд санах ойн хэрэглээний оролтын файлуудын хүснэгтэд касс хийх замаар ихэвчлэн ашигладаг. Энэ тохируулга нь ld- г харин санах ойн хэрэглээг оновчтой болгохыг хэлнэ, шаардлагатай бол тэмдэгийн хүснэгтүүдийг дахин унших. Хэрэв та том хэмжээний гүйцэтгэгдэж байгаа холбоосыг санахдаа санах ойн зайг ажиллуулбал энэ нь шаардлагатай байж болох юм.

- үгүй-тодорхой бус

-z defs

Ихэнхдээ симболын бус хуваалцсан сан үүсгэх үед тодорхойгүй тэмдэгтүүдийг зөвшөөрөх бөгөөд үлдсэнийг ажиллах үеийн ачаалагчаар шийддэг. Эдгээр тохируулгууд нь ийм тодорхой бус тэмдэгтүүдийг зөвшөөрөхгүй.

- олонлогийн-олон тодорхойлолт

-z muldefs

Ихэнх тохиолдолд тэмдэглэгээ олон удаа тодорхойлогдох үед холбогч нь алдааны алдааг мэдээлнэ. Эдгээр сонголтууд нь олон тодорхойлолтыг зөвшөөрч, эхний тодорхойлолтыг ашиглах болно.

--allow-shlib-undefined

Огт хуваалцсан объектууд дээр тодорхойгүй тэмдэгтүүдийг зөвшөөрөхийг зөвшөөрөхгүй. Цэвэр үр дүн нь тогтмол объектууд дахь тодорхойгүй тэмдэгтүүд нь алдааг өдөөж болох боловч хуваалцсан обьектууд дахь тодорхойгүй тэмдэгтүүдийг үл тоомсорлодог. No_undefined-ийн шийдэл нь ажиллах үеийн холбогч нь тодорхойгүй тэмдэгтүүд дээр баглагдах болно гэж таамагладаг. Гэсэн хэдий ч одоогийн архитектурт хамгийн тохиромжтой ямар функцийг сонгохын тулд ц мийг ачаалах үед тэдгээрийг засварлахад хамгийн багадаа нэг систем (BeOS) байдаг бөгөөд хуваалцсан сангууд дахь тодорхой бус тэмдэгтүүд хэвийн байдаг. IE нь зохих профайл функцийг динамикаар сонгох. HPP хуваалцсан сангууд нь тодорхойгүй тэмдэгтүүдтэй байх нь хэвийн үзэгдэл юм шиг байна.

- үгүй-тодорхой бус хувилбар

Ерөнхийдөө тэмдэг нь тодорхойгүй хувилбартай бол холбогч үүнийг үл тоомсорлодог. Энэ тохируулга нь тодорхой бус хувилбар бүхий тэмдэгтүүдийг зөвшөөрөхгүй бөгөөд харин оронд нь алдаа гардаг.

- ямар ч анхааруулга өгөхгүй байна

Ер нь ld нь өөр шалтгаанаар өөр өөр процессорууд эсвэл өөр өөр хэсгүүдэд зориулж эмхэтгэгдсэн учраас зарим шалтгаанаар тохироогүй оролтын файлуудыг холбохыг оролдох үед алдаа өгдөг. Энэ сонголт нь иймэрхүү боломжит алдаануудыг чимээгүйхэн зөвшөөрөхийг хэлнэ. Энэ тохируулга нь зөвхөн тусламжтайгаар ашиглагдах ёстой, холбогч алдааны тохиромжгүй гэдгийг баталгаажуулахын тулд тусгай арга хэмжээ авч байсан тохиолдолд.

- бус бүхэл бүтэн архив

Дараагийн архивын файлуудад зориулсан бүх архивын тохиргоог идэвхгүй болго .

- хориглох-ажиллагаа

Үргэлж ашиглагдах боломжтой үед гүйцэтгэгдэнэ гаралтын файлыг хадгална. Ер нь холбогч нь холболтын явцад алдаа гардаг бол гаралтын файлыг үүсгэх ёсгүй; Энэ нь ямар нэгэн алдаа гаргахад гаралтын файлыг бичихгүйгээр гардаг.

-nostdlib

Зөвхөн тушаалын мөрөнд зааж өгсөн номын сангуудыг хайх. Холбогч скриптэд тодорхойлогдсон сангийн сангууд (тушаалын мөрөнд тодорхойлогдсон линкийн скриптүүд орно) орхигддог.

--oformat output-format

ld нь нэгээс илүү төрлийн обьект файлыг дэмждэг. Хэрэв таны ld ийм аргаар тохируулсан бол та опционы файлын хоёртын форматыг тодорхойлохын тулд --oformat тохируулгыг ашиглаж болно. Ld нь өөр нэг обьект форматыг дэмжихээр тохируулагдсан байсан ч гэсэн энэ нь ихэвчлэн үүнийг зааж өгөх шаардлагагүй байдаг учир ld нь машин бүрийн хамгийн ердийн хэлбэрийн анхдагч гаралтын хэлбэршүүлэлт болгон үүсгэгддэг . Output-format нь BFD-ийн номын сангийн дэмждэг тодорхой форматын нэр юм. (Та objdump -i тушаалаар байгаа хоёртын форматуудыг жагсааж болно.) Скрипт "OUTPUT_FORMAT" гэсэн тушаал нь гаралтын форматыг зааж өгч болно, гэхдээ энэ сонголт нь үүнийг дарж өөрчлөх болно.

-маник

Энэ тохируулга нь Линуксийн нийцтэй байдлыг үл тоомсорлодог.

-Ай

Энэ тохируулга нь SVR4-ийн нийцтэй биш байна.

-

Машины хамааралтай нөлөөллүүдтэй тохируулга. Энэ сонголтыг зөвхөн цөөн зорилтот хэсэгт дэмждэг.

Зарим тавцангууд дээр --relax тохируулга нь холбогч нь програмын хаягийг тайвшруулах горимууд болон гаралтын обьект файлд шинэ заавруудыг нэгтгэх зэрэг програм хангамжийн асуудлыг шийдэж байх үед боломжтой болох дэлхийн оновчлолуудыг гүйцэтгэдэг.

Зарим платформ дээр эдгээр холболтын цаг хугацааны дэлхийн оновчлол нь боломжгүй болсон үр дүнг хуурамчаар дибаг хийхэд хүргэж болох юм. Үүнийг Matsushita MN10200 болон MN10300 процессоруудын гэр бүлд мэдэгдэж байна.

Энэ нь дэмжигдээгүй платформ дээр - relax- ийг хүлээн зөвшөөрдөг боловч үл тоомсорлодог.

- тэмдэг дардас-файлын файлын нэр

Файлын нэрэнд байгаа тэмдэглэгээг зөвхөн бусад бүх хаягийг устга. Файлын нэр нь ердөө л хавтгай файл бөгөөд нэг мөрөнд нэг тэмдэгтийн нэр байдаг. Энэ сонголт нь ялангуяа орчинд (VxWorks гэх мэт) маш чухал ач холбогдолтой байдаг. Дэлхий дээрх том тэмдэгийн хүснэгт аажмаар хуримтлагдаж, санах ойг хадгалах.

- нууцлалын тэмдэг - файлын тодорхой бус тэмдэгтийг устгахгүй , эсвэл нүүлгэн шилжүүлэхэд шаардагдах тэмдэгүүд оруулдаггүй .

Та тушаалын мөрөнд зөвхөн - тэмдэг-файл-файлыг зааж өгч болно. Энэ нь -s -S-ийг дардаг.

-rpath dir

Цуваа номын сангийн хайлтын замд сан нэмэх. Энэ нь ELFexecutecutable-ийг хуваалцсан обьектуудтай холбох үед хэрэглэгддэг. All -rpath аргументууд нь ажиллаж байх үед хуваалцсан обьектуудыг олоход ашигладаг ажиллах програмын холбоос руу нийлүүлж дамжуулдаг. -rpath тохируулга нь холбоосод тодорхойлсон хуваалцсан обьектуудад шаардлагатай хуваалцсан обьектуудыг олоход хэрэглэгддэг. -rpath-link тохируулгын талаар дэлгэрэнгүйг -с үзнэ үү. Хэрэв -rpath нь ELF -ийг ажиллах боломжтой үед холбоход хэрэглэгдэхгүй бол орчны хувьсагчийн "LD_RUN_PATH" агуулгыг тодорхойлсон тохиолдолд ашиглагдах болно.

-rpath тохируулгыг SunOS дээр бас ашиглаж болно. Анхдагчаар, SunOS дээр холбоос нь бүх -L тохируулгуудын жагсаалтаас гадна ажиллах хайлтын нөхөөсийг үүсгэх болно. Хэрэв -rpath тохируулгыг ашиглаж байгаа бол runtAs хайлтын замыг -rpath тохируулгуудыг ашиглан хийх болно -L сонголтуудыг орхигдуулдаг. Энэ нь gkg-г ашиглаж байгаа үед ашиглахад ашигтай, учир нь NFS холбогдсон файлын систем дээр байж болох олон -L сонголтуудыг нэмдэг.

Бусад ELF холболтуудтай нийцтэй бол -R сонголт нь файлын нэр биш сангийн нэрийг дагаж байдаг бөгөөд энэ нь -rpath тохируулга юм.

-rpath-link DIR

ELF эсвэл SunOS-ийг ашиглахад хуваалцсан нэг санах ойг шаарддаг. Энэ нь "ld -shared" холбоос нь хуваалцсан санг оролтын файлуудын аль нэгэнд оруулдаг үед тохиолддог.

Холбогч нь хуваалцдаггүй, нүүлгэн шилжүүлээгүй холбоос үүсгэх үед ийм хамааралтай байдалтай байх үед энэ нь заавал хуваалцсан санг олоход автоматаар оролдох бөгөөд үүнийг шууд заагаагүй бол холбоос руу оруулна. Ийм тохиолдолд -rpath-link сонголт нь хайлт хийх эхний санг тодорхойлдог. -rpath-link тохируулга нь нэрний дарааллыг зааж өгч болно. Эдгээр нь нэрний жагсаалтыг зааж өгнө, эсвэл олон удаа гарч ирдэг.

Энэ сонголтыг хуваалцах сан руу хөрвүүлэгдсэн байж болох хайлтын замыг дарж өөрчлөх болгонд болгоомжтой ашиглагдах ёстой. Ийм тохиолдлуудад runtime linker хийхээс бусдаар санамсаргүй хайх өөр замыг ашиглах боломжтой байдаг.

Холбогч нь шаардлагатай хуваалцсан санг олохын тулд дараах хайлтын замыг ашигладаг.

1.

-rpath-link тохируулгаар зааж өгсөн дурын сангууд.

2.

-rpath тохируулгуудын зааж өгсөн дурын сангууд. -rpath болон -rpath-link хоёрын хоорондын ялгаа нь -rpath тохируулгуудын заасан сангуудыг ажиллуулж байгаа болон ажиллуулж байх үед ашигладаг бол -rpath-link тохируулга нь холболтод зөвхөн үр дүнтэй байдаг. Энэ нь зөвхөн уншигчийн холбогчдод зориулагдсан юм.

3.

ELF систем дээр хэрэв -rpath болон "rpath-link" сонголтууд ашиглагдаагүй бол орчны хувьсагчийн "LD_RUN_PATH" агуулгыг хайна уу. Энэ нь зөвхөн уншигчийн холбогчдод зориулагдсан юм.

4.

SunOS дээр хэрэв -rpath тохируулга ашиглагдаагүй бол -L тохируулгуудыг зааж өгсөн санг хайх хэрэгтэй.

5.

Уялдаа холбогчдын хувьд "LD_LIBRARY_PATH" орчны хувьсагчийн агуулга.

6.

Үндсэн ELF холбогчын хувьд хуваалцсан сангуудын "DT_RUNPATH" эсвэл "DT_RPATH" директорууд үүнийг шаардлагатай хуваалцсан сангуудыг хайж олох хэрэгтэй. Хэрэв "DT_RUNPATH" оруулгууд байгаа бол "DT_RPATH" оруулгууд орхигддог.

7.

Анхдагч сангууд, ихэвчлэн / lib болон / usr / lib .

8.

ELF систем дэх эх холболт хийх бол /etc/ld.so.conf файл байгаа бол файлд байгаа сангуудын жагсаалт.

Шаардлагатай хуваалцсан сан байхгүй бол холбогч нь анхааруулга өгч холбоосоор үргэлжлүүлнэ.

хуваалцах

-Бүлэгдэхүйц

Хуваалцсан сан үүсгэх. Энэ нь одоогоор ELF, XCOFF болон SunOS тавцангуудад дэмждэг. SunOS дээр холбоос нь автоматаар хуваалцсан санг үүсгэх бөгөөд -e тохируулга ашиглагдахгүй бөгөөд холбоосод тодорхойгүй тэмдэгт байдаг.

-сорт-нийтлэг

Энэ тохируулга нь ld -г тохирох гаралтын хэсгүүдэд байрлуулахдаа нийтлэг тэмдэгүүдийг томоор нь эрэмбэлдэг. Эхлээд бүгд нэг байт тэмдэгт, дараа нь бүх хоёр байт, дараа нь бүх дөрвөн байт, дараа нь бусад бүх зүйлс орно. Энэ нь шугаман бус хязгаарлалтын улмаас тэмдгүүдийн хоорондын зайг гаргахгүй байх явдал юм.

- файлаас хасах [ хэмжээ ]

Нэвтрэх-by-reloc-той төстэй боловч орцын файл бүрт шинэ гаралтын хэсгийг үүсгэдэг. хэмжээ өгөгдөөгүй бол өгөгдмөл хэмжээ нь 1 гэсэн хэмжээтэй байна.

- дахин оруулга [ тоолох ]

Гарах файлын нэмэлт хэсэгт үүсгэхийг оролдохын тулд файлын ганц гаралтын хэсэг нь дахин байршуулахаас илүү агуулагддаг. Энэ нь их хэмжээний нүүлгэн шилжүүлэлтийн файлуудыг COFF обьектийн файлын хэлбэршилттэй тодорхой цаг хугацаанд нь татаж авахад ашигтай байдаг; COFFcannot нь нэг хэсэгтээ 65535 нүүлгэн шилжүүлэлтийг төлөөлдөг. Энэ нь дурын хэсгүүдийг дэмждэггүй об флэш форматтай ажиллахгүй байхыг анхаарна уу. Холбогч нь дахин хуваарилалт хийх тусдаа оролтын хэсгүүдийг хуваахгүй бөгөөд хэрэв ганц оролтын хэсэг нь тооллогын нүүлгэн шилжүүлэлтээс илүү байвал нэг гаралтын хэсэг нь нүүлгэн шилжүүлэлтийг агуулна. Анхдагч утга нь 32768 утгыг тоолно .

- статик

Үзүүлэлтийн хугацаа, санах ойн ашиглалт гэх мэт холбогчийн үйл ажиллагааны статистикийг тооцоолох, харуулах.

- урсгал-хэлбэр

Зарим зорилгуудын хувьд ld- ийн гаралт нь зарим холбогчдын гаралтаас өөр байж болно. Энэ шилжүүлэгч нь оронд нь уламжлалт форматыг ашиглахыг хүсдэг.

Жишээлбэл, SunOS дээр ld мөрийн хүснэгтэд давхардсан бичлэгүүдийг хослуулдаг. Энэ нь гаралтын файлыг бүрэн хэмжээгээр дибаг хийх мэдээллийг 30-аас дээш хувиар багасгаж болно. Харамсалтай нь, SunOS "dbx" програм нь үр дүнгийн програмыг уншиж чадахгүй ("gdb" нь ямар ч асуудалгүй). - Анхдагч форматтай солих нь ld мөрийг давталттай хослуулахгүй байхыг хэлнэ.

- сонгох-эхлэх хэсэгname = org

Org-ийн өгсөн абсолют хаягаар гаралтын файл дахь хэсгийг олох. Та олон сонголтыг тушаалын мөрөнд олохын тулд энэ сонголтыг олон удаа ашиглах боломжтой. org нь 16-тын ганц бүхэл тоо байх ёстой; Бусад холбоосуудтай нийцтэй бол та голдуу арван зургаат утгыг ихэвчлэн ихэвчлэн 0x тэргүүлэх тоог орхиж болно. Тэмдэглэгээ: section нэрийн хооронд цагаан зай байхгүй, equals тэмдэг (" = = ''), ба org байна.

-Tbss org

-Tdata org

-Текст org

Эхлээд OR- г эхлэлийн хаяг болгон --- гаралтын файлын "bss", "өгөгдөл", эсвэл "текст" хэсэг. org нь 16-тын ганц бүхэл тоо байх ёстой; Бусад холбоосуудтай нийцтэй бол та голдуу арван зургаат утгыг ихэвчлэн ихэвчлэн 0x тэргүүлэх тоог орхиж болно.

- бүхэл файл

- үгс

Ld -н хувилбарын дугаарыг харуулаад дэмжигдсэн холбоосын эмуляцуудыг жагсаана. Файл оруулах файлыг нээж, нээх боломжгүй байна. Холбогчоор дамжуулан холбогч скриптийг ашигла.

--version-script = version-scriptfile

Холбогч руу хувилбарын скриптын нэрийг зааж өгнө үү. Энэ нь номын сан үүсгэх хувилбарын тухай нэмэлт мэдээллийг тодорхойлохын тулд нийтийн номын сан үүсгэх үед ашиглагддаг. Энэ сонголт нь хуваалцсан сангуудыг дэмждэг ELF тавцан дээр зөвхөн ач холбогдолтой юм.

--warn-нийтлэг

Нийтийн тэмдэг нь өөр нэг нийтлэг тэмдэг эсвэл тэмдгийн тодорхойлолттой хослуулсан үед анхаар. Unix холбоосууд нь энэ арай сул процессыг зөвшөөрдөг боловч бусад зарим үйлдлийн системүүдийн холбоосууд нь тийм биш байдаг. Энэ сонголт нь таныг дэлхийн бэлгэ тэмдгийг нэгтгэх боломжит асуудлыг олох боломжийг олгодог. Харамсалтай нь зарим С номын сангууд энэ практикийг ашигладаг тул сангууд болон бусад програмын тэмдэглэлүүдийн талаар зарим сануулга авч болно.

C жишээн дээр дүрсэлсэн гурван төрлийн олон төрлийн тэмдэглэгээ байдаг:

int i = 1;

Тодорхойлолт нь гаралтын файлын эхний өгөгдлийн хэсэгт оршино.

extern int i;

Хоосон зайг хуваарилдаггүй тодорхой бус лавлагаа. Хаана ч гэсэн хувьсагчийн тодорхойлолт эсвэл нийтлэг тэмдэг байх ёстой.

int i;

Нийтлэг тэмдэг. Хувьсагчийн хувьд зөвхөн (нэг юмуу хэд хэдэн) нийтлэг тэмдэг байгаа бол энэ нь гаралтын файлын unynitialized өгөгдлийн талбарт явдаг. Холбогч нь ижил хувьсагчийн хувьд олон тэмдгийг нэг тэмдгээр нэгтгэдэг. Хэрэв тэдгээр нь өөр өөр хэмжээтэй байвал хамгийн том хэмжээсийг сонгоно. Холбогч нь ижил хувьсагчийн тодорхойлолттой бол мэдэгдэлд нийтлэг тэмдэгийг хувиргана.

- Тушаалын тохируулга нь таван төрлийн анхааруулгыг үүсгэж чадна. Анхааруулга нь хоёр шугамаас бүрдэнэ: эхнийх нь зөвхөн тулгарч буй тэмдэг, харин хоёр дахь нь ижил нэртэй тулгарсан өмнөх тэмдэгтийг тайлбарладаг. Хоёр тэмдгийн аль нэг эсвэл хоёулаа нийтлэг тэмдэг болно.

1.

Лавлагааны тодорхойлолт аль хэдийн байдаг тул лавлагаанд нийтлэг тэмдэглэгээг эргүүл.

(
): анхааруулга: ` 'гэсэн тодорхойлолтоор дарагдсан (
): анхааруулга: энд тодорхойлогдсон

2.

Лавлагааны сүүлчийн тодорхойлолт тааралдсан учраас лавлагаанд нийтлэг тэмдэглэгээг эргүүлэв. Энэ нь өмнөх тохиолдлоос ялгаатай, тэмдэглэгээ нь өөр өөр дараалалд тулгардаггүй.

(
): анхааруулга: ` 'нийтлэг <файлын (
) тайлбар: тодорхойлолт:

3.

Өмнөх нэг ижил нийтлэг тэмдэг бүхий нийтлэг тэмдэгийг нэгтгэх.

(
): анхааруулга: ` ' (
) олон нийтлэг: анхааруулга: өмнөх нийтлэг энд байна

4.

Өмнөх том нийтлэг тэмдэг бүхий нийтлэг тэмдэгийг нэгтгэх.

(
): Анхааруулга: Том (
) -ээр дарагдсан 5.

Өмнөх жижиг нийтлэг тэмдэг бүхий нийтлэг тэмдэгийг нэгтгэх. Энэ нь өмнөх тохиолдлоос ялгаатай, тэмдэглэгээ нь өөр өөр дараалалд тулгардаггүй.

(
): warning: common (
): common: - цэвэрлэх байгууламж

Дэлхийн ямар ч барилга байгууламж ашиглаж байгаа бол анхаарна уу. Энэ нь зөвхөн хэд хэдэн обьект файлын хэлбэрт ашигтай байдаг. COFF, ELF гэх мэт форматуудын хувьд холбогч нь дэлхийн барилгачдын хэрэглээг илрүүлж чадахгүй байна.

--warn-multiple-gp

Гаралтын файлын олон тооны дэлхийн заагчийн утгыг шаардвал анхаарна уу. Энэ нь Альфа зэрэг зарим боловсруулагчдад чухал ач холбогдолтой юм. Ялангуяа, зарим процессорууд нь ихээхэн үнэ цэнэтэй тогтмолыг тусгай хэсэгт байрлуулдаг. Онцгой шинж тэмдэг (дэлхийн заагч) энэ бүлгийн гол хэсэг рүү чиглэж байгаа тул тогтмолыг харьцангуй хаяглалын горимоор дамжуулан ачаалах боломжтой болдог. Суурь регрессийн харьцангуй горим дахь офсет нь тогтмол, харьцангуй бага (жишээ нь, 16 бит), энэ нь тогтмол цөөрмийн хамгийн их хэмжээг хязгаарладаг. Тиймээс, том програмууд дээр бүх боломжит тогтмолыг арилгахын тулд олон тооны дэлхийн заагч утгыг ашиглах нь ихэвчлэн шаардлагатай байдаг. Энэ тохируулга нь энэ тохиолдол тохиолдох үед сэрэмжлүүлэг өгөх шалтгаан болдог.

- нэг удаа

Зөвхөн модуль бүрт нэг удаад бус, тодорхой бус тэмдэг тус бүрийн хувьд анхааруул.

- жижиглэнгийн хэсэг-align

Зэрэгцээ байдлаас шалтгаалан гаралтын хэсгийн хаяг өөрчлөгдсөн эсэхийг анхаарна уу. Ерөнхийдөө тэгшитгэлийг оролтын хэсэгт тохируулна. Хаяг нь тодорхой заагаагүй тохиолдолд зөвхөн өөрчлөгдөнө. Өөрөөр хэлбэл, "SECTIONS" команд нь энэ хэсгийн эхлэх хаягийг заахгүй.

- бүхэл архив

Тушаалын мөрөнд дурын архивын тохируулгын дараа заасан архив бүрийг архив дахь обьект файл бүрийг шаардлагатай обьект файлд хайхын оронд архив дахь архив дахь архивт оруул. Энэ нь ихэвчлэн хуваалцсан сан дотор архив файлыг хувиргахад ашиглагддаг. Энэ сонголтыг нэгээс илүү удаа ашиглаж болно.

GCC- ээс энэ тохируулгыг ашиглаж байхдаа хоёр тэмдэглэл: Эхлээд gcc нь энэ тохируулгыг мэдэхгүй учраас та -Wl, -whole-archive -г ашиглах хэрэгтэй. Хоёрдугаарт, gcc нь архивынхаа жагсаалтыг өөрийн холбоос руу нэмэх болно. Учир нь gcc нь архивынхаа жагсаалтыг өөрийн холбоос руу нэмэх бөгөөд та энэ туг нь эдгээр хүмүүст нөлөөлөхийг хүсэхгүй байж магадгүй юм.

- бэлэг тэмдэг

Угсралтын функцийг бэлгэдэл болгон ашигла. Тэмдэглэгээнд ямар ч тодорхой бус ишлэлийг "__ wrap_symbol" болгож шийдвэрлэнэ. "__real_symbol" -ын тодорхойгүй дурсамжийг бэлгэдэл гэж тодорхойлно .

Үүнийг системийн функцэд зориулж бүтээмжийг хангахад ашиглаж болно. Угсрагч функцийг "__wrap_symbol" гэж нэрлэнэ. Хэрэв системийн функцийг дуудах хүсэлтэй бол үүнийг "__ real_symbol" гэж нэрлэнэ.

Энд энгийн жишээ байна:

void * __wrap_malloc (int c) {printf ("% ld \ n", c) дуудагдсан malloc; буцах __real_malloc (c); }

Хэрэв та бусад кодыг энэ файлтай холбох бол --wrap malloc - г ашиглана, "malloc" дуудлага нь "__wrap_malloc" функцыг дуудна. "__wrap_malloc" дэх "__real_malloc" дуудлага нь жинхэнэ "malloc" функцийг дуудна.

Та "__real_malloc" функцыг бас өгөхийг хүсэж болох бөгөөд тэгэхээр --wrap тохируулгагүйгээр холбоосууд амжилттай болох болно. Хэрэв та үүнийг хийвэл "__ real_malloc" гэсэн тодорхойлолтыг "__wrap_malloc" гэсэн файлд тавьж болохгүй; Хэрэв та үүнийг хийж байгаа бол уг холбогч нь "malloc" рүү буулгах боломжтой болохоос өмнө дуудлагыг шийдвэрлэж болно.

- боломжтой-шинэ-dtags

- шинэчлэгдээгүй-dtags

Энэ холбогч нь ELF дээр шинэ динамик тэмдэгүүдийг үүсгэж чадна. Гэхдээ хуучин ELF системүүд тэднийг ойлгохгүй байж магадгүй юм. Хэрэв та -enable-new-dtags гэж зааж өгөх юм бол динамик хаягуудыг шаардлагатай үед үүсгэх болно. Хэрэв та --disable-new-dtags гэж зааж өгөх юм бол шинэ динамик хаягууд үүсгэгдэхгүй. Анхдагчаар шинэ динамик тэмдэглэгээг үүсгэдэггүй. Эдгээр сонголтууд нь зөвхөн forFF системүүдэд байдаг гэдгийг санаарай.

I386 PE холбогч нь -shared сонголтыг дэмждэг бөгөөд энэ нь хэвийн ажиллахын оронд динамикаар холболт хийгдсэн сан (DLL) гаралтыг үүсгэдэг. Та энэ сонголтыг ашиглахдаа "* .dll" гэсэн гаралтыг нэрлэх ёстой. Үүнээс гадна холбоос нь "* .def" файлуудыг бүрэн дэмждэг бөгөөд энэ нь обьект файлтай холбоосын тушаалын мөрөнд тодорхойлогдож болох юм (үнэн хэрэгтээ энэ нь холбоосыг экспортлох архивуудаас өмнө байх ёстой, ердийн обьектийн файлын нэгэн адил).

Бүх зорилтуудад нийтлэг тохируулгуудаас гадна i386 PE холбогч нь i386 PE зорилтод тусгай нэмэлт тушаалын мөрний тохируулгуудыг дэмждэг. Үнэлгээг авч байгаа опционууд нь утгуудаас зай эсвэл тэнцүү тэмдгээр тусгаарлагдаж болно.

--add-stdcall-alias

Хэрэв өгөгдсөн бол stdcall дагавар (@nn) тэмдэгтэй адилтгаж болох бөгөөд мөн дагаж мөрдсөн дагавартай байна.

- үндсэн файлын файл

Файлыг DLTtool- тай үүсгэхэд шаардлагатай бүх нүүлгэн шилжүүлэлтийн үндсэн хаягийг хадгалах файлыг файлын нэр болгон ашиглах хэрэгтэй.

- бүгд

Ердийн гүйцэтгэгдэж байгаа оронд нь DLL үүсгэх. Та мөн ".def" файлд "PERPUSTAKAAN" -ийг хуваалцаж эсвэл зааж өгч болно.

- боломжтой-stdcall-fixup

- байхгүй-stdcall-fixup

Хэрэв холбоос нь үүнийг шийдэж чадахгүй байгаа тэмдэгтийг олсон бол "fuzzy linking" буюу "fuzzy linking" ("fuzzy linking") хийхийг оролдох болно. Энэ нь зөвхөн simbolны нэр (cdecl vs stdcall) хэлбэрээр ялгаатай тэмдэглэгээг хайж, холбоосоор шийдэх болно. Тоглолтонд. Жишээлбэл, "_foo" гэсэн тодорхойгүй тэмдэгт нь "_foo @ 12" функцтэй холбоотой байж болох бөгөөд эсвэл "_bar" 16 гэсэн тодорхойгүй тэмдэгт "_bar" нь холболттой холбоотой байж болох юм. Холбогч үүнийг хийснийхээ дараа энэ нь ердийн холбоосыг амжилтгүй орхих учир анхааруулга хэвлэж авдаг боловч гуравдагч этгээдийн директороос үүсгэсэн сангуудыг заримдаа импортлохыг шаарддаг байж магадгүй юм. Хэрэв та зааж өгсөн бол - боломжтой-stdcall-fixup , энэ боломж бүрэн идэвхжсэн бөгөөд анхааруулга хэвлэгдээгүй байна. Хэрэв та --disable-stdcall-fixup-ийг зааж өгөх юм бол энэ боломжыг идэвхгүй болгож, ийм зохицуулалт нь алдаа гэж тооцогддог.

- экспортын бүх тэмдэглэгээ

Хэрэв өгөгдсөн бол DLL-ийг бүтээхэд ашигласан обьектуудын бүх дэлхийн бэлгэдэл нь DLL-ээр экспортлогдоно. Экспортлогдсон тэмдэгтүүд байхгүй бол энэ нь анхдагч гэдгийг анхаарна уу. Тэмдэглэлүүд нь DEF файлуудаар шууд экспортлогдсон эсвэл функцийн шинж чанаруудаар шууд экспортлодог бол анхдагч нь энэ сонголтыг өгөхөөс бусад тохиолдолд юу ч экспортлохгүй байх явдал юм. Тэмдэглэгээ "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12", болон "impure_ptr" нь автоматаар экспорт хийхгүй гэдгийг анхаарна уу. Түүнчлэн, бусад DLL-ээс импортлож байгаа бэлгэ тэмдгийг дахин экспортлохгүй, "_iname" -тэй цуг "_head_" -ээс эхлэн DLL-ийн дотоод зохион байгуулалтыг зааж өгөх тэмдэг байхгүй болно. Үүнээс гадна "libgcc", "libstd ++", "libmingw32", эсвэл "crtX.o" гэсэн тэмдгүүдийг экспортлох боломжгүй болно. "__rtti_" эсвэл "__builtin_" -ээр эхэлж нэрс нь C ++ DLL-тэй хамт экспортлох боломжгүй байна. Эцэст нь, экспортод гаргадаггүй cygwin-хувийн тэмдэгтийн өргөн хүрээтэй жагсаалт байдаг (тодруулбал, энэ нь кибер зорилтод зориулсан DLL-ийг байгуулах үед хамаатай).

Эдгээр нь: "_cygwin_dll_entry @ 12", "_cygwin_crt0_common @ 8", "_ cygwin_noncygwin_dll_entry @ 12", "_fmode", "_impure_ptr", "cygwin_attach_dll", "cygwin_premain0", "cygwin_premain1", "cygwin_premain2", "cygwin_premain3 "," хүрээлэн буй орчин ".

- тэмдэглэгээ - тэмдэг , тэмдэг , тэмдэг ...

Автоматаар экспортлагдахгүй байх тэмдгийн жагсаалтыг заана. Тэмдэглэгээний нэрийг таслал эсвэл цэгээр тусгаарлаж болно.

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

Тэмдэглэлүүдийг автоматаар экспортлох боломжгүй архивын сангуудын жагсаалтыг зааж өгнө. Номын сангийн нэрийг таслал эсвэл цэгээр хязгаарлаж болно. "ALLEX -exclude-libs" -ийг автоматаар экспортлох бүх архивын сан дотор тэмдэглэгээг оруулаагүй болно. .def файлд илэрхийлэгдсэн тэмдгүүд нь энэ сонголтоос үл хамааран экспортлогдсон хэвээр байна.

- файл зохицуулалт

Файлын байршлыг заана уу. Файл доторх хэсгүүд нь энэ тоонуудын олонлогийн тоо файлын нөхөлтөөс эхэлдэг. Энэ нь анхдагч утга нь 512 юм.

- цэвэр нөөц

--хувийн нөөц , амлалт

Энэ хөтөлбөрийн хувьд овоолгын хэмжээг нөөшлөх (болон сонголт хийхээр) хийхийг зааж өгнө. Анхдагч нь 1Mb хадгалагдсан, 4K үйлдсэн.

- зургийн суурь утга

Програмын эсвэл жетоны үндсэн хаяг болох утгыг ашиглаарай. Энэ нь таны програм эсвэл DLL ачаалагдсан үед ашиглах хамгийн бага санах ойн байршил юм. Таны дипломын ажиллагааг нүүлгэх, сайжруулах хэрэгцээг багасгахын тулд тус бүр үндсэн өвөрмөц хаягтай байх бөгөөд бусад ямар ч давталттай давхцахгүй байх ёстой. Анхдагч нь гүйцэтгэх боломжтой 0х400000 ба 0х10000000-д зориулсан.

- циль-цаг

Хэрэв өгөгдсөн бол stdcall дагавар (@nn) нь экспортолж эхлэхээс өмнө тэмдэгтээр хуулагдах болно.

- мастер-зургийн-хувилбарын утга

"Зургийн хувилбар" -ын гол тоог тохируулна. Анхдагч нь 1.

--major-os-хувилбарын утга

"Os хувилбар" -ын гол тоог тохируулдаг. Үндсэн 4.

- олон улсын дэд систем-хувилбарын үнэ цэнэ

"Дэд системийн хувилбар" -ын гол тоог тохируулдаг. Үндсэн 4.

--minor-image-хувилбарын утга

"Зургийн хувилбар" -ын бага тоог тохируулна. Анхдагч байна 0.

--minor-os-хувилбарын утга

"Os хувилбар" -ын бага тоог тохируулна. Анхдагч байна 0.

--minor дэд систем-хувилбарын утга

"Дэд системийн хувилбар" -ын бага тоог оноож өгнө. Анхдагч байна 0.

- Output-def файл

Холбогч нь холбоос үүсгэгч DLL-тэй нийцэх DEF файл агуулж байгаа файлын файлыг үүсгэнэ. Энэ нь DEF файл ("* .def" гэж нэрлэх ёстой) "import" сан үүсгэхийн тулд "dlltool" бүхий кодыг үүсгэх эсвэл автоматаар эсвэл далдлагдсан экспортлогдсон тэмдэгтүүдээр лавлагаа болгон ашиглаж болно.

--out-implib файл

Холбогч нь холбогчийг бий болгох DLL-д тохирох холболтын файлыг агуулсан файлын файлыг үүсгэнэ. Импортын lib (энэ нь ".dll.a" эсвэл "* .a" гэгддэг байх ёстой) үүсгэгдсэн DLL-ийн эсрэг үйлчлүүлэгчдийг холбоход хэрэглэгдэж болох бөгөөд энэ үйлдэл нь тусдаа "dlltool" импортыг үүсгэх алхмыг алгасаж болдог.

- боломжтой-авто-дүрс-суурь

"-image-суурь" аргументыг ашиглан зааж өгснөөс бусад тохиолдолд DLL-ээс зургийн суурийг автоматаар сонгоно уу. DLL бүрт өвөрмөц дүр төрхийг үүсгэхийн тулд директороос үүссэн hash-г ашиглан, санах ой дахь мөргөлдөөн болон нүүлгэн шилжүүлэлт нь хөтөлбөрийг ажиллуулах хугацааг хойшлуулахаас зайлсхийдэг.

- автоматаар бус дүрс-суурь

Дуртай өвөрмөц дүр зургийг автоматаар үүсгэж болохгүй. Хэрэв хэрэглэгчийн заасан зургийн бааз байхгүй ("--image-base") бол платформын үндсэн горимыг ашигла.

--dll-хайлт-угтвар мөр

Импортын сангүйгээр динамикаар диплом руу холбож байхдаа " .dll" хайхдаа "lib .dll" гэсэн давуу талыг хайгаарай. Энэ зан төлөв нь төрөл бүрийн "subplatforms" төрөл бүрийн зориулалттай DLL-уудын барьсан DLL-уудын хооронд ялгаа үүсгэдэг: cygwin DLLs нь ихэвчлэн "--dll-search-prefix = cyg" ашигладаг.

- боломжтой-авто-импорт

"_symbol" -ийн нарийн холбоосыг DLL-ээс импортоор "__imp__symbol" болгож импортлож буй номын сангуудыг DATAexports-ээр байгуулж шаардлагатай шаардлагатай тэмдгийг үүсгэх хэрэгтэй. Энэ нь ердөө л 'ажиллана' гэхдээ заримдаа та энэ зурвасыг харж болно:

"Хувьсагч" 'нь автоматаар импорт хийх боломжгүй бөгөөд ld-ийн "--enable-auto-import" -д зориулсан дэлгэрэнгүй мэдээллийг уншина уу. "

Зарим (дэд) илэрхийлэл нь эцсийн эцэст хоёр байнгын нийлбэрээр илэрхийлэгдэх хаягийг (Win32 импортын хүснэгтүүд зөвхөн нэгийг зөвшөөрөх үед) болдог. Энэ тохиолдолд DLL-ээс импортлогдсон бүтцийн хувьсагчийн гишүүн талбаруудад хандах хандалт, мөн DLL-ээс импортлосон массив хувьсагчийн тогтмол индексийг ашиглана. Аливаа олон хувьсагчийн хувьсагч (массив, бүтцүүд, урт урт гэх мэт) энэ алдааг үүсгэж болзошгүй. Гэсэн хэдий ч гомдол гаргасан экспортлогдсон хувьсагчийн өгөгдлийн төрлөөс үл хамааран, үүнийг байнга илрүүлж, анхааруулга, гарцыг гаргана.

Экспортын хувьсагчийн өгөгдлийн төрлөөс үл хамааран энэхүү бэрхшээлийг шийдвэрлэх хэд хэдэн арга бий:

Нэг арга нь --enable-runtime-pseudo-reloc шилжүүлэлтийг ашиглах явдал юм. Энэ нь ажиллах хүчний орчиндоо зориулж лавлах кодыг тохируулах ажлыг орхидог тул энэ аргыг зөвхөн ажиллах хугацаа дууссан үед л ажиллах болно.

Хоёр дахь шийдэл нь "тогтмол" -ын аль нэгийг хүчдэл болгон хувиргах --- энэ нь мэдэгдээгүй, эмхэтгэх цаг хугацааны хувьд оновчтой биш юм. Массивын хувьд хоёр боломж байдаг: a) индексжүүлэгчийг (массивын хаяг) хувьсагч болгох, эсвэл b) тогтмол хувьсагчийг хувьсагч болгох. Тиймээс:

extern төрөл extern_array []; extern_array [1] -> {дэгдэмхий төрөл * t = extern_array; t [1]}

эсвэл

extern төрөл extern_array []; extern_array [1] -> {дэгдэмхий int t = 1; extern_array [t]}

Бүтцийн (болон бусад олон төрлийн өгөгдлийн төрлүүдийн хувьд) бүтцийн хувьд (эсвэл урт урт эсвэл ...) хувьсагчийг хийх нь зөвхөн ганц сонголт юм:

extern бүтцийн s extern_struct; extern_struct.field -> {тогтворгүй бүтцийн s * t = & extern_struct; t-> талбар}

эсвэл

extern урт урт extern_ll; extern_ll -> {дэгдэмхий урт урт * local_ll = & extern_ll; * local_ll}

Энэ бэрхшээлийг шийдвэрлэх гуравдахь арга нь зөрчилдөх тэмдгийн хувьд "авто-импорт" -оос татгалзаж, "__declspec (dllimport)" -ийг тэмдэглэх явдал юм. Гэсэн хэдий ч, практикт DLL-ийг бүтээж байгаа эсэхийг тодорхойлохын тулд эмхэтгэх-time #defines-г ашиглахыг шаардах, DLL-тэй холбох клиент кодыг бүтээх, эсвэл зөвхөн статик сантай холбох / холбохыг шаарддаг. Тогтмол арилгагчтай шууд хаягийн асуудлыг шийдэх олон аргуудын хооронд сонголт хийхдээ ердийн ертөнцийг ашиглахыг анхаарах хэрэгтэй.

Эх

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

Шийдэл 1:

--foo.h extern int arr []; --foo.c #include "foo.h" void main (int argc, char ** argv) {/ * Энэ шийдэл нь win32 болон cygwin; "optimize" * / дэгдэмхий чадвартай int * parr = arr; printf ("% d \ n", parr [1]); }

Шийдэл 2:

- foo.h / * Тэмдэглэл: auto-export гэж тооцсон (__declspec (dllexport)) * / #if (тодорхойлогдсон (_WIN32) || тодорхойлогдсон (__ 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]); }

Энэ асуудал үүсэхээс сэргийлэх дөрөв дэх арга бол алдаатай хувьсагчдын хувьд өгөгдлийн интерфейс гэхээсээ илүү функциональ интерфэйсийг ашиглахыг дахин кодчилох явдал юм ( жишээ нь set_foo () ба get_foo () хандалтын функц).

- автоматаар импорт хийх боломжгүй

"_symbol" -ыг "DLL" -ээс DATAimports-д "__imp__symbol" холбоосоор хийлгэхийг бүү оролдоорой.

- боломжтой-runtime-pseudo-reloc

Хэрэв код нь - auto-import хэсэгт заасан илэрхийллүүд, өөрөөр хэлбэл, DLL-ээс DATAimports-тэй тэнцүү бус офсеттай бол энэ шилжүүлэлт нь runtime эвдлэх орчинд ашиглагдаж болох "runtime псевдо шилжүүлгийн" векторыг үүсгэх болно. Таны үйлчлүүлэгчийн кодын ийм өгөгдөлд.

- үл тохирох-runtime-pseudo-reloc

DLL-ээс эхлээд тэгээс нөхөгдөх DATA импортыг псевдо шилжүүлэхийг бүү үүсгэ. Энэ нь анхдагч юм.

- боломжтой-нэмэлт-пи-дибаг

Авто-импортлох тэмдгийн бөглөрөлттэй холбоотой нэмэлт дибаг мэдээллийг харуулах.

- тохируулгын шугам

Загварын тэгшитгэлийг тохируулна. Санах ойд байгаа хэсгүүд нь энэ дугаараас олон тооны хаягууд дээр үргэлжлэх болно. Анхдагч нь 0х1000.

- нөөцийн нөөц

- нөөцийн нөөц , үүрэг

Энэ хөтөлбөрийн хувьд стекийн нөөцийг ашиглахын тулд нөөцийг (болон сонголтоо хийдэг) өгнө. Анхдагч нь 2Mb хадгалагдсан, 4K үйлдсэн.

-

- үндсэн систем :

- үндсэн систем:. бага

Таны програмыг ажиллуулах дэд системийг зааж өгнө. "Уугуул", "цонх", "консол", "posix" гэсэн эрх зүйн үнэт зүйлс. Та мөн хувилбарын дэд системийг тохируулж болно.

Чухал: Тушаалын командыг ашиглана ( % man ) ашиглана.