Linux / Amri ya Unix: Id

NAME

ld - Kutumia LD , kiungo cha GNU

SYNOPSIS

Ld [ chaguo ] objfile ...

DESCRIPTION

ld inachanganya idadi ya faili na faili za kumbukumbu, huhamisha data zao na inaunganisha kumbukumbu za alama. Kawaida hatua ya mwisho katika kuandaa programu ni kukimbia ld .

Ld inakubali faili za Maagizo ya Lugha ya Linker iliyoandikwa kwa superset ya syntax ya Lugha ya Amri ya Mhariri ya AT & T ya Kiungo, kutoa udhibiti wazi na wa jumla juu ya mchakato wa kuunganisha.

Ukurasa wa mtu huyu hauelezei lugha ya amri; angalia kuingia ld katika "info", au mwongozo ld: kiungo cha GNU , kwa maelezo kamili juu ya lugha ya amri na kwenye mambo mengine ya kiungo cha GNU.

Toleo hili la ld linatumia maktaba ya BFD kusudi kuu ya kufanya kazi kwenye faili za kitu. Hii inaruhusu ld kusoma, kuchanganya, na kuandika faili za vitu katika muundo tofauti tofauti - kwa mfano, COFF au "a.out". Fomu tofauti zinaweza kuunganishwa pamoja ili kuzalisha aina yoyote ya faili ya kitu.

Mbali na kubadilika kwake, kiunganishi cha GNU kinawasaidia zaidi kuliko washirika wengine katika kutoa taarifa za uchunguzi. Waunganisho wengi huacha ufanisi mara moja juu ya kukutana na kosa; wakati wowote iwezekanavyo, ld inaendelea kutekeleza, kukuwezesha kutambua makosa mengine (au, wakati mwingine, kupata faili ya pato licha ya kosa).

GNU linker ld ina maana ya kufunika hali mbalimbali, na kuwa sawa na iwezekanavyo na washirika wengine. Matokeo yake, una uchaguzi mwingi wa kudhibiti tabia yake.

OPTIONS

Mshirikaji huunga mkono chaguo nyingi za mstari wa amri , lakini kwa mazoezi halisi mafupi yao hutumiwa katika muktadha wowote. Kwa mfano, matumizi ya mara kwa mara ya ld ni kuunganisha mafaili ya kiwango cha Unix ya kawaida kwenye mfumo wa standard, unaoungwa mkono na Unix . Kwenye mfumo kama huo, kuunganisha faili "hello.o":

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

Hii inaelezea ld kuzalisha faili inayoitwa pato kama matokeo ya kuunganisha faili "/lib/crt0.o" na "hello.o" na maktaba "libc.a", ambayo itatoka kwenye kumbukumbu za kawaida za utafutaji. (Angalia mjadala wa -l chaguo hapa chini.)

Baadhi ya chaguo la mstari wa amri kwa ld inaweza kuelezwa wakati wowote kwenye mstari wa amri. Hata hivyo, chaguo ambazo hurejelea mafaili, kama vile -l au -T , fanya faili ili isome wakati ambapo chaguo linaonekana kwenye mstari wa amri, kuhusiana na faili za vitu na chaguzi nyingine za faili. Kurudia chaguo zisizo na faili na hoja tofauti haitaweza kuwa na athari zaidi, au kuongezeka kwa matukio ya awali (wale zaidi upande wa kushoto kwenye mstari wa amri) wa chaguo hilo. Chaguo ambazo zinaweza kufafanuliwa zaidi ya mara moja zimeelezwa katika maelezo hapa chini.

Mazungumzo yasiyo ya chaguo ni faili za nyenzo au kumbukumbu ambazo zitaunganishwa pamoja. Wanaweza kufuata, kutangulia, au kuchanganyikiwa na chaguzi za mstari wa amri, isipokuwa kuwa hoja ya faili ya kitu inaweza kuwekwa kati ya chaguo na hoja yake.

Kawaida linker inatakiwa kwa angalau faili moja ya kitu, lakini unaweza kutaja aina nyingine za faili za kuingiza binary kutumia -l , -R , na lugha ya amri ya script. Ikiwa hakuna faili za pembejeo za binary zimewekwa, kiunganishi haitoi pato lolote, na hutoa ujumbe bila faili za pembejeo .

Ikiwa kiungo hawezi kutambua muundo wa faili ya kitu, itafikiri kwamba ni script linker. Script iliyoelezwa kwa njia hii inajumuisha script kuu ya kiungo inayounganishwa kwa kiungo (ama script default linker au moja maalum kwa kutumia -T ). Kipengele hiki kinaruhusu kiungo kiunganishe dhidi ya faili inayoonekana kuwa kitu au kumbukumbu, lakini kwa kweli inafafanua maadili fulani ya ishara, au inatumia "INPUT" au "GROUP" kupakia vitu vingine. Kumbuka kwamba kutaja script kwa njia hii ni tu kuingiza script kuu linker; tumia chaguo -T kuchukua nafasi ya script default linker kabisa.

Kwa chaguo ambazo majina yao ni barua moja, hoja za chaguo lazima zifuatie barua ya chaguo bila safu ya kuingilia kati, au kutolewa kama hoja tofauti baada ya kufuata chaguo kinachohitaji.

Kwa chaguzi ambazo majina yao ni barua nyingi, dash moja au mbili zinaweza kutangulia jina la chaguo; kwa mfano, -taja-ishara na - ishara-alama ni sawa. Kumbuka - kuna ubaguzi mmoja kwa sheria hii. Chaguo nyingi za barua ambazo huanza na kesi ya chini 'o' inaweza tu kuingizwa na dashes mbili. Hii ni kupunguza uchanganyiko na -o chaguo. Hivyo kwa mfano -omagic huweka jina la faili la pato kwa uchawi ambapo isomagic inaweka bendera ya NMAGIC kwenye pato.

Majadiliano ya chaguo nyingi za barua lazima apate kutengwa na jina la chaguo kwa ishara sawa, au kutolewa kama hoja tofauti baada ya chaguo kinachohitaji. Kwa mfano, - foo-ishara foo na -trace-ishara = foo ni sawa. Vifupisho maalum vya majina ya chaguzi nyingi za barua hukubaliwa.

Kumbuka - ikiwa kiungo kinatakiwa kutumiwa kwa njia moja kwa moja, kupitia dereva ya compiler (kwa mfano gcc ) basi chaguo zote za mstari wa kiungo wa kiungo lazima zifanyike prefixed na -Wl, (au chochote kinachofaa kwa dereva fulani wa kompyuta) kama hii:

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

Hii ni muhimu, kwa sababu vinginevyo mpango wa dereva wa compiler huweza kuacha chaguzi za kiungo kimya, na kusababisha kiungo kibaya.

Hapa ni meza ya swichi ya mstari wa amri ya generic iliyokubaliwa na kiungo cha GNU:

- neno muhimu

Chaguo hili linasaidiwa kwa utangamano wa HP / UX. Fungu la neno la msingi linapaswa kuwa mojawapo ya nyaraka za kumbukumbu , iliyoshirikiwa , au ya msingi . -aarchive ni kazi sawa na -Bstatic , na maneno mengine mawili yanafanya kazi sawa na -Bdynamic . Chaguo hili linaweza kutumika namba yoyote ya mara.

- Usanifu

--architecture = usanifu

Katika kutolewa kwa sasa kwa ld , chaguo hili ni muhimu tu kwa familia ya Intel 960 ya usanifu. Katika usanidi huo wa ld , hoja ya usanifu inafanana na usanifu fulani katika familia 960, ili kuwezesha baadhi ya ulinzi na kurekebisha njia ya utafutaji ya maktaba.

Kuondolewa baadaye kwa ld inaweza kusaidia utendaji sawa kwa familia nyingine za usanifu.

-b -pembejeo-format

--format = pembejeo-format

ld inaweza kusanidi kusaidia zaidi ya aina moja ya faili ya kitu. Ikiwa ld yako imetengenezwa kwa njia hii, unaweza kutumia chaguo -b kutaja muundo wa binary kwa mafaili ya kitu cha kuingia ambacho kinafuata chaguo hili kwenye mstari wa amri. Hata wakati ld imefungwa ili kuunga mkono muundo mbadala wa vitu, huna haja ya kutaja hii, kama ld inapaswa kusanidi kutarajia kama muundo wa pembejeo wa pembejeo muundo wa kawaida zaidi kwenye kila mashine. muundo wa pembejeo ni kamba ya maandishi, jina la muundo fulani unaoungwa mkono na maktaba ya BFD. (Unaweza kuandika muundo wa binary zilizopo na objdump -i .)

Unaweza kutumia chaguo hili ikiwa unaunganisha faili na muundo usio wa kawaida wa binary. Unaweza pia kutumia -b kubadili vielelezo wazi (wakati unaunganisha faili za aina za muundo tofauti), kwa kuhusisha -bbisho -pembejeo kabla ya kikundi cha mafaili ya kitu katika muundo fulani.

Fomu ya default inachukuliwa kutoka kwa variable ya "GNUTARGET" ya mazingira.

Unaweza pia kufafanua muundo wa pembejeo kutoka kwenye script, kwa kutumia amri "TARGET";

-c Mfumo wa amri ya MRI

--Mri-script = Mfumo wa amri ya MRI

Kwa utangamano na viungo vinavyozalishwa na MRI, ld inakubali faili za script iliyoandikwa katika lugha mbadala, iliyozuiliwa ya amri, iliyoelezwa katika sehemu ya MRI ya Siri ya Siri za Hati za GNU ld nyaraka. Kuanzisha faili za script za MRI na chaguo -c ; tumia chaguo -T cha kuendesha maandiko ya linker yaliyoandikwa katika lugha ya jumla ya scripting ld . Ikiwa MRI-cmdfile haipo, ld inaiangalia kwenye kumbukumbu zinazoelezwa na chochote -L chaguo.

