Linux / Unix հրաման: Id

ԱՆՈՒՆ

ld - Օգտագործելով LD- ն , GNU- ի հղումը

SYNOPSIS- ը

ld [ ընտրանքներ ] objfile ...

DESCRIPTION

ld- ն միավորում է մի շարք օբյեկտներ եւ արխիվային ֆայլեր , տեղափոխում է իրենց տվյալները եւ կապում խորհրդանշաններ: Սովորաբար ծրագիրը կազմելու վերջին քայլն է ld- ը վարել:

ld- ն ընդունում է Linker Command Language- ի ֆայլերը, որոնք գրված են AT & T- ի կապի խմբագիր հրամանատարության լեզվի սինթետիկի վերեւում, կապող գործընթացին հստակ եւ ամբողջական վերահսկողություն ապահովելու համար:

Այս մարդու էջը չի նկարագրում հրամանի լեզուն: տեսեք «info» -ում ld- ի մուտքը կամ ձեռնարկը ld: GNU- ի հղիչը, հրամանատարության լեզվով եւ GNU- ի աղյուսակի այլ ասպեկտների ամբողջական մանրամասների համար:

Ld- ի այս տարբերակը օգտագործում է ընդհանուր նպատակի BFD գրադարանները, օբյեկտի ֆայլերի վրա աշխատելու համար: Սա թույլ է տալիս ld- ը կարդալ, միավորել եւ գրել օբյեկտի ֆայլերը տարբեր ձեւաչափերով --- օրինակ COFF կամ «a.out»: Տարբեր ձեւաչափերը կարող են կապվել միասին `ցանկացած օբյեկտի ֆայլի տեսքով:

Բացի ճկունությունից, GNU- ի աղյուսակն ավելի օգտակար է, քան մյուս հղումներ, ախտորոշման տեղեկատվության տրամադրման գործում: Շատ հղումներն անմիջապես հրաժարվում են կատարում սխալից հետո: հնարավորության դեպքում ld- ը շարունակում է իրագործումը, թույլ տալով ձեզ բացահայտել այլ սխալներ (կամ, որոշ դեպքերում, ելքային ֆայլ ստանալու չնայած սխալի):

GNU- ի աղբարկղը ld- ն նախատեսվում է ընդգրկել իրավիճակների լայն շրջանակ եւ հնարավորինս համատեղելի լինել այլ հղումներով: Որպես հետեւանք, դուք ունեք բազմաթիվ ընտրություններ, վերահսկելու նրա վարքագիծը:

ԸՆՏՐՈՒԹՅՈՒՆՆԵՐԸ

Կապողը սատարում է հրամանի տող տարբերակների մեծամասնությանը, սակայն փաստացի պրակտիկայում դրանցից մի քանիսը օգտագործվում են ցանկացած կոնկրետում: Օրինակ, ld- ի հաճախակի օգտագործումը, ստանդարտ Unix օբյեկտի ֆայլերը հղում է ստանդարտ, աջակցվող Unix համակարգին : Նման համակարգում «hello.o» ֆայլը կապելու համար:

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

Սա ասում է, ld- ն արտադրում է « output» ֆայլ, որպես «hello.o» ֆայլի եւ «libc.a» գրադարանի հետ կապող արդյունքի արդյունքը, որը կգտնվի ստանդարտ որոնման դիրեկտիվներից: (Ստորեւ տրված « -l» տարբերակի քննարկումները):

Ld- ի հրամանի տող տարբերակներից ոմանք կարող են սահմանվել հրամանի տողի ցանկացած կետում: Այնուամենայնիվ, ընտրանքներ, որոնք վերաբերում են ֆայլեր, ինչպիսիք են -l կամ -T , պատճառը ֆայլը կարդացվում է այն կետում, որտեղ տարբերակը հայտնվում է հրամանի տողում, օբյեկտի ֆայլերի եւ այլ ֆայլի ընտրանքների համեմատ: Այլ տարբերակներով ոչ ֆայլային տարբերակները կրկնվելու կամ չեն ունենա որեւէ այլ ազդեցություն, կամ վերացնեն այդ տարբերակի նախորդ դեպքերը (այնուհետեւ `հրամանատարի գծի վրա): Ընտրանքներ, որոնք կարող են ավելի քան մեկ անգամ նշանակալիցորեն նշված լինել, ստորեւ ներկայացված նկարագրություններում նշված են:

Ոչ տարբերակ arguments են օբյեկտի ֆայլերը կամ արխիվները, որոնք պետք է կապվեն միասին: Նրանք կարող են հետեւել, նախորդել կամ խառնել հրամանատարական ընտրանքով, բացառությամբ, որ օբյեկտի ֆայլի փաստարկը չի կարող տեղադրվել տարբերակի եւ դրա փաստարկի միջեւ:

Սովորաբար հղումն արված է առնվազն մեկ օբյեկտի ֆայլով, բայց դուք կարող եք նշել թվային մուտքագրման այլ ձեւեր, օգտագործելով -l , -R , եւ սցենարի հրամանի լեզուն: Եթե ոչ մի թվային մուտքագրման ֆայլեր ընդհանրապես չեն նշվում, ապա հղումը չի արտադրում որեւէ արդյունք, եւ թողարկում է հաղորդագրություն մուտքագրման ֆայլեր :

Եթե ​​հղիչը չի կարող ճանաչել օբյեկտի ֆայլի ձեւաչափը, ապա այն ենթադրում է, որ դա հղիչի սցենար է: Այս ձեւով նկարագրված սցենարը ավելացնում է կապի համար օգտագործվող հիմնական հղիչի սցենարը (կամ նախընտրելի հղիչի սցենարը կամ օգտագործված -T- ով օգտագործվածը): Այս հատկությունը թույլ է տալիս հղիչին կապել օբյեկտի կամ արխիվի հետ, բայց իրականում պարզապես սահմանում է որոշակի խորհրդանիշ արժեքներ կամ օգտագործում է «INPUT» կամ «ԳՐՈՒՊ» այլ օբյեկտների բեռնման համար: Նշենք, որ սցենարով այս ձեւով նշելով, պարզապես ընդլայնում է հիմնական հղիչի սցենարը. օգտագործեք -T տարբերակը ամբողջությամբ փոխարինելու լռելյայն հղիչի սցենարը:

Ընտրանքների համար, որոնց անունները մեկ նամակ են, տարբերակն արգումենտները պետք է կամ հետեւեն տարբերակին, առանց տատանման միջամտության կամ առանձին փաստարկներ, որոնք պահանջվում են անմիջապես պահանջվող տարբերակից:

Ընտրանքների համար, որոնց անունները բազմակի տառեր են, կամ մեկ տող կամ երկուսը կարող են նախորդի անունը ներկայացնել: օրինակ, -համար-խորհրդանիշը եւ -տրեսա-խորհրդանիշը համարժեք են: Նշում. Մեկ բացառություն կա այս կանոնին: Մի քանի նամակ տարբերակները, որոնք սկսվում են ավելի ցածր գործից `o 'կարող են առաջանալ միայն երկու տողերով: Սա նվազեցնել շփոթություն -o- ի տարբերակով: Այսպիսով, օրինակ, - ժապավենը սահմանում է արտադրանքի ֆայլի անունը կախարդության մեջ, մինչդեռ - կախվածքը սահմանում է NMAGIC դրոշը արտադրանքի վրա:

Բազմակի նամակագրության տարբերակները պետք է բաժանվեն տարբերակի անվանից հավասար նշանով կամ որպես առանձին փաստարկներ անմիջապես հետո պահանջվող տարբերակին: Օրինակ ` fault- տառով-խորհրդանիշը եւ -trace-symbol = foo- ը համարժեք են: Ընդունվում են բազմաթիվ նամակների տարբերակների անունների եզակի հապավումներ:

Նշում `եթե հղիչը անուղղակիորեն հրավիրվում է, որպես compiler driver (օրինակ, gcc ), ապա բոլոր հղիչի հրամանի տող տարբերակները պետք է prefixed by -Wl, (կամ այն, ինչ համապատասխանում է կոնկրետ կազմող վարորդին) նման:

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

Սա կարեւոր է, քանի որ հակառակ դեպքում կոմպիլյատորային վարորդի ծրագիրը կարող է լուռ հեռացնել հղիչի տարբերակները, ինչի հետեւանքով վատ հղումը:

Ահա GNU- ի աղբարկղի կողմից ընդունված ընդհանուր հրամանատարական գծի սեղանները:

- մի բառ

Այս տարբերակը աջակցվում է HP / UX համատեղելիության համար: Հիմնաբառը փաստարկը պետք է լինի տողերի արխիվի , համօգտագործվածի կամ կանխադրվածի : -հարաբերությունը ֆունկցիոնալորեն համարժեք է -Bstatic- ը , իսկ մյուս երկու հիմնաբառերը գործունակորեն համարժեք են -Binynamic- ը : Այս տարբերակը կարող է օգտագործվել ցանկացած անգամ:

- Ճարտարապետություն

- արվեստի ճարտարապետություն

Ld- ի ներկա թողարկումում, այս տարբերակը օգտակար է միայն Intel 960 ճարտարապետական ​​ընտանիքի համար: Այդ ld կոնֆիգուրացիայում ճարտարապետական փաստարկը բացահայտում է 960 ընտանիքի որոշակի ճարտարապետությունը, ապահովելով որոշակի երաշխիքներ եւ փոխելու արխիվային գրադարանի որոնման ուղին:

Ld- ի ապագա թողարկումները կարող են աջակցել այլ ճարտարապետական ​​ընտանիքների համար:

-b մուտքագրման ձեւաչափ

--format = մուտքագրման ձեւաչափը

ld- ը կարող է կազմաձեւվել, աջակցելու ավելի քան մեկ տեսակի օբյեկտի ֆայլ: Եթե ​​ձեր ld- ը կազմաձեւված է այս ձեւով, ապա կարող եք օգտագործել -b տարբերակը, հրամանի տողում այս տարբերակը հետեւող մուտքագրման օբյեկտի ֆայլերի երկուական ձեւաչափը նշելու համար: Նույնիսկ այն դեպքում, երբ ld- ը կազմաձեւված է աջակցել այլընտրանքային օբյեկտի ձեւաչափերին, դուք սովորաբար չպետք է հստակեցնեք դա, քանի որ ld- ը պետք է կազմաձեւվի, որպես կանխադրված մուտքագրման ֆորմատ, ամեն մեքենայի ամենատարածված ձեւաչափը: մուտքային ձեւաչափը տեքստային տող է, BFD գրադարանների կողմից աջակցվող որոշակի ձեւաչափի անուն: (Դուք կարող եք ցուցակագրել առկա երկուական ձեւաչափերը objdump -i- ով :)

Հնարավոր է, ցանկանում եք օգտագործել այս տարբերակը, եթե դուք կապում եք ֆայլեր արտասովոր երկուական ձեւաչափով: Դուք նաեւ կարող եք օգտագործել դարձնել ֆորմատները բացահայտորեն (տարբեր ֆորմատների օբյեկտի ֆայլեր կապելիս ), ներառելով առանձին ձեւաչափով առարկայի ֆայլերի յուրաքանչյուր խմբի առաջադրման - ձեւաչափը:

Նախնական ձեւաչափը վերցված է «GNUTARGET» շրջակա միջավայրի փոփոխականից:

Կարող եք նաեւ սահմանել ներածման ձեւաչափը սցենարից `օգտագործելով« TARGET »հրամանագիրը:

-c MRI-commandfile

--mri-script = MRI-commandfile