-d

-dc

-dp

Chaguzi hizi tatu ni sawa; fomu nyingi zinasaidiwa kwa utangamano na viungo vingine. Wao huwapa nafasi kwa alama za kawaida hata kama faili ya pato inayohamishwa imepangwa (na -r ). Amri ya script "FORCE_COMMON_ALLOCATION" ina athari sawa.

-kuingia

- kuingia = kuingia

Tumia kuingia kama ishara iliyo wazi kwa ajili ya utekelezaji wa programu yako, badala ya uhakika wa kuingia. Ikiwa hakuna alama inayoingia , munganishi atajaribu kuingia kama idadi, na uitumie kama anwani ya kuingia (namba itafasiriwa katika msingi wa 10; unaweza kutumia 0x inayoongoza kwa msingi wa 16, au inayoongoza 0 kwa msingi 8).

-E

- Export-nguvu

Wakati wa kutengeneza nguvu inayounganishwa, ongeza alama zote kwenye meza ya ishara ya nguvu. Jedwali la ishara yenye nguvu ni seti ya alama ambazo zinaonekana kutoka kwa vitu vya nguvu wakati wa kukimbia.

Ikiwa hutumii chaguo hili, meza ya ishara yenye nguvu ina kawaida ina vifungo hivyo tu vinavyoelezea na kitu fulani cha nguvu kilichotajwa kwenye kiungo.

Ikiwa unatumia "dlopen" kupakia kitu chenye nguvu ambacho kinahitaji kurejesha tena alama zinazoelezwa na programu, badala ya kitu kingine cha nguvu, basi huenda unahitaji kutumia chaguo hili wakati unaunganisha programu yenyewe.

Unaweza pia kutumia script ya toleo ili kudhibiti alama ambazo zinapaswa kuongezwa kwenye meza ya ishara ya nguvu ikiwa muundo wa pato huunga mkono. Angalia maelezo ya sversion-script katika @ ref {VERSION}.

-EB

Unganisha vitu vya big-endian. Hii inathiri muundo wa pato la default.

-EL

Unganisha vitu vidogo vya endian. Hii inathiri muundo wa pato la default.

-f

jina la usaidizi

Wakati wa kujenga kitu kilichoshirikiwa ELF, weka shamba la ndani la DT_AUXILIARY kwa jina maalum. Hii inaelezea kiungo cha nguvu kwamba meza ya ishara ya kitu kilichoshirikiwa inapaswa kutumiwa kama kichujizi cha msaidizi kwenye meza ya ishara ya jina la jina la pamoja.

Ikiwa utaunganisha programu dhidi ya kitu hiki cha kichujio, basi, unapoendesha programu hiyo, kiungo cha nguvu kitaona shamba la DT_AUXILIARY. Ikiwa kiunganishi chenye nguvu atatatua alama yoyote kutoka kwa kitu cha kichujio, itabidi kuangalia kwanza ikiwa kuna ufafanuzi katika jina la jina la pamoja. Ikiwa kuna moja, itatumika badala ya ufafanuzi kwenye kitu cha kichujio. Jina la jina la pamoja haipaswi kuwepo. Kwa hiyo jina la jina la pamoja linaweza kutumiwa kutoa utekelezaji mbadala wa kazi fulani, labda kwa ajili ya kufuta debugging au kwa utendaji maalum wa mashine.

Chaguo hili linaweza kutajwa zaidi ya mara moja. Vipengele vya DT_AUXILIARY vitaundwa kwa utaratibu ambao huonekana kwenye mstari wa amri.

-F jina

- jina la faili

Wakati wa kujenga kitu kilichoshirikiwa ELF, weka shamba la ndani la DT_FILTER kwa jina maalum. Hii inaelezea kiungo cha nguvu kwamba meza ya ishara ya kitu kilichoshiriki ambacho kinaundwa kinapaswa kutumika kama kichujio kwenye meza ya ishara ya jina la jina la pamoja.

Ikiwa utaunganisha programu dhidi ya kitu hiki cha kichujio, basi, unapoendesha programu, kiungo cha nguvu kitaona shamba la DT_FILTER. Kiunganishi cha nguvu kitatatua ishara kulingana na meza ya ishara ya kitu cha kichujio kama kawaida, lakini kitaunganisha na ufafanuzi uliopatikana katika jina la jina la pamoja. Hivyo kitu cha kichujio kinaweza kutumika kuchagua kipangilio cha alama zilizotolewa na jina la kitu.

Baadhi ya washirika wa zamani walitumia chaguo -F katika chombo chombo cha kukusanya kwa kubainisha muundo wa kitu-faili kwa faili zote za pembejeo na za pato. Kiunganishi cha GNU hutumia njia zingine kwa madhumuni haya: chaguo -b , --format , --form , amri ya "TARGET" katika maandishi ya kiungo, na "GNUTARGET" mabadiliko ya mazingira. Mchezaji wa GNU atakataa chaguo -F wakati haifanye kitu kilichoshirikiwa ELF.

jina la jina

Wakati wa kuunda kitu cha ELF kinachoweza kutekelezwa au kilichoshirikiwa, piga NAME hapa wakati kitu kinachoweza kutekelezwa au kilichoshirikiwa kinafunguliwa, kwa kuweka DT_FINI kwenye anwani ya kazi. Kwa default, kiungo hutumia "_fini" kama kazi inayoita.

-g

Imepuuzwa. Inapatikana kwa utangamano na zana zingine.

-G thamani

--gpsize = thamani

Weka ukubwa wa vipengee wa vitu ili uendelee kutumia usajili wa GP kwa ukubwa . Hii ni maana tu kwa muundo wa faili kama vile MIPS ECOFF ambayo inasaidia kuweka vitu vidogo na vidogo katika sehemu tofauti. Hii inapuuzwa kwa fomu zingine za faili.

-h jina

- jina lake = jina

Wakati wa kujenga kitu kilichoshirikiwa ELF, weka shamba la ndani la DT_SONAME kwa jina maalum. Wakati wa kutekeleza unahusishwa na kitu kilichoshiriki ambacho kina shamba la DT_SONAME, basi wakati wa kutekeleza anaendesha kiunganishi cha nguvu itajaribu kupakia kitu kilichoshirikiwa na shamba la DT_SONAME badala ya kutumia jina la faili iliyotolewa na kiungo.

-i

Fanya kiungo cha ziada (sawa na chaguo -r ).

-init jina

Wakati wa kuunda kitu cha ELF kinachoweza kutekelezwa au kilichoshirikiwa, piga NAME hapa wakati kitu kinachoweza kutekelezwa au kilichoshirikiwa, kwa kuweka DT_INIT kwenye anwani ya kazi. Kwa default, kiungo hutumia "_init" kama kazi inayoita.

-l kumbukumbu

--brari = kumbukumbu

Ongeza archive ya faili ya kumbukumbu kwenye orodha ya faili zilizounganishwa. Chaguo hili linaweza kutumika namba yoyote ya mara. ld itatafuta orodha yake ya njia kwa ajili ya matukio ya "libarchive.a" kwa kila kumbukumbu maalum.

Kwenye mifumo inayounga mkono maktaba ya pamoja, ld inaweza pia kutafuta maktaba pamoja na upanuzi zaidi ya ".a". Hasa, juu ya mifumo ya ELF na SunOS, ld itatafuta saraka kwa maktaba na ugani wa ".so" kabla ya kutafuta moja kwa ugani wa ".a". Kwa mkataba, ugani ".so" unaonyesha maktaba iliyoshirikiwa.

Munganishi atafuta kumbukumbu mara moja tu, mahali ambapo imeelezwa kwenye mstari wa amri. Ikiwa archive inafafanua ishara ambayo haikufafanuliwa katika kitu fulani kilichotokea kabla ya kumbukumbu kwenye mstari wa amri, kiunganishi kitajumuisha faili (s) zinazofaa kutoka kwenye kumbukumbu. Hata hivyo, ishara isiyojulikana katika kitu kinachoonekana baadaye kwenye mstari wa amri haitasaidia kiungo kutafuta tena kumbukumbu.