MRI- ի կողմից արտադրվող հղվողների հետ համատեղելիության համար ld- ը ընդունում է GNU ld- ի փաստաթղթերի MRI Compatible Script Files բաժնում նկարագրված այլընտրանքային, սահմանափակ հրամանի լեզվով գրված սցենարներ: Ներկայացրեք MRI- ի սցենարների ֆայլերը -c ; Օգտագործեք -T տարբերակը `ընդհանուր նպատակային ld սցենարական լեզվով գրված հղվող սցենարները: Եթե MRI-cmdfile- ը գոյություն չունի, ld- ն փնտրում է այն ցանկացած դիրքի դիրեկտորիաներում, որոնք նշված են ցանկացած ընտրանքով :

- դ

-Դր

Այս երեք տարբերակները համարժեք են. բազմակի ձեւերը աջակցվում են այլ հղումներ ունեցողների հետ համատեղելիության համար: Նրանք տարածություն են տալիս ընդհանուր խորհրդանիշներին, նույնիսկ եթե տեղափոխվող արտադրանքի ֆայլը նշված է ( -r ): «FORCE_COMMON_ALLOCATION» սցենարի հրամանը նույն ազդեցությունն ունի:

- մուտքագրում

- ինստիտուտ = մուտքն է

Օգտագործեք գրառումը, որպես հստակ խորհրդանիշ, ձեր ծրագրի սկիզբը կատարելու համար, այլ ոչ թե լռելյայն մուտքի կետ: Եթե մուտքագրման նշան չկա, ապա հղիչը կփորձի մուտք գործել որպես համար, եւ օգտագործել այն, որպես մուտքի հասցե (համարը մեկնաբանվում է բազային 10-ում, կարող եք օգտագործել առաջատար 0x բազայի համար 16 կամ առաջատար 0 8-ի համար):

- Էքսպորտ-դինամիկ

Դինամիկ կերպով կապակցված գործարկվող ստեղծման ժամանակ ավելացրեք բոլոր նշանները դինամիկ խորհրդանիշային աղյուսակում: Դինամիկ խորհրդանիշային սեղանն այն խորհրդանիշների հավաքածուն է, որը ժամանակի ընթացքում դիտվում է դինամիկ օբյեկտներից:

Եթե ​​դուք չեք օգտագործում այս տարբերակը, ապա դինամիկ խորհրդանիշային աղյուսակը սովորաբար պարունակում է միայն այն խորհրդանիշները, որոնք հղում են կատարված հղումում նշված որոշ դինամիկ օբյեկտի:

Եթե ​​օգտագործում եք «dlopen» `դինամիկ օբյեկտ բեռնելու համար, որը պետք է վերադառնա ծրագրով սահմանված, այլ ոչ թե այլ դինամիկ օբյեկտի հետ վերադառնալու համար, ապա, հավանաբար, անհրաժեշտ է օգտագործել այս տարբերակը, երբ ծրագիրը կապում է:

Դուք նաեւ կարող եք օգտագործել տարբերակը սցենար `վերահսկելու համար, թե ինչ խորհրդանիշներ պետք է ավելացվեն դինամիկ խորհրդանիշ սեղանի վրա, եթե ելքային ձեւաչափը սատարում է: Տեսեք - վերափոխման-սցենարի նկարագրությունը @ ref {VERSION }- ում:

-ԵԲ

Կապել մեծածավալ օբյեկտները: Սա ազդում է ստանդարտ թողարկման ձեւաչափի վրա:

-ԵԼ

Նվիրաբերիր փոքրիկ օբյեկտներ: Սա ազդում է ստանդարտ թողարկման ձեւաչափի վրա:

- օժանդակ անուն

ELF ընդհանուր օբյեկտ ստեղծելով, սահմանեք ներքին DT_AUXILIARY դաշտը նշված անունին: Սա պատմում է դինամիկ աղյուսակին, որ ընդհանուր օբյեկտի խորհրդանիշը պետք է օգտագործվի որպես համօգտագործվող օբյեկտի անվան խորհրդանիշային սեղանի վրա օժանդակ զտիչ:

Եթե ​​դուք հետագայում ծրագրին կապակցեք այս ֆիլտրի օբյեկտի դեմ, ապա, երբ դուք վարում եք ծրագիրը, դինամիկ հղիչը կտեսնի DT_AUXILIARY դաշտը: Եթե ​​դինամիկ աղբարկիչը լուծում է ֆիլտրի օբյեկտի ցանկացած խորհրդանիշ, ապա առաջին հերթին ստուգելու է, թե արդյոք գոյություն ունի համօգտագործվող օբյեկտի անվանում : Եթե ​​կա մեկը, ապա այն կկիրառվի ֆիլտրի օբյեկտի սահմանման փոխարեն: Համատեղ օբյեկտի անունը չպետք է գոյություն ունենա: Այսպիսով, համօգտագործվող օբյեկտի անվանումը կարող է օգտագործվել որոշակի գործառույթների այլընտրանքային գործառույթների ապահովման համար, հնարավոր է, խափանման կամ մեքենայի կոնկրետ կատարման համար:

Այս տարբերակը կարող է սահմանվել ավելի քան մեկ անգամ: DT_AUXILIARY գրառումները կստեղծվեն հրամանի տողում հայտնվող կարգում:

-F անունը

- ֆիլտր անունը

ELF- ի ընդհանուր օբյեկտ ստեղծելով, սահմանեք ներքին DT_FILTER դաշտը նշված անունին: Սա պատմում է դինամիկ հղիչին, որ ստեղծվող ընդհանուր օբյեկտի խորհրդանիշը պետք է օգտագործվի որպես համօգտագործվող օբյեկտի անվան խորհրդանիշային սեղանի վրա զտիչ:

Եթե ​​դուք հետագայում ծրագիրն այս ֆիլտրի օբյեկտի հետ կապում եք, ապա, երբ ծրագիրը վարում եք, դինամիկ աղյուսակը կտեսնի DT_FILTER դաշտը: Դինամիկ աղբարկիչը կվերլուծի խորհրդանիշերը ֆիլտրի օբյեկտի խորհրդանիշի սեղանին, ինչպես միշտ, բայց դա իրականում կախված է համօգտագործվող օբյեկտի անվանման մեջ նշված սահմանումներից: Այսպիսով, ֆիլտրի օբյեկտը կարող է օգտագործվել օբյեկտի անունով տրամադրված խորհրդանիշների ենթաբազմություն ընտրելու համար:

Որոշ հին հղումներ օգտագործեցին -F տարբերակով, կազմման գործիքի համար `օբյեկտի ֆայլի ձեւաչափը նշելու համար, այնպես էլ մուտքի եւ ելքի օբյեկտի ֆայլերի համար: GNU- ի աղյուսակն օգտագործում է այս մեխանիզմների այլ մեխանիզմներ ` -b , --format , --format ընտրանքներ,« TARGET »հրամանը կապող սցենարներում եւ« GNUTARGET »շրջակա միջավայրի փոփոխական: GNU- ի հղիչը անտեսում է -F տարբերակը, երբ ELF- ի համատեղ օբյեկտ չի ստեղծում:

-ֆինի անունը

ELF- ի գործարկվող կամ համօգտագործվող օբյեկտ ստեղծելով, NAME- ին զանգահարեք, երբ գործարկվող կամ համօգտագործվող օբյեկտը բեռնաթափվում է, DT_FINI- ի գործառույթը հասցեով: Նախաձեռնությամբ, հղումը օգտագործում է «_fini» որպես զանգահարելու գործառույթ:

Անընդունելի է: Ապահովված է այլ գործիքների հետ համատեղելիությամբ:

-G արժեքը

- gpsize = արժեք

Սահմանեք օբյեկտների առավելագույն չափը `օպտիմալացված, օգտագործելով GP ռեգիստրը: Սա միայն իմաստալի է օբյեկտի ֆայլի ձեւաչափերի համար, ինչպիսիք են MIPS ECOFF- ը, որն աջակցում է մեծ եւ փոքր օբյեկտների տարբեր բաժիններում: Սա անտեսվում է այլ օբյեկտի ֆայլի ձեւաչափերի համար:

- անունը

-soname = name

ELF- ի համատեղ օբյեկտ ստեղծելով, սահմանեք ներքին DT_SONAME դաշտը նշված անունին: Երբ գործարկվողը կապված է DT_SONAME դաշտի հետ համակցված օբյեկտի հետ, ապա, երբ գործարկվողը գործարկվում է, դինամիկ աղյուսակը կփորձի բեռնել DT_SONAME դաշտի կողմից նշված ընդհանուր օբյեկտը, այլ ոչ թե օգտագործել հղիչին տրված ֆայլի անունը:

-i

Կատարել ավելորդ հղում (նույնը, ինչպես տարբերակը -r ):

- անունը

ELF- ի գործարկվող կամ համօգտագործվող օբյեկտ ստեղծելով, NAME- ին զանգահարեք, երբ գործարկվող կամ համօգտագործվող օբյեկտը բեռնված է, DT_INIT- ը `գործառույթի հասցեին: Նախաձեռնությամբ, հղումը օգտագործում է «_init» `որպես զանգահարելու գործառույթ:

արխիվ

-library = արխիվ

Ավելացնել արխիվային ֆայլի արխիվը ֆայլերի ցանկին հղման համար: Այս տարբերակը կարող է օգտագործվել ցանկացած անգամ: ld- ը կգտնի իր ուղիների ցուցակը «libarchive.a» -ի դեպքերի համար `նշված յուրաքանչյուր արխիվի համար:

Համակարգերի վրա, որոնք աջակցում են համընդհանուր գրադարաններին, ld- ը կարող է որոնել նաեւ «.a» -ից բացի այլ ընդարձակման գրադարաններ: Մասնավորապես, ELF- ի եւ SunOS համակարգերի վրա ld- ն կգտնվի «. Ա» տողով ընդգրկված մեկի որոնումից առաջ «.so» ընդլայնմամբ գրադարան որոնելու համար: Կոնվենցիայով, «.so» ընդլայնումը ցույց է տալիս միասնական գրադարան:

Հղումը կցուցադրի արխիվը միայն մեկ անգամ `այն վայրում, որտեղ նշված է հրամանի տողում: Եթե ​​արխիվը սահմանում է հրամանի տողում արխիվի առջեւ դրված մի օբյեկտի մեջ չգտնված խորհրդանիշ, ապա հղիչը կներառի համապատասխան ֆայլ (ներ) արխիվից: Այնուամենայնիվ, հրամանի տողում հայտնված օբյեկտի անբավարար սիմվոլը չի ​​հանգեցնում հղիչին կրկին փնտրելու արխիվը:

Տեսեք - ( տարբերակը, հղում կատարելու համար մի քանի անգամ արխիվ փնտրելու համար:

Դուք կարող եք թվարկել նույն արխիվը հրամանի տողում բազմակի անգամ:

Արխիվային որոնման այս տեսակը հանդիսանում է Unix հղումներ ստանդարտների համար: Այնուամենայնիվ, եթե օգտագործում եք ld onAIX, նշեք, որ դա տարբերվում է AIX- ի աղյուսակի վարքից:

-L searchdir

- կրկնօրինակ-ուղի = որոնում

Ավելացնել ճանապարհի որոնում դեպի այն ուղիների ցանկը, որը կգտնի արխիվային գրադարանների եւ ld հսկողության սցենարներ: Դուք կարող եք օգտագործել այս տարբերակը ցանկացած անգամ: Կատալոգները փնտրվում են հրամանի տողում նշված կարգի մեջ: Հրամանի տողում նշված դիրեկտորիաները որոնվում են նախնական դիրեկտորիաներից առաջ: All- L տարբերակները կիրառվում են բոլոր տարբերակներում, անկախ նրանից, թե ինչ կարգադրություններ են հայտնվում:

Եթե որոնումը սկսվում է "=", ապա "=" -ը կփոխարինվի sysroot նախածանցով , այն դեպքում, երբ հղումը կազմաձեւված է:

Որոնվող ուղիների նախնական հավաքածուն (առանց « Լ- ով» նշված) կախված է, թե որն է emulation ռեժիմի ld- ը, եւ որոշ դեպքերում նաեւ այն, թե ինչպես է այն կազմաձեւվել:

Ճանապարհները կարող են նաեւ նշել «SEARCH_DIR» հրահանգով հղման սցենարով: Այս ձեւով նշված դիրեկտորիաները որոնվում են այն կետում, որտեղ հղվող սցենարը հայտնվում է հրամանի տողում:

զգացմունքները

Զգուշացեք արտածման հղիչից: Դուք կարող եք ցուցակագրել առկա emulations - ի բացարձակ կամ V- options.

Եթե -m տարբերակը չօգտագործվի, ապա արտացոլումը վերցվում է «LDEMULATION» շրջակա միջավայրի փոփոխականից, եթե այն սահմանված է:

Հակառակ դեպքում, նախնական թողարկումը կախված է նրանից, թե ինչպես է կապողը կազմաձեւված:

- տպագրական քարտեզ

Ստանդարտ թողարկման հղիչի քարտեզը տպեք: Կապի քարտեզը տրամադրում է հղումը, ներառյալ հետեւյալը.

*

Որտեղ օբյեկտի ֆայլերը եւ խորհրդանիշները քարտեզագրվում են հիշողության մեջ:

*

Ինչպես են ընդհանուր խորհրդանիշները հատկացվում:

*

Արխիվային բոլոր անդամները, որոնք ընդգրկված են հղում, նշելով հիշատակի խորհրդանիշը, որը բերեց արխիվի անդամին:

- նմագիկ

Անջատեք էջերի դասավորվածությունը բաժիններում եւ հնարավորինս նշեք արտադրանքը որպես "NMAGIC":

- մոմակալ

Տեքստի եւ տվյալների բաժինները կարգավորեք եւ կարդալու համար: Միեւնույն ժամանակ, միացրեք տվյալների ծավալի էջը եւ միացրեք համակցված գրադարանների կապը: Եթե ​​ելքային ֆորմատը սատարում է Unix- ի ոճի մոգական համարները, նշեք արտադրանքը որպես «OMAGIC»:

- ոչ omagic

Այս տարբերակը անտեսում է -N տարբերակի ազդեցությունները: Այն սահմանում է տեքստի բաժինը միայն կարդալու համար եւ ստիպում է տվյալների հատվածը լինել էջի վրա: Նշում. Այս տարբերակը չի թույլատրում համակցված գրադարաններից կապել: Օգտագործեք սա ` դինամիկ :

արդյունքը

- ելք = ելք

Օգտագործեք արտադրանքը, որպես ld- ի կողմից մշակված ծրագրի անվանումը: եթե այս տարբերակը նշված չէ, ապա a.out անունը օգտագործվում է լռելյայնորեն: Սցենարի հրամանը "OUTPUT" կարող է նաեւ սահմանել ելքային ֆայլի անունը:

- մակարդակը

Եթե մակարդակը թվային արժեքներ ավելի մեծ է, քան zero ld- ը, օպտիմալացնում է արտադրանքը: Սա կարող է զգալիորեն երկարաձգվել եւ, հետեւաբար, հավանաբար պետք է միայն հնարավորություն ընձեռվի վերջնական երկուական համար:

- Էմիտ-relocs

Թողնել տեղահանման բաժինները եւ բովանդակությունը լիովին կապված exsecutables- ում: Post link- ի վերլուծությունը եւ օպտիմալացման գործիքները կարող են անհրաժեշտ լինել այս տեղեկատվությունը, որպեսզի կատարվեն կատարվող փոփոխությունների ճիշտ փոփոխություններ: Սա հանգեցնում է ավելի մեծ կատարողականների:

Այս տարբերակը ներկայումս աջակցում է միայն ELF պլատֆորմներում:

-relocateable

Ստեղծեք տեղաշարժվող արտադրանք --- այսինքն, առաջացնում է արտադրանքի ֆայլ, որը կարող է իր հերթին ծառայել որպես ld- ի ներդրում: Սա հաճախ անվանում է մասնակի կապ : Որպես կողմնակի ազդեցություն, այն միջավայրերում, որոնք աջակցում են ստանդարտ Unix կախարդական թվեր, այս տարբերակը նաեւ սահմանում է արտադրանքի ֆայլի կախարդական համարը «OMAGIC»: Եթե ​​այս տարբերակը նշված չէ, բացարձակ ֆայլ է արտադրվում: C ++ ծրագրերը կապակցելով, այս տարբերակը չի լուծի հղումները շինարարներին: դա անել, օգտագործեք -Ur .

Երբ մուտքի ֆայլը չունի այնպիսի ձեւաչափ, որը ելքային ֆայլ է, մասնակի կապումը միայն աջակցվում է, եթե այդ մուտքագրման ֆայլը չի ​​պարունակում որեւէ տեղաշարժ: Տարբեր արտադրանքի ձեւաչափերը կարող են հետագա սահմանափակումներ ունենալ. օրինակ, «a.out» - ի վրա հիմնված որոշ ձեւաչափերը չեն աջակցում մասնակիորեն կապակցված ներածական ֆայլեր այլ ձեւաչափերով:

Այս տարբերակը նույնն է, ինչ-ը:

-R ֆայլի անունը

--just-symbols = ֆայլի անունը

Կարդացեք սիմվոլների անունները եւ դրանց հասցեները ֆիլնեմի անունից, սակայն դրանք տեղափոխեք կամ ընդգրկեք այն արտադրանքի մեջ: Սա թույլ է տալիս ձեր արտադրանքի ֆայլը խորհրդանշական կերպով դիմել այլ ծրագրերում սահմանված հիշողության բացարձակ վայրերին: Դուք կարող եք օգտագործել այս տարբերակը մեկից ավելի անգամ:

Այլ ELF հղումներ ունեցող ընկերությունների հետ համատեղելու համար, եթե -R տարբերակը հաջորդում է գրացուցակի անվանումը, այլ ոչ թե ֆայլի անուն, ապա այն համարվում է « պտուղի» տարբերակ:

- ցնցող-բոլորը

Բաց թողնել բոլոր խորհրդանիշ տեղեկատվությունը արտադրանքի ֆայլից:

- ժապավեն

Բաց թողնել կարգաբերիչի խորհրդանիշի տեղեկությունները (բայց ոչ բոլոր նշանները) ելքային ֆայլից:

- զուգահեռ

Տպել ֆայլերի անունները տպագրեք որպես ld պրոցեսորներ :

-T scriptfile

- script = scriptfile

Օգտագործեք scriptfile- ը որպես հղիչի սցենար: Այս սցենարը փոխարինում է ld- ի լռելյայն հղիչի սցենարով (փոխարենը ոչ թե ավելացնելով), այնպես որ commandfile- ը պետք է նշի, որ անհրաժեշտ է նկարագրել արտադրանքի ֆայլը: Եթե սցենարիֆը գոյություն չունի ընթացիկ գրացուցակում, «ld» - ն այն նախընտրում է նախորդող տարբերակների նշված դիրեկտորիաներում: Բազմապատիկ -T տարբերակները կուտակվում են:

-u խորհրդանիշ

- Նշված = խորհրդանիշ

Ձայնային նշան է մուտքագրվում արտադրանքի ֆայլում `որպես undefined սիմվոլ: Դա կարող է, օրինակ, կցկտուր լրացուցիչ մոդուլների կապը ստանդարտ գրադարաններից: -u կարող են կրկնվել տարբեր տարբերակային փաստարկներ, լրացուցիչ որոշակի նշաններ մուտք գործելու համար: Այս տարբերակը համարժեք է «EXTERN» հղիչի սցենարի հրամանին:

-Ur

C ++ ծրագրերից բացի այլ բաների համար, այս տարբերակը համարժեք է-r- այն առաջացնում է տեղաշարժվող արտադրանք, այսինքն, արտադրանքի ֆայլ, որը կարող է իր հերթին ծառայել որպես ld- ի մուտք : C ++ ծրագրերը կապակցելով, -Ur- ը լուծումներ է տալիս կառուցողներին, ի տարբերություն -r : Այն չի աշխատում, օգտագործելու -Ur ֆայլերի վրա, որոնք իրենց հետ կապված էին -Ur ; երբ շինարարական աղյուսակը կառուցվել է, այն չի կարող ավելացվել: Օգտագործեք ` միայն վերջին մասնակի հղման համար, եւ մյուսների համար:

- աննկատ [= SECTION ]

Ստեղծում է առանձին հատվածի բաժին, որը համապատասխանում է յուրաքանչյուր հատվածի բաժին, որը համապատասխանում է բաժինին, կամ եթե բացակայում է յուրաքանչյուր սեռի ներածման բաժնում ընտրովի սոլդովային հատվածի փաստարկը բացակայում է: Անբասիր բաժինը մեկն է, որը կոնկրետ նշված չէ հղվող սցենարի մեջ: Դուք կարող եք օգտագործել այս տարբերակը մի քանի անգամ հրամանի տողում. Այն կանխում է նույն անունով մուտքագրման բաժինների նորմալ միացում, գերազանցում է թողարկման բաժնի հանձնարարությունները հղվող սցենարի մեջ:

- տարբերություն

Ցուցադրել տարբերակը ld- ի համար : The -V տարբերակը նաեւ թվարկում է աջակցվող emulations- ը:

-Դիսկարդ-բոլորը

Ջնջել բոլոր տեղական խորհրդանիշները:

-X

- դիսկուրսի տեղացիներ

Ջնջել բոլոր ժամանակավոր տեղական նշանները: Շատ թիրախների համար սա բոլոր տեղական խորհրդանիշերն են, որոնց անունները սկսվում են L- ից :

- խորհրդանիշ

- տող-խորհրդանիշ = նշան

Տպեք յուրաքանչյուր հղվածի ֆայլի անվանումը, որի խորհրդանիշը հայտնվում է: Այս տարբերակը կարող է տրվել ցանկացած անգամ: Շատ համակարգերում հարկավոր է նախանշել նախանշումը:

Այս տարբերակը օգտակար է այն դեպքում, երբ ձեր հղման վրա չունեք անբավարար խորհրդանիշ, բայց չգիտեք, թե որտեղ է հղումը:

-Y ուղին

Ավելացնել գրադարանի որոնման ուղին դեպի ճանապարհ: Այս տարբերակը գոյություն ունի Solaris- ի համատեղելիության համար:

-z բանալին

Հայտնաբերված հիմնաբառեր են «initfirst», «interpose», «loadfltr», «nodefaultlib», «nodelete», «nodlopen», «nodump», «now», «origin», «combreloc», «nocombreloc» եւ «nocopyreloc »: Այլ հիմնաբառեր անտեսվում են Solaris- ի համատեղելիության համար: «initfirst» - ը նշում է, որ օբյեկտը պետք է սկզբնավորվի առաջ ռեժիմում ցանկացած այլ օբյեկտի առաջ: "interpose" նշում է այն օբյեկտը, որը իր խորհրդանիշ սեղանն ընդգրկում է նախքան բոլոր խորհրդանիշները, սակայն առաջնային գործարկիչը: "loadfltr" նշում է օբյեկտը, որ իր filtees- ը անմիջապես մշակվում է գործողության ժամանակ: ցանկացած կանխադրված գրադարանի որոնման ուղիները: "nodelete" նշում է, որ օբյեկտը չպետք է բեռնաթափվել է առաջադրվելու ժամանակ: «nodlopen» - ը նշում է «dlopen» - ին անհասանելի օբյեկտը: «nodump» նշում է, որ օբյեկտը չի կարող dumpped կողմից «dldump»: «այժմ» -ը օբյեկտը նշում է ոչ ծույլ ռեժիմի պարտադիր կապակցությամբ, «ծագումը» նշում է, որ օբյեկտը կարող է պարունակել $ ORIGIN: «դեֆիցիտ» արգելում է անորոշ պատկերներ: «muldefs» թույլ է տալիս բազմաթիվ սահմանումներ: «combreloc» - ը համատեղում է բազմաբնույթ տեղաբաշխման բաժիններ եւ դրանք տեսնում են դինամիկ հիշողություն հավաքելու համար:

«nocombreloc» - ը անջատում է բազմակի տեղամասային բաժինները: «nocopyreloc» - ը կասեցնում է պատճենների տեղափոխման արտադրությունը:

- ( արխիվները )

- նախորդ խմբերի արխիվները - վերադարձի խումբ

Արխիվները պետք է լինեն արխիվային ֆայլերի ցանկ: Նրանք կարող են լինել հստակ ֆայլի անուններ կամ -l տարբերակներ:

Նշված արխիվները որոնվում են բազմիցս, մինչեւ նոր անորոշ հղումներ չեն ստեղծվում: Սովորաբար, արխիվը որոնվում է միայն մեկ անգամ հրամանի տողում նշված կարգով: Եթե ​​այդ արխիվում խորհրդանիշ է անհրաժեշտ, որպեսզի հետագայում հրամանի տողում հայտնվի այն արխիվի մեջ գտնվող օբյեկտի կողմից նշված անբավարար սիմվոլը, հղումը չի կարողանա լուծել այդ հղումը: Արխիվների խմբավորմամբ, նրանք բոլորը փնտրում են բազմիցս, մինչեւ բոլոր հնարավոր հղումները լուծվեն:

Օգտագործելով այս տարբերակը ունի նշանակալի կատարողական արժեք: Լավ է օգտագործել այն միայն այն ժամանակ, երբ երկու կամ ավելի արխիվների միջեւ գոյություն ունեն անխուսափելի շրջանաձեւ հղումներ:

- բացակայում է, անհայտ - մուտքային-arch

- ոչ ընդունելի-անհայտ մուտքային-arch

Պատկանում է հղիչին ընդունելու ներածական ֆայլերը, որոնց ճարտարապետությունը չի կարող ճանաչվել: Ենթադրումն այն է, որ օգտագործողը գիտի, թե ինչ են անում եւ գիտակցաբար ցանկանում են կապել այդ անհայտ ներածման ֆայլերում: Սա հղվողի նախնական վարքագիծն էր, մինչեւ ազատ արձակումը 2.14: 2.14-ից դուրս թողած կանխադրված վարքագիծն այնպիսին է, որը մերժում է այդ մուտքագրման ֆայլերը, եւ այդպիսին է, որ հին վարքագիծը վերականգնելու համար ավելացվել է անհասկանալի- input-arch տարբերակը:

- խոսքի բառեր

Այս տարբերակը անտեսվում է SunOS- ի համատեղելիության համար :

-Բինինամիկ

-Դու

-Քարփ_շառեց

Դինամիկ գրադարանների դեմ հղում: Սա միայն իմաստալի է այն պլատֆորմների համար, որոնց համար ընդհանուր գրադարանները աջակցվում են: Այս տարբերակը նորմալ է նման պլատֆորմներում: Այս տարբերակի տարբեր տարբերակները տարբեր համակարգերի հետ համատեղելի են: Դուք կարող եք օգտագործել այս տարբերակը մի քանի անգամ հրամանի տողում. Այն ազդում է գրադարանի որոնման համար -l տարբերակներից, որոնք հետեւում են դրանց:

-Բրախումբ

Սահմանեք «DF_1_GROUP» դրոշը «DT_FLAGS_1» մուտքի դինամիկ բաժնում: Սա առաջացնում է ռեսուրսների հղիչը այս օբյեկտի որոնումները կարգավորելու եւ դրա կախվածությունը կատարելու համար միայն խմբի ներսում: - ոչ ենթադրյալ է ենթադրվում: Այս տարբերակը միայն իմաստալից է ELF պլատֆորմներում, որոնք աջակցում են հանրային գրադարաններին :

-Բստատական

-դն

-non_shared

Ստատիկ

Միակցեք համօգտագործված գրադարաններից: Սա միայն իմաստալի է այն պլատֆորմների համար, որոնց համար ընդհանուր գրադարանները աջակցվում են: Այս տարբերակի տարբեր տարբերակները տարբեր համակարգերի հետ համատեղելի են: Դուք կարող եք օգտագործել այս տարբերակը մի քանի անգամ հրամանի տողում. Այն ազդում է գրադարանի որոնման համար -l տարբերակներից, որոնք հետեւում են դրանց:

-Բիմիմբալիկ

Համատեղ գրադարան ստեղծելով, գլոբալ խորհրդանիշներին հղումներ հղեք համացանցային գրադարանի սահմանմանը, եթե առկա է: Սովորաբար հնարավոր է, որ միասնական գրադարանի դեմ կապված ծրագիրն ընդգրկվի ընդհանուր գրադարանի սահմանման մեջ: Այս տարբերակը միայն իմաստալից է ELFplatforms- ում, որն աջակցում է համընդհանուր գրադարաններին:

- ստուգման բաժիններ

- չկան ստուգման բաժիններ

Դիմորդին խնդրում է ոչ թե ստուգել բաժնի հասցեները, հետո նշանակվել են, թե արդյոք առկա են համընկնումներ: Սովորաբար հղումը կատարելու է այս ստուգումը, եւ եթե գտնում է, որ համընկնումը տեղի է ունենում, այն կստեղծի համապատասխան սխալ հաղորդագրություններ: Բաղադրիչը տեղյակ է, եւ չի կատարում արտահագուստը կափարիչների բաժինների համար: Նախնական պահվածքը կարող է վերականգնվել, օգտագործելով հրամանի տող անցաբառը `ստուգիչ բաժինները :

- ակֆ

Եզրագծային աղյուսակի թողարկում: Եթե ​​հղվող քարտեզի ֆայլը գեներացվում է, խաչի տեղեկատու աղյուսակը տպվում է քարտեզի վրա: Հակառակ դեպքում, այն տպագրվում է ստանդարտ արտադրանքի վրա:

Սեղանի ձեւաչափը միտումնավոր պարզ է, որպեսզի անհրաժեշտության դեպքում հեշտությամբ մշակվի սցենարով: Սիմվոլները տպագրվում են, դասակարգվում են անունով: Յուրաքանչյուր խորհրդանիշի համար տրվում է ֆայլի անունների ցանկ: Եթե ​​խորհրդանիշը սահմանվում է, ապա նշված առաջին ֆայլը սահմանման տեղն է: Մնացած ֆայլերը պարունակում են խորհրդանիշի հղումներ:

- ոչ սահմանում

Այս տարբերակը խոչընդոտում է ընդհանուր խորհրդանիշների հասցեների հանձնարարությունը: «INHIBIT_COMMON_ALLOCATION» սցենարի հրամանը նույն ազդեցությունն ունի:

The non-define-common option- ը թույլ է տալիս որոշել որոշում կայացնել հասցեների ընդհանուր նմուշներին ելքային ֆայլի տեսակի ընտրությունից: հակառակ դեպքում, Ոչ- Relocatable ելքային տիպի ուժերը ստիպում են հասցեներ տալ Ընդհանուր խորհրդանիշներին: Օգտագործելով չօգտագործված ընդհանուր օգտագործման թույլատրված ընդհանուր նշանները, որոնք հղում են համացանցային գրադարանին, նշանակվելու են հասցեներ միայն հիմնական ծրագրում: Սա վերացնում է չօգտագործվող կրկնօրինակը տարածված գրադարանում, ինչպես նաեւ կանխում է հնարավոր խառնաշփոթությունը սխալ վերարտադրման համար լուծելու համար, երբ առկա են դինամիկ մոդուլներ `ռադիոհաճախականության լուծման հատուկ որոնման ճանապարհներով:

- defsym symbol = արտահայտություն

Ստեղծեք համընդհանուր խորհրդանիշ արտադրանքի ֆայլում, պարունակող արտահայտությամբ բացարձակ հասցե: Դուք կարող եք օգտագործել այս տարբերակը այնքան ժամանակ, որքան անհրաժեշտ է սահմանել հրամանի տողում բազմաթիվ նշաններ: Այս համատեքստում արտահայտման համար աջակցվում է սահմանափակ թվով թվաբանություն. Կարող եք տալ տասնվեցամյա հաստատուն կամ գոյություն ունեցող խորհրդանիշի անվանումը կամ օգտագործել "+" եւ "-" տասնամյակային սահմանները կամ նշանները ավելացնել կամ հանել: Եթե ​​Ձեզ անհրաժեշտ է ավելի մանրամասն արտահայտություններ, դիտեք հղիչի հրամանի լեզուն սցենարից: Նշում. Չպետք է լինի սպիտակ տարածություն սիմվոլ միջեւ, հավասար է նշանը (`` = '') եւ արտահայտությունը :

--demangle [= style ]

- ոչ դանդաղ

Այս ընտրանքները վերահսկում են, թե արդյոք սխալ նշաններով եւ այլ արդյունքներով խորհրդանշաններն անվանում են: Երբ հղիչին ասվում է, որ այն դադարում է, այն փորձում է ներկայացնել սիմվոլների անունները ընթերցող կերպով. Այն շերտեր է շեղում առաջատար գծերը, եթե դրանք օգտագործվում են օբյեկտի ֆայլի ձեւաչափով եւ փոխակերպում C ++ մանգաղված խորհրդանիշ անունները օգտագործողի համար ընթերցվող անուններին: Տարբեր կոմպիլյատորները տարբեր ճյուղեր են պարունակում: Ընտրովի դավանող ոճը փաստարկը կարող է օգտագործվել ձեր Կազմողի համար համապատասխան դեգպանման ոճը ընտրելու համար: Հղումը կախված կլինի լռելյայն, եթե COLLECT_NO_DEMANGLE շրջակա միջավայրի փոփոխականությունը չի սահմանվել: Այս տարբերակները կարող են օգտագործվել կանխելու համար կանխադրվածը:

- դինամիկ-հղվող ֆայլ

Սահմանել դինամիկ աղյուսակի անունը: Սա միայն իմաստալից է, երբ դինամիկորեն կապված ELF- ի կատարման համար ստեղծվում է: Նախնական դինամիկ աղյուսակը սովորաբար ճիշտ է, մի օգտագործեք սա, եթե չգիտեք, թե ինչ եք անում:

- ամբարտավան

Այս տարբերակը միայն իմաստալից է, երբ կապվում է MIPS- ի ներդրված PIC- ի կոդը, որը գեներացվել է -համապատասխան-ի տարբերակով, GNU- ի կոմպիլյատորին եւ հավաքիչին: Այն առաջացնում է աղբարկղը ստեղծել աղյուսակ, որը կարող է օգտագործվել ժամանակի ընթացքում տեղափոխելու համար ցանկացած տվյալների տեղափոխման համար, որը ստատիկորեն սկզբնավորվել է ցուցիչի արժեքներով: Մանրամասների համար տեսեք testuite / ld-empic- ի կոդը:

- վնասակար նախազգուշացում

Բուժել բոլոր նախազգուշացումները որպես սխալներ :

--force-exe-suffix

Համոզվեք, որ արտադրանքի ֆայլը ունի .exe suffix:

Եթե ​​հաջողությամբ կառուցված ամբողջական կապակցված արտադրանքի ֆայլը չունի ". Exe " կամ " .dll " suffix, ապա այս տարբերակը ստիպում է հղում կատարել արտադրանքի ֆայլը նույն անունից մեկին «.exe» տառատեսակով: Այս տարբերակը օգտակար է Microsoft Windows- ի սերվերում unmodified Unix makefiles- ի օգտագործման ժամանակ, քանի որ Windows- ի որոշ տարբերակները չեն գործադրի պատկեր, եթե այն ավարտվի «.exe» անվանումով:

- Ոչ-gc- բաժիններ

- երեսուն բաժին

Միացնել թույլատրված ներածման բաժինների աղբի հավաքումը: Այն անտեսվում է թիրախների վրա, որոնք չեն աջակցում այս տարբերակը: Այս տարբերակը չի համապատասխանում- r , եւ ոչ էլ այն պետք է օգտագործվի դինամիկ կապով: Նախնական վարքագիծը (այս աղբահանության չգործող չլինելը ) կարող է վերականգնվել, նշելով հրամանի տողում ոչ no-gc- բաժինները :

--Օգնություն

Ստանդարտ թողարկման եւ ելքի հրամանի տող ընտրանքների ամփոփ նկարագիրը:

- target-help

Ստանդարտ թողարկման եւ ելքի վերաբերյալ բոլոր թիրախային հատուկ ընտրանքների ամփոփ նկարագիրը:

- քարտեզի նկարագրությունը

Տպել քարտեզը քարտեզը ֆայլի քարտեզի վրա : Տես վերը նշված -M տարբերակի նկարագրությունը:

- ոչ պահելու հիշողություն

ld- ը սովորաբար օպտիմիզացնում է հիշողությունների օգտագործման արագությունը `մուտքագրելով հիշողության ֆայլերը խորհրդանշելով հիշողության մեջ: Այս տարբերակը պատմում է ld- ի փոխարեն `օգտագործելով հիշողության օգտագործման օպտիմալացում` անհրաժեշտության դեպքում խորհրդանշելով սեղանները: Սա կարող է պահանջվել, եթե ld- ը սպառվում է հիշողության տարածությունից, կապելով մեծ գործադիրը:

- ոչ- undefined

-s defs

Սովորաբար, ոչ խորհրդանշական միասնական գրադարան ստեղծելու ժամանակ թույլատրվում է թույլատրված նշաններ եւ թողնում են լուծման ռեժիմի բեռնիչը: Այս ընտրանքները թույլ չեն տալիս նման անսահման նշաններ:

- ամբողջությամբ-բազմակի սահմանում

-զ մալդեֆներ

Սովորաբար, երբ մի քանի անգամ սահմանվում է խորհրդանիշ, հղիչը կպատմի ճակատագրական սխալ: Այս ընտրանքները թույլ են տալիս մի քանի սահմանումներ, եւ առաջին սահմանումը կօգտագործվի:

- allow-shlib-undefined

Թույլատրել չհիշատակված նշանները ընդհանուր օբյեկտներում, նույնիսկ այն դեպքում, երբ und unified- ը սահմանվում է: Զուտ արդյունքը կլինի այն, որ կանոնավոր օբյեկտներում անճանապարհային նշանները դեռեւս կխրախուսեն սխալ, սակայն ընդհանուր օբյեկտների անբավարար սիմվոլները անտեսվեն: No_undefined- ի իրականացումն այն ենթադրությունն է դարձնում, որ ռեժիմի կցորդը խեղաթյուրում է անորոշ պատկերների վրա: Այնուամենայնիվ, կա առնվազն մեկ համակարգ (BeOS), որտեղ սովորական գրադարաններում անիմաստ սիմվոլները նորմալ են, քանի որ միջուկը տեղադրվում է բեռի ժամանակ `ընտրելու համար, թե որ գործառույթն է առավել համապատասխանում ընթացիկ ճարտարապետությանը: IE- ն դինամիկ կերպով ընտրում է համապատասխան memset գործառույթ: Ակնհայտ է նաեւ, որ ՀԱԷԿ-ի հետ համատեղ գրադարանների համար նորմալ է, որ չունենա անորոշ նշաններ:

- ոչ- undefined- տարբերակը

Սովորաբար, երբ խորհրդանիշն ունի undefined տարբերակը, ապա հղիչը անտեսում է այն: Այս տարբերակը թույլ չի տալիս անիմաստ տարբերակ ունեցող խորհրդանիշներ եւ դրա փոխարեն կստացվի ճակատագրական սխալ:

- ոչ զգուշացնող-անհամապատասխանող

Սովորաբար ld- ը սխալ կպատճառի, եթե փորձեք միացնել կապի ֆայլերը, որոնք անհամապատասխան են որեւէ պատճառով, գուցե այն պատճառով, որ դրանք կազմվել են տարբեր պրոցեսորների կամ տարբեր endiannesses- ի համար: Այս տարբերակն ասում է, որ այն պետք է լռաբար թույլ տա նման հնարավոր սխալները: Այս տարբերակը պետք է օգտագործվի միայն խնամքով, այն դեպքերում, երբ դուք ստացել եք որոշակի հատուկ գործողություն, որը կապահովի, որ կապող սխալները տեղին չեն:

- ոչ ամբողջական արխիվ

Անջատեք արխիվային տարբերակը `արխիվային ֆայլերի հետագա արխիվներում:

- ոչինչբիթ-exec

Պահպանեք գործարկվող արտադրանքի ֆայլը, երբ այն դեռեւս օգտագործելի է: Սովորաբար, հղումը չի արտադրի արտադրանքի ֆայլ, եթե այն հանդիպում է սխալների հղման գործընթացի ընթացքում, այն դուրս է գալիս առանց արտադրողականության ֆայլ գրելիս, երբ որեւէ սխալ առաջացնում է:

-Նոստդլիբ

Հուշման գծում հստակորեն նշված որոնման գրադարանների գրացուցակները: Պահեստավորված սցենարներում նշված գրադարանային տեղեկատուները (ներառյալ հրամանի տողում նշված հղվող սցենարները) անտեսվում են:

--format արտադրանքի ձեւաչափը

ld- ը կարող է կազմաձեւվել, աջակցելու ավելի քան մեկ տեսակի օբյեկտի ֆայլ: Եթե ​​ձեր ld- ը կազմաձեւված է այս ձեւով, Դուք կարող եք օգտագործել --format տարբերակը `արտածման օբյեկտի ֆայլի երկուական ձեւաչափը ճշտելու համար: Նույնիսկ այն ժամանակ, երբ ld- ը կազմաձեւված է աջակցելու այլընտրանքային օբյեկտի ձեւաչափերին, դուք սովորաբար չպետք է հստակեցնեք դա, քանի որ ld- ը պետք է կազմաձեւվի, որպես ստանդարտ արտադրության ֆորմատ `յուրաքանչյուր մեքենայի ամենատարածված ձեւաչափը: արտադրանքի ձեւաչափը տեքստային տող է, BFD գրադարանների կողմից աջակցվող որոշակի ձեւաչափի անուն: (Դուք կարող եք ցուցակագրել առկա երկուական ձեւաչափերը objdump -i- ով:) «OUTPUT_FORMAT» սցենարի հրամանը կարող է նաեւ սահմանել արտադրանքի ձեւաչափը, սակայն այս տարբերակը գերազանցում է այն:

-մմագիկ

Այս տարբերակը անտեսվում է Linux- ի համատեղելիության համար:

- Ք

Այս տարբերակը անտեսվում է SVR4- ի համատեղելիության համար:

- ուրախ

Տարբերակ մեքենայի կախված ազդեցություններից: Այս տարբերակն աջակցում է մի քանի թիրախների վրա:

Որոշ պլատֆորմներում, --relax տարբերակը կատարում է գլոբալ օպտիմալացումները, որոնք հնարավոր են դառնում, երբ հղկողը լուծում է ծրագրում նշված հասցեները, ինչպիսիք են հանգստանալու հասցեի ռեժիմները եւ արտադրանքի օբյեկտի ֆայլում նոր հրահանգներ սինթեզ:

Որոշ հարթություններում այս կապի ժամանակի գլոբալ օպտիմալացումները կարող են իրականացնել գործառնական հնարավորության խորհրդանշական կարգաբերում : Սա հայտնի է որպես Matsushita MN10200 եւ MN10300 ընտանիքի պրոցեսորների համար:

Պլատֆորմներում, որտեղ դա չի աջակցվում, - ընդունվում է շռայլ , բայց անտեսված է:

- նշեք-խորհրդանիշներ-ֆայլի անվանում

Պահպանեք ֆայլի անվանման մեջ նշված միայն խորհրդանիշները, հրաժարելով բոլոր մյուսներից: Ֆայլի անունը պարզապես հարթ ֆայլ է, մեկ սիմվոլ անունով: Այս տարբերակը հատկապես օգտակար է շրջակա միջավայրերում (օրինակ, VxWorks), որտեղ աստիճանաբար կուտակվում է գլոբալ համընդհանուր խորհրդանիշային աղյուսակը, պահպանելու վազքի ժամանակը հիշողությունը:

- տարանջատող նշաններ-ֆայլը չի վերացնում անորոշ պատկերանիշերը կամ տեղափոխման համար անհրաժեշտ խորհրդանիշները:

Դուք կարող եք ընդամենը նշել հրամանի տողում հափշտակող նշանները : Այն արտացոլում է -s եւ -S :

-տրպաթ dir

Ավելացնել գրացուցակը ռեսուրսների գրադարանի որոնման ճանապարհին: Սա օգտագործվում է ELFexecutable- ի հետ միասնական օբյեկտների հետ կապելու ժամանակ: All -path- ի փաստարկները համակցված են եւ փոխանցվում են գործարկուի աղյուսակին, որն օգտագործում է դրանք ընդհանուր առմամբ օբյեկտների տեղակայման ժամանակ: The -path- ի տարբերակը օգտագործվում է նաեւ այն ժամանակ, երբ տեղադրվում են ընդհանուր օբյեկտները, որոնք անհրաժեշտ են հղումներում ընդգրկված ընդհանուր օբյեկտների կողմից. տես ` -ppath-link տարբերակի նկարագրությունը: Եթե ​​ELF- ի գործարկումը կապակցելու դեպքում չի օգտագործվում, ապա «LD_RUN_PATH» շրջակա միջավայրի պարունակության բովանդակությունը կօգտագործվի, եթե այն սահմանված է:

The -path- ի տարբերակը կարող է օգտագործվել նաեւ SunOS- ում: Լռելյայնորեն, SunOS- ի վրա, հղումը կստեղծի գործառնական որոնման բրա, որը տրվում է բոլոր L տարբերակներից: Եթե ​​մի- երթուղու տարբերակ օգտագործվում է, ապա ռեսուրսների որոնման ուղին կձեւավորվի բացառապես օգտագործելով -path ընտրանքներ, անտեսելով -L տարբերակները: Սա կարող է օգտակար լինել, երբ օգտագործելով gcc- ը, որն ավելացնում է բազմաթիվ L տարբերակներ, որոնք կարող են ONFS- ի վրա տեղադրել ֆայլային համակարգեր:

Այլ ELF հղումներ ունեցող ընկերությունների հետ համատեղելու համար, եթե -R տարբերակը հաջորդում է գրացուցակի անվանումը, այլ ոչ թե ֆայլի անուն, ապա այն համարվում է « պտուղի» տարբերակ:

-տրպաթ-ուղեցույց DIR

ELF- ի կամ SunOS- ի օգտագործման ժամանակ մեկ միասնական գրադարան կարող է պահանջել մեկ այլ: Դա տեղի է ունենում, երբ «ld -shared» հղումը ներառում է համակցված գրադարան, որպես ներածման ֆայլերից մեկը:

Երբ հղիչը հանդիպում է այդպիսի կախվածության մեջ, երբ ոչ տարածված, ոչ փոխարկելի հղում է կատարում, այն ավտոմատ կերպով կփորձի գտնել անհրաժեշտ գրադարանը եւ ընդգրկել այն հղումը, եթե այն ընդգրկված չէ: Նման դեպքում, -ppath-link տարբերակը սահմանում է որոնման որոնման առաջին փաթեթը: The -path-link տարբերակը կարող է սահմանել դիրեկտորիայի անվանումների հաջորդականությունը, կամ նշելով անվերջ բաժանվող անվանումների ցուցակը կամ մի քանի անգամ հայտնաբերելու միջոցով:

Այս տարբերակը պետք է օգտագործվի զգուշությամբ, քանի որ այն գերազանցում է որոնման ուղին, որը կարող էր դժվարությամբ կազմվել միասնական գրադարան: Նման դեպքերում հնարավոր է օգտագործել աննպատակ կերպով այլ որոնման ուղի, քան իրական ժամանակի կապողը:

Կապողը օգտագործում է հետեւյալ որոնման ուղիները `պահանջվող ընդհանուր գրադարանները գտնելու համար:

1.

Ցանկացած դիրեկտորիաներ, որոնք նշված են -path- հղման ընտրանքներով:

2.

Ցանկացած դիրեկտորիաներ, որոնք նշված են -path- ի տարբերակներով: -ppath- ի եւ -ppath-link- ի միջեւ եղած տարբերությունն այն է, որ նշված դիրեկտորիաների կողմից տրված -ppath- ի տարբերակները ներառված են գործարկվող եւ օգտագործվում են գործարկման ժամանակ, իսկ -rpath-link տարբերակն արդյունավետ է միայն հղման ժամանակում: Դա միայն հայրենի կապակցիչի համար է:

3.

ELF- ի համակարգում, եթե -ppath- ը եւ «rpath-link» տարբերակները չեն օգտագործվել, որոնել «LD_RUN_PATH» շրջակա միջավայրի փոփոխական բովանդակությունը: Դա միայն հայրենի կապակցիչի համար է:

4.

SunOS- ում , եթե -ppath- ի տարբերակը չի օգտագործվել, փնտրեք ցանկացած դիրեկտորիաներ `օգտագործելով -L ընտրանքներ:

5.

Տեղական կապակցիչի համար շրջակա միջավայրի փոփոխական «LD_LIBRARY_PATH» պարունակությունը:

6.

Հարազատ ELF հղիչի համար համացանցային գրադարանի «DT_RUNPATH» կամ «DT_RPATH» դիրեկտորիաները որոնվում են դրա համար անհրաժեշտ ընդհանուր գրադարանների համար: «DT_RPATH» գրառումները անտեսվում են, եթե «DT_RUNPATH» գրառումներ գոյություն ունեն:

7.

Լռելյայն դիրեկտորիաներ, սովորաբար / lib եւ / usr / lib :

8.

ELF համակարգում տեղադրված հղումատուի համար, եթե /etc/ld.so.conf ֆայլը գոյություն ունի, այդ ֆայլում հայտնաբերված դիրեկտորիաների ցանկը:

Եթե ​​պահանջվող միասնական գրադարանը չի հայտնաբերվել, ապա հղիչը նախազգուշացնում է եւ շարունակում է հղումը:

-հարաբերություն

-Բարածելի

Ստեղծեք միասնական գրադարան: Սա այժմ միայն ELF, XCOFF եւ SunOS պլատֆորմներում է: SunOS- ում, հղումը ավտոմատ կերպով ստեղծում է համօգտագործվող գրադարան, եթե -e տարբերակը չի օգտագործվում եւ հղումում կան անսահման նշաններ:

- սովորական

Այս տարբերակն ասում է ld- ին , որ ընդհանուր նմուշները չափով չափի, երբ դրանք տեղադրում են համապատասխան արտադրանքի բաժիններում: Նախ եկեք բոլոր մեկ բայտ նշանները, ապա բոլոր երկու բայտը, ապա բոլոր չորս բայտը, ապա ամեն ինչ: Սա նշանակում է, որ խոչընդոտները խոչընդոտում են խորհրդանիշների միջեւ բացերը:

-split-by-file [ size ]

Նմանատիպ -plpl-by-reloc- ի նման, սակայն ստեղծում է յուրաքանչյուր մուտքային ֆայլի համար, երբ չափը հասնում է: չափսերի չափը, եթե տրված չէ, 1 չափի:

-split-by-reloc [ count ]

Փորձում է ստեղծել լրացուցիչ բաժիններ արտադրանքի ֆայլում այնպես, որ ֆայլի մեկ արտադրամասի բաժինը չի պարունակում ավելի քան հաշվարկի տեղաշարժեր: Սա օգտակար է այն ժամանակ, երբ հսկայական տեղաշարժվող ֆայլեր ստեղծվում են որոշակի իրական ժամանակի միջուկներ ներբեռնելու համար COFF օբյեկտի ֆայլի ձեւաչափով; քանի որ COFFcannot- ն ներկայացնում է ավելի քան 65535 տեղաշարժի մեկ բաժնում: Նշենք, որ դա չի կարող աշխատել օբյեկտի ֆայլի ձեւաչափերով, որոնք չեն աջակցում կամայական բաժիններին: Կապողը չի վերաբաշխի անհատական ​​ներածման բաժիններ վերաբաշխման համար, այնպես որ, եթե մեկ ներածման բաժինը պարունակում է ավելի քան հաշվարկային տեղաշարժեր, մեկ արտադրամասի բաժինը պարունակում է բազմաթիվ վերաբնակումներ: հաշվարկի նախնական արժեքները 32768 արժեքով:

- վիճակագրություն

Հաշվարկեք եւ ցուցադրեք աղյուսակի գործունեության մասին վիճակագրությունը, օրինակ `կատարման ժամանակը եւ հիշողության օգտագործումը:

- ավանդական ձեւաչափ

Որոշ թիրախների համար ld- ի արտադրանքը տարբեր ձեւերով տարբերվում է գոյություն ունեցող որոշակի աղբյուրից: Այս անցումը պահանջում է ld- ի փոխարեն օգտագործել ավանդական ձեւաչափը:

Օրինակ, SunOS- ի վրա ld- ն միացնում է կրկնօրինակի մուտքերը խորհրդանշանի սեղանի աղյուսակում: Սա կարող է կրճատել ելքային ֆայլի չափը ամբողջությամբ կարգաբերիչ տեղեկատվությամբ, ավելի քան 30 տոկոսով: Ցավոք, SunOS- ի «dbx» ծրագիրը չի կարող կարդալ արդյունքի ծրագիրը («gdb» - ը չունի խնդիրներ): - ավանդական ձեւաչափի փոխարկիչը ld- ին հայտնում է, որ չի կրկնօրինակել գրառումները:

- բաժին-սկիզբ բաժինը = օրգան

Տեղակայեք արտադրանքի ֆայլի բաժինը, օրգանի կողմից տրված բացարձակ հասցեում: Դուք կարող եք օգտագործել այս տարբերակը այնքան ժամանակ, որքան անհրաժեշտ է հրամանի տողում բազմաթիվ բաժիններ տեղադրելու համար: ORG- ը պետք է լինի մեկ տասնվեցերորդ ամբողջական թվաքանակ; այլ հղումներ ունեցող ընկերությունների հետ համատեղելու համար, դուք կարող եք բաց թողնել առաջատար 0x-ը, որը սովորաբար կապված է տասնվեցերորդ արժեքների հետ: Նշում. Բաժնի անունը չպետք է լինի սպիտակ տարածք, հավասար է նշանը (`` = '') եւ օրգան :

-Tbss ORG

-Թադա Օրգ

-Տեքստն օրգան

Օգտագործեք org- ը, որպես ելակետային հասցե --- համապատասխանաբար, «bss», «տվյալների» կամ ելքային ֆայլի «տեքստային» հատված: ORG- ը պետք է լինի մեկ տասնվեցերորդ ամբողջական թվաքանակ; այլ հղումներ ունեցող ընկերությունների հետ համատեղելու համար, դուք կարող եք բաց թողնել առաջատար 0x-ը, որը սովորաբար կապված է տասնվեցերորդ արժեքների հետ:

- dll-verbose

- տատիկ

Ցուցադրել տարբերակը ld- ի համար եւ ցուցադրել աղյուսակային հավելվածները : Ցուցադրեք, թե որ մուտքի ֆայլերը կարող են եւ չեն կարող բացվել: Ցուցադրել հղիչի սցենարը, որը օգտագործվում է հղումատուի կողմից:

--version-script = version-scriptfile- ը

Նշեք հղիչի համար նախատեսված տարբերակի սցենարի անունը: Սա սովորաբար օգտագործվում է համատեղ գրադարանների ստեղծման ժամանակ, երբ ստեղծվում է գրադարանի ստեղծման համար լրացուցիչ տեղեկություն: Այս տարբերակը միայն իմաստալից է ELF պլատֆորմներում, որոնք աջակցում են հանրային գրադարաններին:

- սովորեք

Զգուշացեք, երբ ընդհանուր խորհրդանիշը համակցվում է մեկ այլ ընդհանուր խորհրդանիշի կամ խորհրդանիշի սահմանման հետ: Unix- ի աղբարկղերը թույլ են տալիս այս փոքր-ինչ անփույթ պրակտիկան, սակայն այլ օպերացիոն համակարգերի վրա հղումներ չեն կատարում: Այս տարբերակը հնարավորություն է տալիս գտնել համաշխարհային նշանների համատեղելիության հնարավոր խնդիրներ: Ցավոք, որոշ C գրադարաններ օգտագործում են այս պրակտիկան, այնպես որ դուք կարող եք ստանալ որոշ նախազգուշացումներ գրադարաններում, ինչպես նաեւ ձեր ծրագրերում:

Կան երեք տեսակի գլոբալ խորհրդանիշներ, որոնք նկարագրված են այստեղ C օրինակներով.

int i = 1;

Definition, որը գնում է ելակետային ֆայլի սկզբնական տվյալների բաժնում:

extern int i;

Անհայտ տեղեկանք, որը տարածություն չի հատկացնում: Տեղափոխման համար պետք է լինի որեւէ սահմանում կամ ընդհանուր խորհրդանիշ:

int i;

Ընդհանուր խորհրդանիշ: Եթե ​​գոյություն ունեն միայն մեկ (մեկ կամ ավելի) ընդհանուր խորհրդանիշներ փոփոխականի համար, ապա այն գնում է արտադրանքի ֆայլի անավարկելի տվյալների դաշտում: Հղիչը միեւնույն փոփոխության համար միավորում է մի շարք ընդհանուր խորհրդանիշներ մեկ խորհրդանիշի մեջ: Եթե ​​դրանք տարբեր չափերի են, ապա ընտրում է ամենամեծ չափը: Կապողը հերթական խորհրդանիշն է դարձնում հայտարարության մեջ, եթե կա նույն փոփոխության սահմանումը:

The -warn-common option- ը կարող է արտադրել հինգ տեսակի նախազգուշացում: Յուրաքանչյուր նախազգուշացում բաղկացած է զույգ գծերից. Առաջինը բնութագրում է միայն հանդիպած խորհրդանիշը, իսկ երկրորդը նկարագրում է նախորդ նշանը, որը հանդիպում է նույն անունով: Երկու խորհրդանիշներից մեկի կամ երկուսի միջեւ ընդհանուր խորհրդանիշ կլինի:

1.

Համընդհանուր խորհրդանիշը հղում կատարելու համար, քանի որ արդեն խորհրդանշանի համար սահմանվել է:

(
): նախազգուշացում ` - ը տարածված է` (
) սահմանմամբ: նախազգուշացում, սահմանված է այստեղ

2.

Ընդհանուր խորհրդանիշը հղում կատարելու համար, քանի որ հետագայում նշվում է խորհրդանիշի հետագա սահմանումը: Սա նույնն է, ինչ նախորդ գործը, բացառությամբ, որ խորհրդանիշները հանդիպում են այլ կարգի:

(
): նախազգուշացում. 'գերակշռող ընդհանուր (
) սահմանումը: նախազգուշացում. տարածված է այստեղ