Angalia - ( chaguo kwa njia ya kumtia kiungo mchezaji kutafuta mara kwa mara nyaraka.

Unaweza orodha ya kumbukumbu moja mara nyingi kwenye mstari wa amri.

Aina hii ya kutafuta kumbukumbu ni kiwango cha waunganisho wa Unix. Hata hivyo, ikiwa unatumia ld onAIX, kumbuka kuwa ni tofauti na tabia ya kiungo cha AIX.

-L tafuta

- njia ya umbali = kutafuta

Ongeza njia ya kutafuta kwenye orodha ya njia ambazo ld itatafuta maktaba ya kumbukumbu na script za udhibiti wa ld . Unaweza kutumia chaguo hili mara ngapi. Maandishi haya hutafutwa kwa utaratibu ambao wametajwa kwenye mstari wa amri. Majarida yaliyoelezwa kwenye mstari wa amri hutafutwa kabla ya directories default. Chaguo zote -L zinatumika kwa wote -o chaguo, bila kujali amri ambayo chaguzi zinaonekana.

Ikiwa mfutaji anaanza na "=", basi "=" itabadilishwa na kiambishi cha sysroot , njia iliyofafanuliwa wakati kiungo kimeundwa.

Set default ya njia searched (bila kuwa maalum na -L ) inategemea ambayo mode ya mzunguko ld ni kutumia, na katika baadhi ya matukio pia juu ya jinsi ilikuwa configured.

Njia pia zinaweza kutajwa katika script ya kiungo na amri ya "SEARCH_DIR". Majarida yaliyochaguliwa kwa njia hii yanatafutwa kwa uhakika ambapo script linker inaonekana katika mstari wa amri.

-mimulation

Ondoa kiungo cha mzunguko . Unaweza orodha ya mipangilio inapatikana na chaguo - -verbose au -V .

Ikiwa chaguo-- m halijatumiwa, uchezaji huchukuliwa kutoka kwa "LDEMULATION" variable ya mazingira, kama inavyoelezwa.

Vinginevyo, mzunguko wa default hutegemea jinsi kiunganishi kilichosanidiwa.

-M

- ramani ya uchapishaji

Chapisha ramani ya kiungo kwenye pato la kawaida. Ramani ya kiungo hutoa maelezo kuhusu kiungo, ikiwa ni pamoja na yafuatayo:

*

Ambapo faili na alama zinazotajwa kwenye kumbukumbu.

*

Jinsi ishara za kawaida zinazotolewa.

*

Wanachama wote wa kumbukumbu wanajumuishwa kwenye kiungo, na kutaja alama ambayo imesababisha mwanachama wa kumbukumbu kufanywa.

-n

- isiyo ya kawaida

Zima usawa wa ukurasa wa sehemu, na uangaze pato kama "NMAGIC" ikiwa inawezekana.

-N

--a

Weka sehemu ya maandiko na data ili kuhesabiwa na kuandikwa. Pia, usiweke ukurasa wa kuunganisha sehemu ya data, na uzima kuunganisha dhidi ya maktaba yaliyoshirikiwa. Ikiwa muundo wa pato unasaidia namba za uchawi wa Unix, alama pato kama "OMAGIC".

- si-omagic

Chaguo hili linapuuza madhara mengi ya -N chaguo. Inatia sehemu ya maandishi kuwa ya kusoma tu, na inasababisha sehemu ya data kuwa iliyokaa kwa ukurasa. Kumbuka - chaguo hili haliwezesha kuunganisha kwenye maktaba yaliyoshirikiwa. Tumia -Bdynamic kwa hili.

-o pato

--putout = pato

Tumia pato kama jina la programu iliyotolewa na ld ; ikiwa chaguo hili halijainishwa, jina la a.out linatumiwa na default. Amri ya script "OUTPUT" inaweza pia kutaja jina la faili la pato.

-O ngazi

Ikiwa ngazi ni maadili ya nambari kubwa zaidi kuliko zero ld inaboresha pato. Hii inaweza kuchukua muda mrefu sana na kwa hiyo inapaswa kuwezeshwa tu kwa binary ya mwisho.

-q

reti-relocs

Acha sehemu ya uhamisho na yaliyomo katika vipande vilivyounganishwa kabisa. Kujiandikisha kiungo cha zana na zana za ufanisi zinahitaji maelezo haya ili kufanya marekebisho sahihi ya kutekeleza. Hii husababisha vidhibiti vingi.

Chaguo hili sasa linasaidiwa tu kwenye jukwaa la ELF.

-r

- haiwezekani

Kuzalisha pato la kuhamishwa --- yaani, kuzalisha faili ya pato ambayo inaweza kutumika kama pembejeo kwa ld . Hii mara nyingi huitwa kuunganisha sehemu . Kama athari ya upande, katika mazingira ambayo yanaunga mkono idadi ya uchawi wa Unix ya kawaida, chaguo hili pia linaweka idadi ya uchawi wa faili ya pato kwa "OMAGIC". Ikiwa chaguo hili halijainishwa, faili kamili huzalishwa. Unapounganisha mipango ya C ++, chaguo hili halitatubu marejeleo kwa wajenzi; kwa kufanya hivyo, tumia -Ur .

Wakati faili ya pembejeo haina muundo sawa na faili ya pato, kuunganisha sehemu kunasaidiwa tu kama faili hiyo ya uingizaji haina mwendo wowote wa kuhama. Fomu tofauti za pato zinaweza kuwa na vikwazo zaidi; kwa mfano baadhi ya "a.out" -based formats haziunga mkono sehemu ya kuunganisha na faili za kuingia katika muundo mwingine hata.

Chaguo hili linafanya kitu kimoja kama -i .

-R jina la faili

- ishara-alama = jina la faili

Soma majina ya ishara na anwani zao kutoka kwa jina la faili , lakini usiihamishe au uiingize katika pato. Hii inaruhusu faili yako ya pato kutaja mfano kwa maeneo yote ya kumbukumbu yaliyoelezwa katika mipango mingine. Unaweza kutumia chaguo hili zaidi ya mara moja.

Kwa utangamano na viungo vingine vya ELF, kama chaguo -R linapatiwa na jina la saraka, badala ya jina la faili, inachukuliwa kama chaguo - chaguo.

-s

- weka-yote

Tuma taarifa zote za ishara kutoka faili ya pato.

-S

- upasuaji-upungufu

Tuma maelezo ya ishara ya debugger (lakini si alama zote) kutoka kwa faili ya pato.

-t

- tuma

Chapisha majina ya faili za pembejeo kama ld huwafanya.

-Waandishi wa script

- script = scriptfile

Tumia scriptfile kama script linker. Script hii inabadilisha script default linker (badala ya kuongeza hiyo), hivyo amri ya maagizo lazima bayana kila kitu muhimu kuelezea faili pato. Ikiwa scriptfile haipo katika saraka ya sasa, "ld" inaiangalia kwenye kumbukumbu zilizoelezwa na chaguo lolote la awali. Chaguzi nyingi -T hujilimbikiza.

-u alama

- isiyofanywa = ishara

Weka ishara ya kuingizwa katika faili ya pato kama ishara isiyojulikana. Kufanya hivyo, kwa mfano, kunaweza kuunganisha modules za ziada kutoka kwenye maktaba ya kawaida. -naweza kurudiwa na hoja tofauti za chaguo kuingiza alama zingine zisizojulikana. Chaguo hili ni sawa na amri ya script ya "EXTERN".

-Ur

Kwa kitu kingine chochote zaidi ya mipango ya C ++, chaguo hili ni sawa na -r : inazalisha pato la kuhamishwa --- yaani, faili ya pato ambayo inaweza kutumika kama pembejeo kwa ld . Unapounganisha mipango ya C ++, -Ur hutatua marejeo kwa wajenzi, tofauti na -r . Haifanyi kazi kutumia -Ur kwenye faili ambazo zilijihusishwa na -Ur ; mara moja meza ya wajenzi imejengwa, haiwezi kuongezwa. Tumia - Tu kwa kiungo cha mwisho cha sehemu, na - kwa wengine.

--unique [= SECTION ]

Inajenga sehemu ya pato tofauti kwa kila sehemu ya pembejeo inayolingana na SECTION , au ikiwa hifadhi ya hiari ya hoja ya SECTION haipo, kwa kila sehemu ya pembejeo ya yatima. Sehemu ya yatima ni moja ambayo haijaelezewa hasa katika script linker. Unaweza kutumia chaguo hili mara nyingi kwenye mstari wa amri; Inaleta kuunganisha kawaida ya sehemu za pembejeo kwa jina lile, linalojitokeza kazi ya sehemu ya pato kwenye script linker.

-v

upungufu

-V

Onyesha idadi ya toleo kwa ld . Chaguo -V pia kina orodha ya vipindi vinavyotumika.

-x

- tazama-yote

Futa alama zote za ndani.

-X

- wasiojiunga-wenyeji

Futa alama zote za muda za ndani. Kwa malengo mengi, hii ni alama zote za ndani ambazo majina huanza na L.

ni ishara

- trace-ishara = ishara

Chapisha jina la faili kila iliyounganishwa ambayo ishara inaonekana. Chaguo hili linaweza kupewa idadi yoyote ya nyakati. Katika mifumo mingi ni muhimu kusubiri kuimarisha.

Chaguo hili ni muhimu wakati una ishara isiyojulikana kwenye kiungo chako lakini hajui ambapo rejea inatoka.

-Njia

Ongeza njia kwenye njia ya utafutaji ya maktaba ya default. Chaguo hili lipo kwa utangamano wa Solaris.

-n neno muhimu

Maneno ya kutambuliwa ni "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "sasa", "asili", "combreloc", "nocombreloc" na "nocopyreloc" ". Maneno mengine yamepuuzwa kwa utangamano wa Solaris. "initfirst" inatia alama kitu kilichoanzishwa kwanza wakati wa kukimbia kabla ya vitu vinginevyo. "kuingiliana" alama kitu ambacho meza yake ya ishara inapingana kabla ya ishara zote lakini msingi anayeweza kutekelezwa. "loadfltr" inaashiria kitu ambacho filtees zake zinasindika mara moja wakati wa kukimbia. "nodefaultlib" inaashiria kitu ambacho kutafuta kwa kutegemeana kwa kitu hiki kitakataa njia yoyote ya kutafuta maktaba. "nodelete" alama kitu haipaswi kufunguliwa wakati wa kukimbia. "nodlopen" inatia alama kitu ambacho haipatikani "kupungua". "nodump" inaashiria kitu ambacho hawezi kutumiwa na "dldump". "sasa" inaashiria kitu na kumfunga wakati usio wavivu. "asili" inaashiria kitu kinaweza kuwa na $ ORIGIN. "defs" inaruhusu ishara isiyojulikana. "muldefs" inaruhusu ufafanuzi wengi. "combreloc" inachanganya sehemu nyingi za uhamisho na zinawafanya waweze kuifanya alama ya kusukuma ya ishara ya nguvu inayowezekana.

"nocombreloc" inazima sehemu nyingi za kuhamisha. "nocopyreloc" inalemaza uzalishaji wa nakala za uhamisho.

- ( kumbukumbu -)

Fungua-kundi la kundi la kumbukumbu

Nyaraka zinapaswa kuwa orodha ya faili za kumbukumbu . Wanaweza kuwa majina ya faili wazi, au -a chaguo.

Kumbukumbu maalum zinafuatiliwa mara kwa mara hadi hakuna marejeo mapya yasiyotafsiriwa yameundwa. Kwa kawaida, kumbukumbu hutafutwa mara moja tu ili ielezeke kwenye mstari wa amri. Ikiwa alama katika hifadhi hiyo inahitajika ili kutatua ishara isiyojulikana inayojulikana na kitu katika kumbukumbu ambayo inaonekana baadaye kwenye mstari wa amri, kiungo haiwezi kutatua kumbukumbu hiyo. Kwa kuunganisha kumbukumbu, wote hutafutwa mara kwa mara mpaka marejeo yote yanayowezekana yamepangwa.

Kutumia chaguo hili kuna gharama kubwa ya utendaji. Ni bora kuitumia tu wakati kuna kumbukumbu zisizoweza kuepukika kati ya kumbukumbu mbili au zaidi.

- kukubali-haijulikani-pembejeo-arch

- si-kukubali-haijulikani-pembejeo-arch

Inamwambia kiungo kupokea faili za uingizaji ambao usanifu hauwezi kutambuliwa. Dhana ni kwamba mtumiaji anajua wanachofanya na kwa makusudi anataka kuunganisha katika faili hizi za pembejeo zisizojulikana. Hii ilikuwa tabia ya default ya kiungo, kabla ya kutolewa 2.14. Tabia ya default kutoka kutolewa 2.14 kuendelea ni kukataa faili za pembejeo hizo, na hivyo chaguo-kukubali-haijulikani-kipengee kimeongezwa ili kurejesha tabia ya zamani.

-ainisha neno muhimu

Chaguo hili linapuuzwa kwa utangamano wa SunOS .

-Bdynamic

-dy

-shauri_shari

Unganisha dhidi ya maktaba yenye nguvu. Hii ni maana tu kwenye majukwaa ambayo maktaba yaliyoshirikiwa yanasaidiwa. Chaguo hili ni la kawaida katika majukwaa hayo. Tofauti tofauti ya chaguo hili ni kwa utangamano na mifumo mbalimbali. Unaweza kutumia chaguo hili mara nyingi kwenye mstari wa amri: inathiri maktaba kutafuta njia za -l zinazofuata.

-Bundi

Weka bendera "DF_1_GROUP" katika kuingia "DT_FLAGS_1" katika sehemu yenye nguvu. Hii inasababisha kiungo cha wakati wa kukimbia kushughulikia lookups kwenye kitu hiki na mateteo yake yanayofanyika tu ndani ya kikundi. - haijulikani ina maana. Chaguo hili lina maana tu kwenye jukwaa za ELF ambazo zinasaidia maktaba ya pamoja .

-Batika

-dn

-na_shared

-static

Usiunganishe dhidi ya maktaba yaliyoshirikiwa. Hii ni maana tu kwenye majukwaa ambayo maktaba yaliyoshirikiwa yanasaidiwa. Tofauti tofauti ya chaguo hili ni kwa utangamano na mifumo mbalimbali. Unaweza kutumia chaguo hili mara nyingi kwenye mstari wa amri: inathiri maktaba kutafuta njia za -l zinazofuata.

-Bsymbolic

Wakati wa kujenga maktaba iliyoshirikiwa, funga kumbukumbu kwa alama za kimataifa kwa ufafanuzi ndani ya maktaba iliyoshirikiwa, ikiwa iko. Kwa kawaida, inawezekana kwa mpango unaohusishwa dhidi ya maktaba iliyoshiriki ili kuongezea ufafanuzi ndani ya maktaba iliyoshirikiwa. Chaguo hili lina maana tu kwenye ELFplatforms ambayo inasaidia maktaba ya pamoja.

- sehemu -check

- si-kuangalia-sehemu

Inatafuta kiunganishi si kuangalia anwani ya sehemu baada ya kugawanywa kuona ikiwa kuna uingilizi. Kwa kawaida linker atafanya hundi hii, na ikiwa inapata overlaps yoyote itazalisha ujumbe sahihi wa makosa. The linker anajua kuhusu, na hufanya posho kwa sehemu katika overlays. Tabia ya default inaweza kurejeshwa kwa kutumia kubadili mstari wa amri - sehemu zache .

--cref

Panga meza ya kumbukumbu ya msalaba. Ikiwa faili ya ramani ya linker inazalishwa, meza ya kumbukumbu ya msalaba imechapishwa kwenye faili ya ramani. Vinginevyo, ni kuchapishwa kwa pato la kawaida.

Aina ya meza ni rahisi kwa makusudi, ili ipate kusindika kwa urahisi na script ikiwa ni lazima. Ishara zinachapishwa, zimewekwa kwa jina. Kwa kila ishara, orodha ya majina ya faili hutolewa. Ikiwa alama inaelezwa, faili ya kwanza iliyoorodheshwa ni eneo la ufafanuzi. Faili iliyobaki ina vyenye kumbukumbu kwa ishara.

- si-kufafanua-kawaida

Chaguo hili inhibitisha kazi ya anwani kwa alama za kawaida. Amri ya script "INHIBIT_COMMON_ALLOCATION" ina athari sawa.

Chaguo -isiyofafanuliwa-kawaida inaruhusu kupungua uamuzi wa kuwapa anwani kwa alama za kawaida kutoka kwa uchaguzi wa aina ya faili ya pato; vinginevyo nguvu za aina za pato zisizohamishwa zinawasilisha anwani kwa alama za kawaida. Kutumia - isiyofafanua-kawaida inaruhusu alama za kawaida zinazotajwa kwenye maktaba iliyoshirikiwa kupewa anwani tu katika programu kuu. Hii inachukua nafasi ya duplicate nafasi isiyoyotumika kwenye maktaba iliyoshirikiwa, na pia kuzuia machafuko yoyote juu ya kutatua kwa duplicate isiyo sahihi wakati kuna moduli nyingi za nguvu na njia za utafutaji maalum za azimio la wakati wa kukimbia.

- ishara ya ishara = kujieleza

Unda ishara ya kimataifa katika faili ya pato, iliyo na anwani kamili iliyotolewa na kujieleza . Unaweza kutumia chaguo hili mara nyingi iwezekanavyo ili kufafanua alama nyingi katika mstari wa amri. Aina ndogo ya hesabu inasaidiwa kwa maneno katika hali hii: unaweza kutoa mara kwa mara hexadecimal au jina la ishara zilizopo, au kutumia "+" na "-" kuongeza au kuondoa vipengele vya hexadecimal au alama. Ikiwa unahitaji maneno zaidi ya kufafanua, fikiria kutumia lugha ya amri ya linker kutoka kwenye script. Kumbuka: haipaswi kuwa na nafasi nyeupe kati ya ishara , ishara sawa (`` = ''), na kujieleza .

--demangle [= mtindo ]

- usijaribu

Chaguzi hizi kudhibiti kama kupiga marufuku majina ya ishara katika ujumbe wa makosa na pato zingine. Wakati kiungo kinauambiwa kutetemeka, kinajaribu kuwasilisha majina ya ishara kwa mtindo unaoonekana: inachukua hatua za kuongoza ikiwa hutumiwa na muundo wa faili, na hubadilisha majina ya ishara ya C ++ ndani ya majina yanayoonekana. Washiriki tofauti wana mitindo tofauti ya mangling. Shauri la mtindo wa uharibifu wa hiari inaweza kutumika kutumiwa mtindo unaofaa wa kuangamiza kwa compiler yako. Kiunganishi kitajiangamiza kwa default isipokuwa mazingira ya angalau COLLECT_NO_DEMANGLE yamewekwa. Chaguzi hizi zinaweza kutumiwa kupanua default.

faili ya kiungo ya dhahabu

Weka jina la kiunganishi cha nguvu. Hii ina maana tu wakati wa kuzalisha viongozi vya ELF vilivyounganishwa na nguvu. Kiungo cha nguvu cha kiungo cha kawaida kina sahihi; usitumie hili isipokuwa unatambua unachofanya.

kuhamishwa-kuhamia

Chaguo hili ni muhimu sana wakati wa kuunganisha Nambari ya PIC iliyotungwa na MIPS, inayozalishwa na chaguo-cha-chungu-pic kwa mtunzi wa GNU na kukusanya. Inasababisha kiunganishi kuunda meza ambayo inaweza kutumika wakati wa kukimbia ili kuhamisha data yoyote ambayo ilianzishwa kwa uhalali kwa maadili ya pointer. Angalia kificho katika testuite / ld-empic kwa maelezo.

- maonyo ya ushughulikiaji

Tumia onyo zote kama makosa .

- nguvu-exe-suffix

Hakikisha kwamba faili ya pato ina suffix .exe.

Ikiwa faili ya pato iliyounganishwa kikamilifu haijawa na "suffix" au " .dll " suffix, chaguo hili linasisitiza kiunganishi kuiga faili ya pato kwa moja ya jina sawa na ".exe" suffix. Chaguo hiki ni muhimu wakati unapotumia maandishi ya Unix yasiyofanywa kwenye jeshi la Microsoft Windows, kwa kuwa baadhi ya matoleo ya Windows hayatatengeneza picha isipokuwa ikamalizika kwenye ".exe" suffix.

sehemu-gc-sehemu

sehemu -gc

Wezesha ukusanyaji wa takataka ya sehemu za uingizaji zisizotumika. Inapuuzwa kwenye malengo ambayo hayakuunga mkono chaguo hili. Chaguo hili hailingani na -r , wala haipaswi kutumika kwa kuunganisha nguvu. Tabia ya default (ya kutofanya ukusanyaji huu wa takataka ) inaweza kurejeshwa kwa kubainisha - hazi-gc-sehemu kwenye mstari wa amri.

--help

Chapisha muhtasari wa chaguo la mstari wa amri kwenye pato la kawaida na kutoka.

- tumia-msaada

Chapisha muhtasari wa chaguo maalum maalum kwenye pato la kawaida na kutoka.

-Map mapfile

Chapisha ramani ya kiungo kwenye ramani ya faili. Tazama maelezo ya -M- Chaguo, hapo juu.

- si-kuhifadhi-kumbukumbu

ld kawaida hupunguza kasi ya matumizi ya kumbukumbu kwa caching meza za ishara za faili za pembejeo kwenye kumbukumbu. Chaguo hili linamwambia ld badala yake kuboresha matumizi ya kumbukumbu, kwa kutazama tena meza za ishara ikiwa ni lazima. Hii inaweza kuhitajika ikiwa ld inatoka nafasi ya kumbukumbu wakati unaunganisha kubwa inayoweza kutekelezwa.

- haijulikani

-z defs

Kwa kawaida wakati wa kujenga maktaba ya pamoja yasiyo ya mfano, ishara isiyoelezwa inaruhusiwa na kushoto kutatuliwa na mzigo wa kukimbia. Chaguo hizi husababisha alama hizo zisizoeleweka.

- ruhusu-ufafanuzi-nyingi

-z muldefs

Kwa kawaida wakati ishara inavyoelezwa mara nyingi, kiunganishi atasema kosa mbaya. Chaguzi hizi kuruhusu ufafanuzi wengi na ufafanuzi wa kwanza utatumika.

- kuruhusu-shlib-isiyoelezwa

Ruhusu ishara zisizojulikana katika vitu pamoja wakati ambapo - haijulikani imewekwa. Matokeo yavu yatakuwa kwamba ishara zisizoeleweka katika vitu vya kawaida zitasababisha kosa, lakini alama zisizowekwa katika vitu vishiriki zitapuuzwa. Utekelezaji wa no_siofafanuliwa hufanya dhana kuwa kiungo cha wakati wa kukimbia kitakachochochea kwenye ishara isiyojulikana. Hata hivyo kuna mfumo wa angalau (BeOS) ambapo alama zisizojulikana katika maktaba zilizounganishwa ni za kawaida tangu kernel inawafunga wakati wa mzigo ili kuchagua kazi ambayo inafaa zaidi kwa usanifu wa sasa. IE dynamically kuchagua kazi ya memset sahihi. Inaonekana pia ni kawaida kwa maktaba ya pamoja ya HPPA kuwa na alama zisizojulikana.

- isiyojulikana-toleo

Kwa kawaida wakati ishara ina toleo isiyojulikana, kiungo huyo atakataa. Chaguo hiki huwaachia alama na toleo lisilojulikana na hitilafu mbaya hutolewa badala yake.

- usio-onyesha-kutengana

Kwa kawaida ld itatoa hitilafu ikiwa unajaribu kuunganisha faili za uingizaji zinazosababishwa kwa sababu fulani, labda kwa sababu wameandaliwa kwa wasindikaji tofauti au kwa tofauti tofauti. Chaguo hili linamwambia ld kwamba inapaswa kuruhusu makosa kimya iwezekanavyo. Chaguo hili linapaswa kutumiwa tu kwa uangalizi, wakati unapochukua hatua maalum ambayo inahakikisha kwamba makosa ya kiungo ni sahihi.

- haijulikani kabisa

Zima athari ya chaguo-archive chaguo kwa faili za hati zafuatayo.

- usiweze-kutekeleza

Weka faili ya pato inayoweza kutekelezwa wakati wowote itatumika. Kwa kawaida, linker haitatoa faili ya pato ikiwa inakutana na makosa wakati wa mchakato wa kiungo; inatoka bila kuandika faili ya pato linapotoa kosa lolote.

-nostdlib

Maandishi ya maktaba ya utafutaji pekee yanafafanuliwa wazi kwenye mstari wa amri. Maandishi ya maktaba yaliyotajwa katika script za kiungo (ikiwa ni pamoja na maandishi ya kiungo yaliyoelezwa kwenye mstari wa amri) hupuuzwa.

- muundo wa pato -oformat

ld inaweza kusanidi kusaidia zaidi ya aina moja ya faili ya kitu. Ikiwa ld yako imewekwa kwa njia hii, unaweza kutumia chaguo -oformat kutaja muundo wa binary kwa faili ya pato la kitu. Hata wakati ld imefungwa ili kuunga mkono muundo mbadala wa vitu, huna haja ya kutaja hii, kama ld inapaswa kusanidi kuzalisha kama muundo wa pato la kutosha muundo wa kawaida zaidi kwenye kila mashine. Pato-format ni kamba ya maandishi, jina la muundo fulani unaoungwa mkono na maktaba ya BFD. (Unaweza kuandika muundo wa binary zilizopo na objdump -i .) Amri ya script "OUTPUT_FORMAT" inaweza pia kutaja muundo wa pato, lakini chaguo hili linazidisha zaidi.

-qmagic

Chaguo hili ni kupuuzwa kwa utangamano wa Linux.

-Ni

Chaguo hili ni kupuuzwa kwa utangamano wa SVR4.

- upungufu

Chaguo na madhara ya tegemezi ya mashine. Chaguo hili ni mkono tu kwenye malengo machache.

Kwenye majukwaa fulani, chaguo- ladha hufanya optimizations kimataifa ambayo inawezekana wakati linker kutatua kushughulikia katika mpango, kama vile kufurahia modes anwani na kuunganisha maelekezo mapya katika faili pato faili.

Kwenye majukwaa baadhi ya optimizations wakati wa kiungo kimataifa inaweza kufanya debugging mfano wa kusababisha kutekelezwa haiwezekani. Hii inajulikana kama kesi ya watengenezaji wa processor wa Matsushita MN10200 na MN10300.

Juu ya majukwaa ambako hii haijatumiwa , - kupumzika kunakubalika , lakini hakupuuzwa.

- jina la faili la faili

Weka tu alama zilizoorodheshwa katika faili la faili , kuacha wengine wote. Jina la faili ni faili tu ya gorofa, yenye jina la ishara moja kwa kila mstari. Chaguo hili ni muhimu hasa katika mazingira (kama vile VxWorks) ambako meza kubwa ya ishara ya kimataifa imekusanywa kwa hatua kwa hatua, kuhifadhi kumbukumbu ya muda.

- faili-ishara-faili hazipoteza ishara isiyojulikana, au alama zinahitajika kwa kuhamishwa.

Unaweza tu kutaja -kupata-alama-faili mara moja katika mstari amri. Inakaribia -s na -S .

-rpath dir

Ongeza saraka kwenye njia ya utafutaji ya maktaba ya wakati wa kukimbia. Hii hutumiwa wakati wa kuunganisha ELF inayoonekana na vitu vinavyoshirikiwa. Mawazo yote ya -rpath yanatambulishwa na yamepitishwa kwa kiungo cha wakati wa kukimbia, ambayo hutumia kupata vitu pamoja wakati wa kukimbia. Chaguo- chapa pia hutumiwa wakati wa kupangia vitu vyenye ambavyo vinahitajika kwa vitu vilivyoshirikishwa waziwazi kwenye kiungo; tazama maelezo ya chaguo -rpath-link . Ikiwa -pati haitumiwi wakati wa kuunganisha ELF inayoweza kutekelezwa, yaliyomo ya variable ya mazingira "LD_RUN_PATH" itatumika ikiwa inafafanuliwa.

Chaguo -rpath inaweza pia kutumika kwenye SunOS. Kwa default, juu ya SunOS, kiungo huyo atafanya kipengee cha utafutaji cha wakati wa kukimbia nje ya chaguzi zote -L zinazotolewa. Ikiwa chaguo - chaguo linatumiwa, njia ya utafutaji ya wakati wa kukimbia itatengenezwa pekee kwa kutumia chaguo- njia, kupuuza chaguo -L . Hii inaweza kuwa na manufaa wakati wa kutumia gcc, ambayo inaongeza nyingi -L chaguo ambazo zinaweza kuwa kwenye mfumo wa faili wa NFS zilizopandwa.

Kwa utangamano na viungo vingine vya ELF, kama chaguo -R linapatiwa na jina la saraka, badala ya jina la faili, inachukuliwa kama chaguo - chaguo.

-rpath-link DIR

Wakati wa kutumia ELF au SunOS, maktaba moja ya pamoja yanaweza kuhitaji mwingine. Hii hutokea wakati kiungo cha "ld -shared" kinajumuisha maktaba iliyoshiriki kama moja ya faili za kuingia.

Wakati kiunganishi atakapokutana na utegemeaji huo wakati wa kufanya kiungo kisichoshirikiwa, ambacho hakiweza kuhamishwa, itajaribu moja kwa moja kupata kibtaba kilichohitajika kilichohitajika na kikiweke kwenye kiungo, ikiwa haijumukani waziwazi. Katika hali hiyo, chaguo--path-link linafafanua seti ya kwanza ya kumbukumbu ili utafute. Chaguo--rpath-link inaweza kuelezea mlolongo wa majina ya saraka ama kwa kubainisha orodha ya majina yaliyotenganishwa na koloni, au kwa kuonekana mara nyingi.

Chaguo hili linatakiwa kutumiwa kwa makini huku linapoendelea njia ya kutafuta ambayo inaweza kuwa ngumu iliyoandaliwa kwenye maktaba iliyoshirikiwa. Katika hali kama hiyo inawezekana kutumia njia isiyofuatilia njia ya kutafuta zaidi kuliko kiungo cha runtime kinachofanya.

Kiunganishi hutumia njia zifuatazo za utafutaji ili kupata maktaba yaliyohitajika.

1.

Directories yoyote iliyochaguliwa na chaguo- njia ya kiungo .

2.

Directories yoyote iliyoelezwa na chaguo- njia. Tofauti kati ya -rpath na -rpath-link ni kwamba directories zilizochaguliwa na njia za njia zinajumuishwa katika kutekelezwa na kutumika wakati wa kukimbia, wakati chaguzi -rpath-link inafaa tu wakati wa kiungo. Ni kwa kiungo cha asili tu.

3.

Kwenye mfumo wa ELF, ikiwa chaguo -rpath na "rpath-link" hazikutumiwa, tafuta maudhui ya variable ya mazingira "LD_RUN_PATH". Ni kwa kiungo cha asili tu.

4.

Katika SunOS, ikiwa chaguo -rpath haikutumiwa, tafuta maelezo yoyote yaliyochaguliwa kutumia -L chaguo.

5.

Kwa kiungo cha asili, yaliyomo ya variable ya mazingira "LD_LIBRARY_PATH".

6.

Kwa kiungo cha ELF kizazi, maelezo ya "DT_RUNPATH" au "DT_RPATH" ya maktaba iliyoshirikiwa hutafutwa kwa maktaba yaliyoshirikiwa inahitajika. Maingilio ya "DT_RPATH" yanapuuliwa kama viingilio vya "DT_RUNPATH" vipo.

7.

Directories default, kawaida / lib na / usr / lib .

8.

Kwa kiungo cha asili kwenye mfumo wa ELF, ikiwa faili / /etc/ld.so.conf ipo, orodha ya kumbukumbu zilizopatikana kwenye faili hiyo.

Ikiwa maktaba iliyoshirikiwa haipatikani, kiungo kinatoa toleo na kuendelea na kiungo.

-shauri

-Babidika

Unda maktaba iliyoshirikiwa. Hivi sasa ni mkono tu kwenye ELF, XCOFF na jukwaa la SunOS. Juu ya SunOS, kiunganishi kitaunda kiktaba moja kwa moja ikiwa chaguo -cha chaguo hakitumiwi na kuna alama zisizojulikana katika kiungo.

- ya kawaida

Chaguo hili linamwambia ld kutatua alama za kawaida kwa ukubwa wakati unawaweka katika sehemu zinazofaa za pato. Kwanza kuja alama zote za byte, basi byte zote mbili, kisha byte zote nne, na kisha kila kitu kingine. Hii ni kuzuia mapungufu kati ya alama kutokana na vikwazo vya usawa.

- fungua-na-faili [ ukubwa ]

Inafanana na - imefungua-kwa-reloc lakini inafanya sehemu mpya ya pato kwa kila faili ya pembejeo wakati ukubwa umefikia. ukubwa hufafanua kwa ukubwa wa 1 ikiwa haukutolewa.

- kupitisha-kwa-reloc [ hesabu ]

Inatafuta kuunda sehemu za ziada kwenye faili ya pato ili hakuna sehemu moja ya pato katika faili ina zaidi ya kuhamishwa kwa hesabu . Hii ni muhimu wakati wa kuzalisha mafaili makubwa ya kuhamishwa kwa kupakua katika kernels za muda halisi na muundo wa faili ya COFF; tangu COFFcannot inawakilisha zaidi ya 65535 uhamisho katika sehemu moja. Kumbuka kuwa hii itashindwa kufanya kazi na muundo wa faili ambazo haziunga mkono sehemu za kiholela. Kiunganishi hakitenganisha sehemu za pembejeo za mtu binafsi kwa ajili ya ugawaji, hivyo ikiwa sehemu moja ya pembejeo ina zaidi ya kuhamishwa hesabu sehemu moja ya pato itakuwa na uhamisho wengi. Weka upungufu kwa thamani ya 32768.

-

Thibitisha na kuonyesha takwimu kuhusu uendeshaji wa kiungo, kama vile wakati wa utekelezaji na matumizi ya kumbukumbu.

- muundo wa muda

Kwa malengo fulani, pato la ld ni tofauti kwa njia fulani kutoka kwa pato la kiungo kilichopo. Kubadilisha hii kunaomba ld kutumia fomu ya jadi badala yake.

Kwa mfano, juu ya SunOS, ld inachanganya vipindi vya duplicate kwenye meza ya safu ya ishara. Hii inaweza kupunguza ukubwa wa faili ya pato kwa habari kamili ya uharibifu kwa zaidi ya asilimia 30. Kwa bahati mbaya, mpango wa SunOS "dbx" hauwezi kusoma programu inayotokana ("gdb" haina shida). Kichwa-format-format inaelezea ld si kuchanganya entries duplicate.

- sehemu ya kuanza sehemuname = org

Pata sehemu katika faili ya pato kwa anwani kamili iliyotolewa na wimbo . Unaweza kutumia chaguo hili mara nyingi iwezekanavyo ili upate sehemu nyingi katika mstari wa amri. org lazima kuwa integer moja ya hexadecimal; kwa utangamano na viungo vingine, unaweza kuacha 0x inayoongoza kawaida inayohusishwa na maadili ya hexadecimal. Kumbuka: haipaswi kuwa na nafasi nyeupe kati ya jina la jina , saini ishara (`` = ''), na.

-Tbss org

-Tdata org

-Kutumia kiini

Tumia kidole kama anwani ya kuanza kwa --- kwa mtiririko huo --- "bss", "data", au sehemu ya "maandishi" ya faili ya pato. org lazima kuwa integer moja ya hexadecimal; kwa utangamano na viungo vingine, unaweza kuacha 0x inayoongoza kawaida inayohusishwa na maadili ya hexadecimal.

- dll-verbose

- toa

Onyesha nambari ya toleo kwa ld na uorodheshwa kiungo cha kiungo. Onyesha mafaili ya kuingia ambayo yanaweza na hayawezi kufunguliwa. Onyesha script linker kutumiwa na linker.

--version-script = version-scriptfile

Taja jina la script ya toleo kwa kiungo. Hii ni kawaida kutumika wakati wa kujenga maktaba yaliyoshiriki ili kutaja maelezo ya ziada juu ya heirarchy version ya maktaba inayoundwa. Chaguo hili lina maana tu kwenye jukwaa za ELF ambazo zinasaidia maktaba ya pamoja.

- tazama-ya kawaida

Tahadhari wakati ishara ya kawaida inajumuishwa na ishara nyingine ya kawaida au kwa ufafanuzi wa ishara. Unix inaunganisha kuruhusu mazoea haya yasiyofaa, lakini inaunganisha kwenye mifumo mingine ya uendeshaji haifai. Chaguo hili inakuwezesha kupata matatizo yaliyotokana na kuchanganya alama za kimataifa. Kwa bahati mbaya, maktaba fulani ya C hutumia mazoezi haya, ili uweze kupata maonyo kuhusu alama katika maktaba na pia katika programu zako.

Kuna aina tatu za alama za kimataifa, zilizoonyeshwa hapa na mifano C:

int i = 1;

Ufafanuzi, unaoingia katika sehemu ya data iliyoanzishwa ya faili ya pato.

nje ya ndani i;

Rejea isiyojulikana, ambayo haifai nafasi. Lazima uwe na ufafanuzi ama au ishara ya kawaida ya kutofautiana mahali fulani.

int i;

Ishara ya kawaida. Ikiwa kuna alama moja (moja au zaidi) ya kawaida kwa kutofautiana, inakwenda kwenye eneo la data la uninitialized la faili ya pato. Kiunganishi huunganisha alama nyingi za kawaida kwa mabadiliko sawa katika ishara moja. Ikiwa ni ya ukubwa tofauti, huchukua ukubwa mkubwa zaidi. The linker anarudi ishara ya kawaida katika tamko, kama kuna ufafanuzi wa variable sawa.

Chaguo-cha kawaida cha kawaida kinaweza kuzalisha aina tano za onyo. Kila onyo lina jozi la mistari: kwanza inaelezea ishara tu iliyokutana, na ya pili inaelezea alama ya awali iliyokutana na jina moja. Moja au ishara mbili hizi zitakuwa ishara ya kawaida.

1.

Kugeuza ishara ya kawaida katika rejea, kwa sababu tayari kuna ufafanuzi wa ishara.

(): onyo: kawaida ya ` 'iliyojaa zaidi kwa ufafanuzi (): onyo: linalotafsiriwa hapa

2.

Kugeuza ishara ya kawaida kuwa kumbukumbu, kwa sababu ufafanuzi wa baadaye wa ishara umekutana. Hii ni sawa na kesi ya awali, isipokuwa kwamba alama zinakutana kwa utaratibu tofauti.

(): onyesho: ufafanuzi wa < 'unaozidi kawaida (): onyo: kawaida ni hapa

3.

Kuunganisha ishara ya kawaida na alama ya kawaida ya kawaida ya kawaida.

(): onyo: kawaida ya '' (): onyo: ya kawaida ya hapa ni hapa

4.

Kuunganisha ishara ya kawaida na ishara ya kawaida ya kawaida.

(): onyo: kawaida ya ` 'iliyojaa zaidi ya (): onyo: kubwa zaidi ni hapa

5.

Kuunganisha ishara ya kawaida na ishara ndogo ya kawaida ya kawaida. Hii ni sawa na kesi ya awali, isipokuwa kwamba alama zinakutana kwa utaratibu tofauti.

(): onyo: kawaida <`alama> 'inayozidi ndogo ndogo (): onyo: ndogo ndogo ni hapa

- tazama-wajengaji

Tahadhari ikiwa wajenzi wowote wa kimataifa hutumiwa. Hii ni muhimu tu kwa muundo wa faili chache. Kwa muundo kama COFF au ELF, kiungo haiwezi kutambua matumizi ya wajenzi wa kimataifa.

- tazama-nyingi-gp

Tahadhari ikiwa maadili ya kimataifa ya pointer yanahitajika katika faili ya pato . Hii ni maana tu kwa wasindikaji fulani, kama vile Alpha. Hasa, wasindikaji wengine huweka vipindi vya thamani kubwa katika sehemu maalum. Rejista maalum (pointer ya kimataifa) inaelezea katikati ya sehemu hii, hivyo kwamba vipindi vinaweza kupakia kwa ufanisi kupitia njia ya kushughulikia jamaa ya usajili. Kwa kuwa hali ya kuandikisha ya msingi ya usajili ni ya msingi na ndogo (kwa mfano, 16 bits), hii inakoma ukubwa wa kiwango cha pool mara kwa mara. Kwa hiyo, katika programu kubwa, mara nyingi ni muhimu kutumia viwango vya kimataifa vya pointer ili uweze kukabiliana na vipindi vyote vinavyowezekana. Chaguo hili husababisha onyo kutolewa wakati wowote kesi hii inatokea.

- tazama mara moja

Onyesha mara moja kwa kila ishara isiyojulikana, badala ya mara moja kwa moduli ambayo inaelezea.

- tazama-sehemu-align

Tahadhari ikiwa anwani ya sehemu ya pato inabadilishwa kwa sababu ya usawa. Kwa kawaida, usawa utawekwa na sehemu ya pembejeo. Anwani itabadilishwa tu ikiwa haijainishwa wazi; yaani, kama amri ya "SECTIONS" haielezei anwani ya kuanza kwa sehemu hii.

- archive-archive

Kwa kila kumbukumbu iliyotajwa kwenye mstari wa amri baada ya chaguo- chaguo -archive , ingatia kila faili ya kitu kwenye kumbukumbu kwenye kiungo, badala ya kutafuta kumbukumbu ya mafaili yaliyohitajika. Hii ni kawaida kutumika kurejea faili archive katika maktaba pamoja, kulazimisha kila kitu kuingizwa katika maktaba ya pamoja kusababisha. Chaguo hili linaweza kutumika zaidi ya mara moja.

Maelezo mawili wakati wa kutumia chaguo hili kutoka gcc: Kwanza, gcc haijui juu ya chaguo hili, kwa hivyo unapaswa kutumia -Wl, -hole-archive . Pili, usisahau kutumia -Wl, -no-yote-archive baada ya orodha yako ya kumbukumbu, kwa sababu gcc itaongeza orodha yake ya kumbukumbu kwenye kiungo chako na huenda unataka kwamba bendera hii itathiri wale pia.

- ishara ya alama

Tumia kazi ya wrapper kwa ishara . Rejea yoyote isiyojulikana ya ishara itatatuliwa kwa "__ wrap_symbol". Rejea yoyote isiyojulikana ya "__real_symbol" itatatuliwa kuwa ishara .

Hii inaweza kutumika kutoa wrapper kwa kazi ya mfumo. Kazi ya kuchapa lazima iitwa "__wrap_symbol". Ikiwa inataka kuwaita kazi ya mfumo, inapaswa kuitwa "__ halisi_symbol".

Hapa ni mfano mdogo:

haipo * __wrap_malloc (int c) {printf ("malloc iitwayo na% ld \ n", c); kurudi __real_malloc (c); }

Ikiwa unaunganisha msimbo mwingine na faili hii ukitumia - wrap malloc , basi wito wote kwa "malloc" utaita kazi "__wrap_malloc" badala yake. Hangout ya "__real_malloc" katika "__wrap_malloc" itaita kazi halisi ya "malloc".

Unaweza pia kutoa "__real_malloc" kazi pia, ili viungo bila chaguo - chaguo litafanikiwa. Ikiwa unafanya hivyo, unapaswa kuweka ufafanuzi wa "__ halisi_malloc" katika faili moja kama "__wrap_malloc"; ikiwa unafanya, mkutano huweza kutatua wito kabla ya kiunganishi ana nafasi ya kuifunga kwa "malloc".

vyema-vyema-vipya

- haijulikani-mpya-dtags

Kiungo hiki anaweza kuunda lebo mpya za nguvu katika ELF. Lakini mifumo ya ELF ya zamani haiwezi kuwaelewa. Ikiwa utafafanua - vyema-vipya vipya , vitambulisho vya nguvu vitaundwa kama inahitajika. Ikiwa utafafanua - haijulikani-mpya-dtags , hakuna tag mpya za nguvu zitaundwa . Kwa chaguo-msingi, vitambulisho vipya vya nguvu havijali. Kumbuka kuwa chaguo hizo zinapatikana tu kwa mifumo yaELF.

I386 PE linker inaunga mkono chaguo - chaguo, kinachosababisha pato kuwa maktaba yenye uhusiano yenye nguvu (DLL) badala ya kutekelezwa kawaida. Unapaswa jina pato "* .dll" unapotumia chaguo hili. Kwa kuongeza, kiungo kinasaidia kikamilifu faili za "* .def" ambazo zinaweza kutajwa kwenye mstari wa amri ya linker kama faili ya kitu (kwa kweli, inapaswa kutangulia kumbukumbu za mauzo ya nje kutoka kwa, ili kuhakikisha kuwa zinaunganishwa, kama faili ya kawaida ya kitu).

Mbali na chaguzi za kawaida kwa malengo yote, i386 PE linker msaada ziada mstari amri chaguzi ambayo ni maalum kwa i386 PE lengo. Chaguo ambazo huchukua maadili zinaweza kutenganishwa na maadili yao kwa kutumia nafasi au ishara sawa.

-dd-stdcall-alias

Ikiwa imetolewa, alama na stdcall suffix (@ nn ) zitapelekwa kama-ni na pia zikiwa zimeondolewa.

- faili ya faili

Tumia faili kama jina la faili ambayo inaweza kuhifadhi anwani za msingi za uhamisho wote zinazohitajika kwa kuzalisha DLL na dlltool .

-

Unda DLL badala ya kutekelezwa mara kwa mara. Unaweza pia kutumia - kutaja au kutaja "LIBRARY" katika faili ".def" iliyotolewa.

- inayoweza-stdcall-fixup

- haijulikani-stdcall-fixup

Ikiwa kiungo kinapata ishara ambayo haiwezi kutatua, itajaribu kufanya `` kuunganisha fuzzy '' kwa kutafuta alama nyingine iliyoelezewa ambayo inatofautiana tu katika muundo wa jina la ishara (cdecl vs stdcall) na itasuluhisha ishara hiyo kwa kuunganisha kwa mechi. Kwa mfano, ishara isiyojulikana "_foo" inaweza kuunganishwa na kazi "_foo @ 12", au ishara isiyojulikana "_bar @ 16" inaweza kuunganishwa na kazi "_bar". Wakati linker anafanya hivyo, inachukua onyo, kwani kwa kawaida lazima imeshindwa kuunganisha, lakini wakati mwingine kuagiza maktaba yaliyotokana na dlls ya tatu inaweza kuhitaji kipengele hiki kuwa na matumizi. Ikiwa utafafanua - stdcall-fixup , kipengele hiki kinawezeshwa kikamilifu na onyo si kuchapishwa. Ikiwa utafafanua - haijulikani-stdcall-fixup , kipengele hiki kimezimwa na mismatches kama hizo huhesabiwa kuwa makosa.

- Export-wote-alama

Ikiwa imetolewa, alama zote za kimataifa katika vitu vinazotumiwa kujenga DLL zitatumwa na DLL. Kumbuka kuwa hii ni default ikiwa kuna vinginevyo haitakuwa alama yoyote nje. Wakati alama zinazotolewa kwa njia ya nje kupitia faili za DEF au zinazotolewa nje kwa njia ya sifa za kazi, chaguo-msingi ni si kuuza nje kitu chochote isipokuwa chaguo hili limetolewa. Kumbuka kuwa alama "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12", na "impure_ptr" hazitafirishwa moja kwa moja. Pia, ishara zilizoagizwa kutoka kwa DLL nyingine hazitatumiwa tena, wala hazitaashiria kuwa mpangilio wa ndani wa DLL kama wale ambao huanza na "_head_" au kuishia na "_iname". Kwa kuongeza, hakuna alama kutoka "libgcc", "libstd ++", "libmingw32", au "crtX.o" zitatumwa. Ishara ambazo majina huanza na "__rtti_" au "__builtin_" hazitapelekwa, ili kusaidia kwa C ++ DLL. Hatimaye, kuna orodha kubwa ya alama za cygwin-binafsi zisizo nje (kwa wazi, hii inatumika wakati wa kujenga DLL kwa malengo ya cygwin).

Haya ni pamoja na: "_cygwin_dll_entry @ 12", "_cygwin_crt0_common @ 8", "_fmode", "_impure_ptr", "cygwin_attach_dll", "cygwin_premain0", "cygwin_premain1", "cygwin_premain2", "cygwin_premain3 ", na" karibu ".

- ishara ya ishara -alama , ishara , ...

Inabainisha orodha ya alama ambazo hazipaswi kuwa nje ya moja kwa moja. Majina ya ishara yanaweza kupunguzwa na vitambaa au colons.

- Exhibit-libs lib , lib , ...

Inabainisha orodha ya maktaba ya kumbukumbu ambazo alama haipaswi kusafirishwa moja kwa moja. Majina ya maktaba yanaweza kupunguzwa na mazao au makolons. Kufafanua "- exclude-libs ALL" huhusisha alama katika maktaba yote ya kumbukumbu kutoka kwa mauzo ya moja kwa moja. Viashiria vilivyoorodheshwa kwenye faili ya .def bado vinatumwa, bila kujali chaguo hili.

- usafi wa ufikiaji

Taja usawa wa faili. Sehemu katika faili zitaanza daima kwenye faili ambazo zinazidisha idadi hii. Hii imeshindwa hadi 512.

- hifadhi ya hifadhi

- weka hifadhi , fanya

Eleza kiasi cha kumbukumbu ambacho kitahifadhi (na hiari ya kufanya) ili kutumika kama chungu kwa programu hii. Kichapishaji ni 1Mb iliyohifadhiwa, 4K uliofanywa.

thamani ya msingi

Tumia thamani kama anwani ya msingi ya programu yako au dll. Hii ndiyo eneo la chini la kumbukumbu ambalo litatumika wakati programu yako au dll imefungwa. Ili kupunguza umuhimu wa kuhamisha na kuboresha utendaji wa dll zako, kila mmoja anapaswa kuwa na anwani ya msingi ya msingi na usiingie dll nyingine yoyote. Kichapishaji ni 0x400000 kwa executables, na 0x10000000 kwa dlls.

- upungufu

Ikiwa imetolewa, vidokezo vya stdcall (@ nn ) vitaondolewa kutoka alama kabla ya kuuza nje.

- thamani ya toleo la picha

Inaweka idadi kubwa ya `` toleo la picha ''. Inafaulu kwa 1.

- thamani ya toleo la os

Inaweka idadi kubwa ya '`os version' '. Inafaulu kwa 4.

- thamani ya kiwango cha chini ya mfumo

Inaweka idadi kubwa ya '`subsystem version' '. Inafaulu kwa 4.

- thamani ya ubora wa picha

Inaweka idadi ndogo ya `` toleo la picha ''. Inafaulu kwa 0.

- thamani ndogo ya toleo la os

Inaweka idadi ndogo ya '`os version' '. Inafaulu kwa 0.

- thamani ya kiwango cha chini ya mfumo

Inaweka idadi ndogo ya '`subsystem version' '. Inafaulu kwa 0.

file-defput def

The linker itaunda file faili ambayo itakuwa na faili DEF sambamba na DLL linker ni kuzalisha. Faili hii ya DEF (ambayo inapaswa kuitwa "* .def") inaweza kutumika kutengeneza maktaba ya kuagiza na "dlltool" au inaweza kutumika kama kumbukumbu ya alama moja kwa moja au kwa usahihi.

faili-implib faili

The linker itaunda file faili ambayo itakuwa na kuingiza lib sambamba na DLL linker ni kuzalisha. Kuagiza hii lib (ambayo inapaswa kuitwa "* .dll.a" au "* .a" inaweza kutumika kuunganisha wateja dhidi ya DLL iliyozalishwa; tabia hii inafanya iwezekanavyo kuruka hatua tofauti ya uumbaji wa maktaba ya "dlltool".

imara-auto-image-base

Chagua moja kwa moja msingi wa picha kwa DLL, isipokuwa mmoja atakapotumia kwa kutumia "hoja-msingi" hoja. Kwa kutumia hash inayotokana na jina la jina ili kuunda msingi wa picha za kipekee kwa kila DLL, migongano ya kumbukumbu na kuhamishwa ambayo inaweza kuchelewa utekelezaji wa programu ni kuepukwa.

msingi-msingi-picha-msingi

Je! Sio moja kwa moja kuzalisha msingi wa picha ya kipekee. Ikiwa hakuna msingi wa picha maalum wa mtumiaji ("-image-msingi") halafu utumie jukwaa la msingi.

- kamba ya kwanza ya utafutaji

Unapounganisha kwa nguvu dll bila maktaba ya kuagiza, tafuta " .dll" kulingana na "lib .dll". Tabia hii inaruhusu tofauti rahisi kati ya DLL zilizojengwa kwa `` subplatforms `'mbalimbali: asili, cygwin, uwin, pw, nk Kwa mfano, cygwin DLLs hutumia" -dll-search-prefix = cyg ".

- kuweza-kuagiza-auto

Je, unaunganisha kisasa cha "_symbol" na "__imp__symbol" kwa uagizaji wa DATA kutoka kwa DLL, na kuunda alama muhimu za kujifungua wakati wa kujenga maktaba ya kuagiza pamoja na bidhaa hizo za DATA. Hii kwa ujumla itafanya 'kazi tu' --- lakini wakati mwingine unaweza kuona ujumbe huu:

"variable" 'haiwezi kuagizwa kwa auto. Tafadhali soma nyaraka kwa ajili ya ld "- inayoweza-auto-kuagiza" kwa maelezo. "

Ujumbe huu hutokea wakati mwingine (sub) kujieleza upatikanaji anwani hatimaye kutolewa kwa jumla ya constants mbili (Win32 kuagiza meza tu kuruhusu moja). Mazingira ambapo hii inaweza kutokea ni pamoja na upatikanaji wa maeneo ya wanachama wa vigezo struct nje kutoka DLL, pamoja na kutumia index mara kwa mara katika safu variable zilizoagizwa kutoka DLL. Chombo chochote cha multiword (mipangilio, miundo, muda mrefu, nk) inaweza kusababisha hali hii ya hitilafu. Hata hivyo, bila kujali aina halisi ya data ya kutofautiana kwa mauzo ya nje, ld itagundua daima, itatoa onyo, na uondoke.

Kuna njia kadhaa za kukabiliana na shida hii, bila kujali aina ya data ya variable ya nje:

Njia moja ni kutumia -guo-run-run-pseudo-reloc switch. Hii inachagua kazi ya kurekebisha marejeo katika msimbo wako wa mteja kwa mazingira ya wakati wa kukimbia, hivyo njia hii inafanya kazi wakati wa mazingira ya wakati wa kukimbia unasaidia kipengele hiki.

Suluhisho la pili ni kulazimisha moja ya 'constants' kuwa tofauti - ambayo ni, haijulikani na haiwezi kufanywa wakati wa kuunganisha. Kwa safu, kuna uwezekano mawili: a) kufanya indexee (anwani ya safu) kutofautiana, au b) kufanya index 'mara kwa mara' kuwa variable. Hivyo:

aina ya nje extern_array []; extern_array [1] -> {aina tete * t = extern_array; t [1]}

au

aina ya nje extern_array []; extern_array [1] -> {tete int t = 1; extern_array [t]}

Kwa miundo (na aina nyingine nyingi za data ya habari) chaguo pekee ni kufanya muundo wa yenyewe (au mrefu ya muda mrefu, au ...):

extern_struct nje ya struct; extern_struct.field -> {struct s tati & extern_struct; t-> shamba}

au

nje ya muda mrefu nje extern_ll; extern_ll -> {tete ndefu kwa muda mrefu * loc_ll = & extern_ll; * eneo_ll}

Njia ya tatu ya kushughulika na ugumu huu ni kuacha 'auto-import' kwa ishara ya kuumiza na kuiashiria kwa "__declspec (dllimport)". Hata hivyo, katika mazoezi ambayo inahitaji kutumia muda wa kukusanya -defines ili kuonyesha kama unajenga DLL, msimbo wa mteja wa kujenga ambao utaunganishwa na DLL, au tu kujenga / kuunganisha kwenye maktaba ya static. Kwa kufanya uchaguzi kati ya mbinu mbalimbali za kutatua 'anwani ya moja kwa moja na matatizo ya mara kwa mara', unapaswa kuzingatia matumizi halisi ya ulimwengu:

Original:

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

Suluhisho 1:

--foo.h extern int arr []; --foo.c # pamoja na "foo.h" tupu tupu (int argc, char ** argv) {/ * Hii kazi ni win32 na cygwin; si "kuboresha" * / tete int * parr = arr; printf ("% d \ n", parr [1]); }

Suluhisho 2:

- Tazama: auto-kuuza nje inachukuliwa (hakuna __declspec (dllexport)) * / #if (defined (_WIN32) || inafanywa (__ CYGWIN__)) && \! (inafadhiliwa (FOO_BUILD_DLL) || inatafanuliwa (FOO_STATIC )) #define FOO_IMPORT __declspec (dllimport) #else #define FOO_IMPORT #endif nje FOO_IMPORT int arr []; --foo.c # pamoja na "foo.h" tupu (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

Njia ya nne ya kuepuka tatizo hili ni kurejesha tena maktaba yako kutumia interface ya kazi badala ya interface ya data kwa vigezo vibaya (kwa mfano set_foo () na get_foo () accessor kazi).

- haiwezi kuagiza-kuagiza

Usijaribu kufanya kiunganisho kisasa cha "_symbol" na "__imp__symbol" kwa vituo vya DATA kutoka kwa DLLs.

- inayoweza-kukimbia-pseudo-reloc

Ikiwa msimbo wako una maneno yaliyoelezwa kwenye sehemu isiyoweza-auto-kuagiza, yaani, DATA viports kutoka kwa DLL na yasiyo ya zero offset, kubadili hii itaunda vector ya "runtime pseudo uhamisho" ambayo inaweza kutumika kwa mazingira ya kukimbia kurekebisha kumbukumbu kwa data kama hiyo katika msimbo wako wa mteja.

- kuacha-kukimbia-kukimbia-pseudo-reloc

Usijenge uhamisho wa pseudo kwa uingizaji wa DATA usio na sifuri ulioondoa kutoka kwa DLL. Hii ni default.

- ya kutosha-ya ziada-debug

Onyesha maelezo ya uharibifu wa ziada kuhusiana na ushujaaji wa ishara ya auto.

- ushirikiano wa ushirikiano

Inaweka usawa wa sehemu. Sehemu katika kumbukumbu zitaanza daima kwenye anwani ambazo ni nyingi za nambari hii. Inafaulu kwa 0x1000.

- uhifadhi hifadhi

- weka hifadhi , fanya

Eleza kiasi cha kumbukumbu ambazo utahifadhi (na hiari ya kufanya) ili kutumika kama stack ya programu hii. Kichapishaji ni 2Mb iliyohifadhiwa, 4K imefungwa.

- mfumo ambao

- mfumo ambao : kuu

- mfumo ambao : kuu . mdogo

Inataja mfumo wa chini ambayo programu yako itatekeleza. Maadili ya kisheria ambayo ni "asili", "madirisha", "console", na "posix". Unaweza kuchagua chaguo la chini ya mfumo pia.

Muhimu: Tumia amri ya mtu ( % mtu ) ili kuona jinsi amri hutumiwa kwenye kompyuta yako fulani.