3.

Համատեղ սիմվոլը նախկին նույն չափի համընդհանուր խորհրդանիշով միավորելը:

(
): նախազգուշացում ` ' (
) բազմակի տարածվածություն. զգուշացում. նախկինում տարածված է այստեղ

4.

Միացում ընդհանուր խորհրդանիշին նախորդ ավելի մեծ ընդհանուր խորհրդանիշով:

(
): նախազգուշացում. ընդհանուր > գերակշռում է ավելի մեծ ընդհանուր (
) կողմից: նախազգուշացում, ավելի լայն տարածված է այստեղ

5.

Ընդհանուր սիմվոլը մի փոքր ավելի վաղ ընդհանուր խորհրդանիշով միաձուլվելը: Սա նույնն է, ինչ նախորդ գործը, բացառությամբ, որ խորհրդանիշները հանդիպում են այլ կարգի:

(
): նախազգուշացում ` 'ընդհանուր` ավելի փոքր ընդհանուր (
) նախազգուշացում `նախազգուշացում` փոքր տարածված է այստեղ

- ժամացույցի շինարարներ

Զգուշացեք, եթե օգտագործվում են գլոբալ շինարարներ: Սա միայն օգտակար է մի քանի օբյեկտի ֆայլի ձեւաչափերի համար: COFF- ի կամ ELF- ի ձեւաչափերի համար հղիչը չի կարող բացահայտել գլոբալ շինարարների օգտագործումը:

- ժամացույց-բազմակի-gp

Զգուշացեք, եթե մի քանի գլոբալ ցուցիչ արժեքներ պահանջվում են արտադրանքի ֆայլում : Սա միայն իմաստավոր է որոշ վերամշակողների համար, ինչպիսիք են Ալֆան: Մասնավորապես, որոշ պրոցեսորներ հատուկ բաժնում մեծ արժեքավոր հաստատություններ են տեղադրել: Հատուկ ռեեստրը (գլոբալ ցուցիչը) նշում է այս բաժնի կեսին, որպեսզի հաստատունները կարողանան բեռնված լինել բազային ռեգիստրով հարաբերական հասցեի ռեժիմով: Քանի որ բազային ռեգիստրի հարաբերական ռեժիմում հաշվարկը ամրագրված է եւ համեմատաբար փոքր (օրինակ `16 բիթ), սա սահմանափակում է մշտական ​​պահեստի առավելագույն չափը: Այսպիսով, խոշոր ծրագրերում հաճախ անհրաժեշտ է օգտագործել բազմաթիվ գլոբալ ցուցիչի արժեքներ, որպեսզի կարողանան դիմել հնարավոր բոլոր հաստատուններին: Այս տարբերակը առաջացնում է նախազգուշացում, երբ դա տեղի է ունենում:

- մի անգամ լսեք

Միայն մեկ անգամ զգուշացեք յուրաքանչյուր անվերջ խորհրդանիշի համար, այլ ոչ թե մեկ մոդուլի համար, որը վերաբերում է այն:

- տեղյակ պահեք-բաժինը

Զգուշացեք, ելքի բաժնի հասցեն փոխվել է, քանի որ հավասարեցում է: Սովորաբար, հավասարումը կստեղծվի մուտքագրման բաժնում: Ուղղումը կփոխվի միայն այն դեպքում, եթե այն հստակ նշված չէ: այսինքն, եթե «SECTIONS» հրամանը չի նշում բաժնի համար մեկնարկային հասցեն:

- Ուժեղ արխիվ

Յուրաքանչյուր արխիվ, որը հիշատակված է հրամանի տողում, - արխիվային տարբերակից հետո, ներառում է յուրաքանչյուր օբյեկտի ֆայլը արխիվի մեջ, այլ ոչ թե որոնել օբյեկտի ֆայլերի արխիվը: Սա սովորաբար օգտագործվում է արխիվային ֆայլը համօգտագործվող գրադարան դարձնելու համար `ստիպելով յուրաքանչյուր օբյեկտի մեջ ներառել համացանցային գրադարանում: Այս տարբերակը կարող է օգտագործվել ավելի քան մեկ անգամ:

Երկու նշում, այս տարբերակը օգտագործելով gcc- ից. Նախ, gcc- ը չի ճանաչում այս տարբերակի մասին, այնպես որ դուք պետք է օգտագործեք -Wl, -whole-archive- ը : Երկրորդ, մի մոռացեք օգտագործել արխիվի ձեր ցուցակից հետո , ոչ թե ամբողջ արխիվը, քանի որ gcc- ը կցուցադրի ձեր հղումը ձեր արխիվների ցանկը, եւ դուք չեք կարող այդ դրոշը ազդել նաեւ դրանց վրա:

- փորագրության խորհրդանիշ

Օգտագործեք փաթաթման գործառույթ խորհրդանիշի համար : Սիմվոլի ցանկացած undefined հղում կլուծվի «__ wrap_symbol»: Ցանկացած undefined հղում «__real_symbol» - ը լուծվելու է խորհրդանիշ :

Սա կարող է օգտագործվել որպես համակարգային գործառույթի համար փաթաթան: Կպչուն ֆունկցիան պետք է կոչվի «__wrap_symbol»: Եթե ​​ցանկանում է զանգահարել համակարգի գործառույթը, այն պետք է անվանել «__ real_symbol»:

Ահա մի աննշան օրինակ.

void * __wrap_malloc (int c) {printf ("malloc կոչվում է% ld \ n", գ); վերադարձ __real_malloc (c); }

Եթե ​​դուք կապակցեք այլ կոդով այս ֆայլի հետ, օգտագործելով « wrap malloc» , ապա բոլոր զանգերը «malloc» կկոչեն «__wrap_malloc» ֆունկցիան: «__wrap_malloc» - ում «__real_malloc» կոչը կկոչի իրական «malloc» գործառույթը:

Դուք կարող եք նաեւ ցանկանալ տրամադրել «__real_malloc» ֆունկցիան, որպեսզի առանց հղումների հղումներ չլինեն : Եթե ​​դա անում եք, ապա չպետք է «__ real_malloc» - ի նույն սահմանումը «__wrap_malloc» - ի սահմանում: եթե դուք անեք, ասենք, որ ասամբլարը կարող է լուծել զանգը, նախքան հղում կատարողը հնարավորություն ունի փաթեթավորելու այն «malloc»:

--enable-new-dtags

- բաժանելի-նոր-դտագներ

Այս հղիչը կարող է ստեղծել ELF- ի նոր դինամիկ պիտակներ: Սակայն ավելի մեծ ELF համակարգերը չեն կարող հասկանալ դրանք: Եթե ​​դուք նշեք --enable-new-dtags- ը , դինամիկ տեքստերը կստեղծվեն անհրաժեշտության դեպքում: Եթե ​​դուք նշեք, --disable-new-dtags , ոչ մի նոր դինամիկ պիտակ չի ստեղծվի: Լռելյայն, նոր դինամիկ պիտակներ չեն ստեղծվում: Նշենք, որ այդ տարբերակները միայն մատչելի են ELF համակարգերի համար:

The i386 PE կցորդը աջակցում է -shared տարբերակը, որը առաջացնում է արտադրանքի դինամիկորեն կապված գրադարան (DLL) փոխարեն նորմալ գործարկվող: Դուք պետք է անվանեք «* .dll» արտադրանքը, երբ դուք օգտագործում եք այս տարբերակը: Բացի այդ, հղում կատարողը լիովին սատարում է «* .ef» ստանդարտին, որը կարող է սահմանվել հղիչի հրամանի տողում որպես օբյեկտի ֆայլ (ըստ էության, այն պետք է նախորդող արխիվները այն արտահանող խորհրդանիշներից, ապահովի, ճիշտ այնպես, ինչպես նորմալ օբյեկտի ֆայլը):

Ի լրումն բոլոր թիրախների ընդհանուր ընտրանքների, i386 PE կցորդը աջակցում է լրացուցիչ հրամանի տող ընտրանքներ, որոնք հատուկ են i386 PE- ի թիրախին: Ընտրանքները, որոնք արժեքներ են վերցնում, կարող են առանձնացված լինել իրենց արժեքներից կամ տարածության կամ հավասար նշանով:

--add-stdcall-alias- ը

Եթե ​​տրված է, stdcall- ի վերջածանցով նշանները (@ nn ) արտահանվում են որպես, ինչպես նաեւ սահուն տողով:

- հիմնական ֆայլի ֆայլը

Օգտագործեք ֆայլը որպես ֆայլի անուն, որտեղ փրկելու համար բոլոր տեղակայանքների բազային հասցեները, որոնք անհրաժեշտ են dlltool- ի հետ DLL- ներ ստեղծելու համար :

- dll

Ստեղծեք DLL- ի հերթական գործարկողի փոխարեն: Դուք նաեւ կարող եք օգտագործել -shared կամ նշեք «ԳՐԱԴԱՐԱՆ» տվյալ «.efef» ֆայլում:

- հասանելի-stdcall-fixup

- բաժանելի-stdcall-fixup

Եթե ​​հղումը գտնում է այն խորհրդանիշը, որը չի կարող լուծվել, այն կփորձի անել `« անորոշ կապ »` փնտրելով մեկ այլ սահմանված նշան, որը տարբերվում է միայն խորհրդանիշ անվանման ձեւաչափով (cdecl vs stdcall) եւ կլուծի այդ խորհրդանիշը `կապելով խաղին: Օրինակ, «_foo» - ի անբավարար սիմվոլը կարող է կապված լինել «_foo @ 12» ֆունկցիայի հետ կամ «_bar @ 16» undefined սիմվոլը կարող է կապված լինել «_bar» ֆունկցիայի հետ: Երբ հղում կատարողը դա անում է, այն նախազգուշացնում է, քանի որ սովորաբար չպետք է կապի, բայց երբեմն երրորդ կողմի dlls- ից ստացված գրադարանների ներմուծումը կարող է անհրաժեշտ լինել այս հնարավորությունը օգտագործելու համար: Եթե ​​նշեք, --enable-stdcall-fixup , այս հատկությունը լիովին միացված է եւ նախազգուշացումները չեն տպագրվում: Եթե ​​դուք նշեք `կարգավորվող-stdcall-fixup , այս հատկությունը անջատված է եւ նման սխալները համարվում են սխալներ:

- արտահանման բոլոր նշանները

Եթե ​​տրվի, ապա DLL- ի կառուցված օբյեկտներում գտնվող բոլոր գլոբալ խորհրդանիշները արտահանվում են DLL- ով: Նշենք, որ դա կանխադրված է, եթե այլ բան չի արտահանվում խորհրդանիշները: Երբ նշաններն ակնհայտորեն արտահանվում են DEF ֆայլերով կամ անուղղակիորեն արտահանվում են ֆունկցիոնալ հատկանիշներով, նախնականը, եթե այս տարբերակը չի տրվում, ոչինչ չի արտահանվում: Նշենք, որ «DllMain @ 12», «DllEntryPoint @ 0», «DllMainCRTStartup @ 12» եւ «impure_ptr» նշանները ինքնաբերաբար չեն արտահանվում: Բացի այդ, այլ DLL- ներից ներմուծված խորհրդանիշները չեն կրկին արտահանվում, ոչ էլ նշաններ, որոնք ցույց են տալիս DLL- ի ներքին դասավորությունը, ինչպիսիք են սկսած «_head_» - ով կամ ավարտելով «_iname»: Բացի այդ, «libgcc», «libstd ++», «libmingw32» կամ «crtX.o» - ից ոչ մի խորհրդանիշ չի արտահանվի: Սիմվոլները, որոնց անունները սկսվում են «__rtti_» կամ «__builtin_» - ի հետ, չի արտահանվի, օգնել C ++ DLL- ներին: Վերջապես, գոյություն ունի cygwin- մասնավոր խորհրդանիշների ընդարձակ ցուցակներ, որոնք չեն արտահանվում (ակնհայտ է, սա վերաբերում է cygwin- ի թիրախների համար DLL- ներ կառուցելիս):

«Cygwin_premain0», «cygwin_premain1», «cygwin_premain2», «cygwin_premain3», «cygwin_noncygwin_dll_entry @ 12», «_fmode», «_impure_ptr», «cygwin_attach_dll», եւ «շրջակա միջավայրը»:

- անջատել-խորհրդանիշների խորհրդանիշ , խորհրդանիշ , ...

Սահմանում է այն նշանների ցանկը, որը չպետք է ինքնաբերաբար արտահանվի: Սիմվոլի անունները կարող են սահմանվել ստորակետներով կամ ուղղաձիգներով:

- անջատել-libs lib , lib , ...

Հատկորոշում է արխիվային գրադարանների ցանկը, որոնցից չպետք է ավտոմատ կերպով արտահանվեն խորհրդանիշները: Գրադարանի անունները կարող են բաժանվել ստորակետերով կամ ուղղաձիգներով: Նշելով «--exclude-libs ALL» - ը բացառում է բոլոր արխիվային գրադարաններում խորհրդանիշներ ավտոմատ արտահանման միջոցով: .ef ֆայլում ակնհայտ թվարկված խորհրդանիշները դեռեւս արտահանվում են, անկախ այս տարբերակից:

- ֆայլի հավասարեցում

Նշեք ֆայլի հավասարումը: Ֆորմատի բաժինները միշտ էլ սկսում են ֆայլի offsets, որոնք այս քանակի բազմապատիկն են: Սա կանխորոշում է մինչեւ 512:

- պահուստային պահուստ

- պահուստային պահուստ , պարտավորություն

Նշեք հիշատակի հիշողության ծավալը (եւ ընտրովիաբար), որը պետք է օգտագործվի որպես կուտակ այս ծրագրի համար: Սխալը 1Mb- ն է, պահված է 4K:

- իմանալ բազային արժեք

Օգտագործեք արժեք ` որպես ծրագրի կամ dll- ի բազային հասցե: Սա ամենացածր հիշողության վայրն է, որը կօգտագործվի, երբ ձեր ծրագիրը կամ dll- ը բեռնված է: Կրճատելու համար ձեր DLL- ների տեղադրման եւ կատարելագործման անհրաժեշտությունը նվազեցնելու համար յուրաքանչյուրը պետք է ունենա յուրահատուկ բազային հասցե եւ ոչ մի տեղ չկիրառի այլ dlls: Սխալը 0x400000 է executables եւ 0x10000000 համար dlls.

- սպանել

Եթե ​​տրվի, stdcall- ի suffixes (@ nn ) կհանվեն խորհրդանիշներից, նախքան դրանք արտահանվում են:

- իջնող-image-version արժեքը

Կառուցում է `` `պատկերը տարբերակն է: Նախնականը 1:

- մկնիկ-օս-տարբերակ արժեք

Սահմանում է «os version» - ի հիմնական թիվը: Նախնականը 4 է:

- մկնիկ-ենթահամակարգի տարբերակ

Սահմանում է `` '' ենթահամակարգի տարբերակը '': Նախնականը 4 է:

--minor-image-version արժեքը

Սահմանում է `` `պատկերը տարբերակն է: Նախնականը 0 է:

--minor-os-version արժեքը

Սահմանում է `` `OS տարբերակի փոքր թիվը: Նախնականը 0 է:

--minor-subsystem-version արժեքը

Սահմանում է `` «ենթահամակարգի տարբերակը»: Նախնականը 0 է:

- ելքային-def ֆայլը

Կոդավորողը կստեղծի ֆայլի ֆայլ , որը պարունակում է DEF ֆայլ, որը համապատասխանում է աղյուսակի գեներացնող DLL- ին: Այս DEF ֆայլը (որը պետք է անվանել «* .def») կարող է օգտագործվել «dlltool» ներկառուցված գրադարան ստեղծելու համար կամ կարող է օգտագործվել որպես հղում ինքնաբերաբար կամ անուղղակի արտահանվող խորհրդանիշների համար:

- բեռնակիրը

Կոդավորողը կստեղծի ֆայլի ֆայլ , որը պարունակում է ներմուծման պիտույք, որը համապատասխանում է DLL- ի աղյուսակին: Այս ներմուծման գաղտնիքը (որը պետք է կոչվի «* .dll.a» կամ «* .a» կարող է օգտագործվել հաճախորդների համար գեներացվել DLL- ի կապակցությամբ, այս վարքագիծը թույլ է տալիս բաց թողնել առանձին «dlltool» ներմուծման գրադարանի ստեղծման քայլ:

--enable-auto-image-base

Ավտոմատ կերպով ընտրեք DLL- ների պատկերների բազան, եթե նշված չէ «-իմաժ-բազայի» փաստարկով: Օգտագործելով dllname- ից ստացված խառնուրդ, յուրաքանչյուր DLL- ի համար եզակի նկարի հիմքերը ստեղծելու համար, հիշողության մեջ տեղադրված բախումները եւ տեղաշարժերը, որոնք կարող են հետաձգել ծրագրերի կատարումը, խուսափում են:

--Disable-auto-image-base

Մի ինքնաբերաբար ստեղծեք եզակի պատկեր բազա: Եթե ​​չկա օգտագործողի կողմից սահմանված պատկերային բազա ("-image-base"), ապա օգտագործեք հարթակի լռելյայնը:

- dll-search-prefix string

Երբ դինամիկ կերպով կապում եք DLL- ներ առանց ներմուծման գրադարան, որոնել « .dll» նախապատվությունը «lib .dll»: Այս վարքագիծը թույլ է տալիս հեշտ տարբերակել տարբեր `` subplatforms- ի համար կառուցված DLL- ների միջեւ `մայրենի, cygwin, uwin, pw, եւ այլն: Օրինակ, cygwin DLL- ները սովորաբար օգտագործում են« -dll-search-prefix = cyg »:

--enable-auto-import

Կատարեք «_symbol» - ի «__imp__symbol» - ի «DLL» - ի ներմուծումների բարդ կապը DLL- ից եւ ստեղծեք անհրաժեշտ thunking խորհրդանիշներ ներմուծման գրադարանները այդ DATAexports- ով: Սա, ընդհանուր առմամբ, «գործելու է» --- բայց երբեմն կարող եք տեսնել այս հաղորդագրությունը.

"փոփոխական" 'չի կարող ինքնաբերաբար ներմուծվել: Մանրամասների համար կարդացեք ld- ի "--enable-auto-import" փաստաթղթերը: "

Այս հաղորդագրությունը տեղի է ունենում, երբ որոշ (ենթաբաժնում) արտահայտությունը հասանելի է երկու հասցեի գումարով (Win32 ներմուծման աղյուսակները միայն թույլ են տալիս): Այն դեպքերում, երբ դա կարող է առաջանալ, ներառում են DLL- ից ներմուծված կառուցվածքային փոփոխականների անդամների մուտքերը, ինչպես նաեւ օգտագործելով մշտական ​​ինդեքս `DLL- ից ներմուծված զանգվածային փոփոխականի մեջ: Ցանկացած բազմաբնակարանային փոփոխական (arrays, structs, երկարատեւ եւ այլն) կարող է առաջացնել այս սխալի վիճակը: Այնուամենայնիվ, անկախ նրանից արտահանվող արտահանվող ճշգրիտ տվյալների տեսակը, ld- ը միշտ հայտնաբերում է այն, նախազգուշացնում է, եւ ելքը:

Այս դժվարության դիմելու մի քանի եղանակներ կան, անկախ արտահանվող փոփոխականի տվյալների տեսակից.

Մեկը այն է, որ օգտագործվի `գործարկվող-պսեւդո-reloc switch: Սա թողնում է Ձեր հաճախորդի կոդով տեղեկանքները ռեսուրսների միջավայրում կարգավորելու խնդիրը, ուստի այս մեթոդը գործում է միայն այն ժամանակ, երբ գործառնական միջավայրը աջակցում է այս հատկությունը:

Երկրորդ լուծումը `« կայուններից »մեկը պարտադրելու համար պարտադիր է փոփոխական լինել, որը անհայտ է եւ անբացատրելի է կազմելու ժամանակ: Առանցքների համար կա երկու հնարավորություն `ա) indexee- ի (զանգի հասցեն) փոփոխություն կատարելու համար, կամ բ)« անընդհատ »ինդեքսը դարձնում է փոփոխական: Այսպիսով,

extern տեսակը extern_array []; extern_array [1] -> {փոփոխական տեսակը * t = extern_array; t [1]}

կամ

extern տեսակը extern_array []; extern_array [1] -> {փոփոխական int t = 1; extern_array [t]}

Կառուցվածքների (եւ շատ այլ բազային տվյալների տեսակների) համար միակ տարբերակն այն է, որ կառուցվածքը (կամ երկար ժամանակ, կամ ...) փոփոխական:

extern struct- ի extern_struct; extern_struct.field -> {volatile struct s * t = & extern_struct; t-> դաշտ}

կամ

extern երկար երկար extern_ll; extern_ll -> {փոփոխական երկար ժամանակ * local_ll = & extern_ll; * local_ll}

Այս դժվարության հաղթահարման երրորդ մեթոդը `« ավտո-ներմուծումը »հրաժարվելով գայթակղիչ նշանի համար եւ նշեք այն« __declspec (dllimport) »: Այնուամենայնիվ, գործնականում դա պահանջում է հավաքել ժամանակի # պարամետրեր օգտագործել `նշելու համար, թե արդյոք դուք կառուցում եք DLL, կառուցելով հաճախորդի կոդը, որը կապում է 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- ի համար է. չեն օպտիմիզացնելու * / անկայուն int * parr = arr; printf ("% d \ n", parr [1]); }

Լուծում 2:

- foo.h / * Նշում. ավտոմատ արտահանումը ենթադրվում է (__declspec (dllexport)) * / #if (սահմանված (_WIN32) || (__ CYGWIN__)) && \ (սահմանված (FOO_BUILD_DLL) || սահմանված (FOO_STATIC )) #define FOO_IMPORT __declspec (dllimport) #else #define FOO_IMPORT # օրինաչափ 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 () accessor գործառույթները):

- բաժանելի-ավտո-ներմուծում

Մի փորձեք կատարել «_symbol» - ի «__imp__symbol» - ը DLL- ի DATAimports- ի DLL- ների համար խառնաշփոթ կապել:

- ըմբռնելի-ռեժիմ-պսեւդո-ռեվոկ

Եթե ​​ձեր կոդը պարունակում է - auto- ներմուծման բաժնում նկարագրված արտահայտություններ, այսինքն, DATA- ը DLL- ից ոչ զրոյական օֆսեթներով տեղափոխում է այս անջատիչը կստեղծի «runtime pseudo relocations» վեկտորը, որը կարող է օգտագործվել ռեսուրսների միջավայրի կողմից, հարմարեցնել հղումները այդ տվյալները ձեր հաճախորդի կոդում:

- disisable-runtime-pseudo-reloc

Չի ստեղծում կեղծ վերաբնակեցումներ DLL- ներից ոչ զրոյական օֆսեթային DATA ներմուծման համար: Սա կանխադրված է:

--enable-extra-pe-debug

Ցուցադրել ավտոմատ ներկրման խորհրդանիշ thunking- ի հետ կապված լրացուցիչ տեղեկանքների տեղեկություն:

- հատված-հավասարեցում

Կառուցում է բաժնի հավասարումը: Հիշողության բաժինները միշտ սկսում են հասցեներ, որոնք այս թվերի բազմապատկում են: Նախնականը 0x1000 է:

- պահեստային պահուստ

- պահեստային պահուստ , պարտավորություն

Նշեք հիշողությունը, որը պահպանում է (եւ կամ ընտրովի), որը պետք է օգտագործվի որպես այս ծրագրի համար: Սխալը 2Mb- ն է, պահված է 4K:

- սուբսինգային համակարգ, որը

- համակարգային համակարգ, որը խոշոր է

- համակարգային համակարգ, որը խոշոր է : անչափահասը

Հատկորոշում է ձեր ենթահամակարգը, որի ներքո ձեր ծրագիրը կկատարվի: Իրավական արժեքները, որոնց համար «հայրենի», «պատուհանների», «մխիթարել» եւ «posix» են: Դուք կարող եք ընտրովի ընտրել նաեւ ենթահամակարգի տարբերակը:

Կարեւոր է. Օգտագործեք հրամանատարությունը ( % մարդ ), որպեսզի տեսնեք, թե ինչպես է օգտագործվում հրամանը ձեր որոշակի համակարգչում: