Linux / Unix Каманда: Id

NAME

LD - Выкарыстанне LD , то ДНУ линкер

сінтаксіс

Л.Д. [ опцыі ] objfile ...

АПІСАННЕ

Л.Д. аб'ядноўвае некалькі аб'ектных і архіўных файлаў , перамяшчае іх дадзеныя і звязвае сімвалічныя спасылкі. Звычайна апошні крок пры складанні праграмы з'яўляецца запуск ЛДА.

Л.Д. прымае Linker Command Language файлаў , запісаныя ў супернабороме сінтаксісу Link Editor Command Language AT & T, у, каб забяспечыць выразны і поўны кантроль над працэсам злучэння.

Дадзеная старонка не апісвае мова каманд; см запіс Л.Д. ў «Інфармацыі», або ўручную LD: GNU кампаноўнік, для атрымання поўнай інфармацыі па камандным мове і па іншых аспектах theGNU линкера.

Гэтая версія Л.Д. выкарыстоўвае агульныя бібліятэкі прызначэння BFD для працы з аб'ектнымі файламі. Гэта дазваляе Л.Д. чытаць, камбінаваць і пісаць аб'ектныя файлы ў розных фарматах --- напрыклад, COFF або «a.out». Розныя фарматы могуць быць звязаны адзін з адным для атрымання любога даступнага аб'ектнага файла.

Акрамя сваёй гнуткасці, кампаноўнік GNU з'яўляецца больш карысным, чым іншыя линкеров ў прадастаўленні дыягнастычнай інфармацыі. Многія линкеры адмовіцца ад выканання неадкладна пры выяўленні памылкі; кожны раз , калі гэта магчыма, Л.Д. працягвае выкананне, што дазваляе ідэнтыфікаваць іншыя памылкі (ці, у некаторых выпадках, каб атрымаць выхадны файл, нягледзячы на памылкі).

ДНУ линкер LD прызначаны , каб ахапіць шырокае кола сітуацый, а таксама быць сумяшчальнымі , як гэта магчыма з іншымі линкерами. У выніку, у вас ёсць шмат варыянтаў, каб кантраляваць свае паводзіны.

варыянты

Кампаноўнік падтрымлівае мноства опцый каманднага радка , але ў рэальнай практыцы некаторыя з іх выкарыстоўваюцца ў тым ці іншым кантэксце. Напрыклад, частае выкарыстанне ЛДА, каб звязаць стандартныя аб'ектныя файлы Unix на стандарце, падтрымліваемую сістэму Unix . У такой сістэме, каб звязаць файл «hello.o»:

Л.Д. -o <выхад> /lib/crt0.o hello.o -lc

Гэта сведчыць ЛД , каб стварыць файл з імем высновы ў выніку звязвання файла «/lib/crt0.o» з «hello.o» і бібліятэкі «libc.a», якая будзе паступаць з стандартных пошукавых каталогаў. (Глядзіце абмеркаванне опцыі -l ніжэй) .

Некаторыя з параметраў каманднага радка Л.Д. могуць быць зададзены ў любы момант у камандным радку. Аднак, параметры , якія адносяцца да файлаў, такім як -l або -T, выклікаць файл для чытання ў кропцы , у якой параметр з'яўляецца ў камандным радку, па адносінах да аб'ектным файлаў і іншых параметрах файла. Паўтараючы варыянты не-файлаў з іншым аргументам будзе альбо мець ніякага далейшага эфекту, або перавызначыць папярэднія ўваходжання (тыя, далей налева, у камандным радку) гэтай опцыі. Параметры, якія могуць быць асэнсавана пазначаны больш за адзін раз, пазначаны ў апісанні ніжэй.

непараметрических аргументаў з'яўляюцца аб'ектныя файлы або архівы, якія павінны быць звязаныя паміж сабой. Яны могуць прытрымлівацца, папярэднічаць, або змешвацца з параметрамі каманднага радка, за выключэннем таго, што аб'ектны файл аргумент не можа быць змешчаны паміж і яго аргументам.

Звычайна линкер выклікаецца па меншай меры адзін файл аб'екта, але вы можаце паказаць іншыя формы двайковых ўваходных файлаў з дапамогай -l, -R, і камандны мова сцэнара. Калі двайковыя ўваходныя файлы наогул не пазначаныя, линкер не вырабляе ніякай прадукцыі, і не выдае У паведамленні няма ўваходных файлаў.

Калі линкер не можа распазнаць фармат аб'ектнага файла, ён будзе лічыць, што яна ўяўляе сабой линкер сцэнар. Сцэнар паказана такім чынам , павялічвае асноўны скрыпт кампаноўніка , які выкарыстоўваецца для сувязі (альбо скрыпт линкера па змаўчанні або адзін пазначаны з дапамогай -T). Гэтая функцыя дазваляе кампаноўнік звязаць з файлам, які, як уяўляецца, аб'ект або архіў, але на самой справе проста вызначае некаторыя значэння сімвалаў, ці выкарыстае «INPUT» або «GROUP», каб загрузіць іншыя аб'екты. Звярніце ўвагу, што задаўшы сцэнар такім чынам, толькі дапаўняе асноўны кампаноўніка сцэнарыя; З дапамогай опцыі -t цалкам замяніць скрыпт кампаноўніка па змаўчанні.

Для тых, чыіх імёнаў з'яўляюцца адной літарай, аргументы опцыі павінны прытрымлівацца альбо літары параметру без прамежкавых прабелаў, або быць зададзены як асобныя аргументы адразу пасля варыянту, які патрабуе ад іх.

Для тых, чыіх імёнаў некалькі літар, альбо адзін ці два ціра можа папярэднічаць імя параметру; напрыклад, -trace-сімвал і сімвал --trace-эквівалентныя. Звярніце ўвагу - ёсць адно выключэнне з гэтага правіла. Некалькі варыянтаў лісты, якія пачынаюцца з малой «о» можа быць папярэднічаецца толькі двума рысачкамі. Гэта дазваляе пазбегнуць блытаніны з опцыяй -o. Так, напрыклад -omagic задае імя выхаднога файла магіі , тады як --omagic ўсталёўвае сцяг NMAGIC на выхадзе.

Аргументы опцый множных літар павінны быць альбо аддзялення ад імя параметру знака роўнасці, або быць зададзены як асобныя аргументы адразу пасля варыянту, які патрабуе ад іх. Напрыклад, --trace-сімвал Foo і --trace-сімвал = Foo эквівалентныя. Унікальныя абрэвіятуры назваў опцый множных літарных прымаюцца.

Заўвага - калі кампаноўнік быць выкліканы ўскосна, праз драйвер кампілятара (напрыклад , GCC) , то ўсё опцыі каманднага радка кампаноўніка павінны быць прэфіксам -Wl, (ці то , што падыходзіць для канкрэтнага драйвера кампілятара) , як гэта:

НКА-, - startgroup foo.o bar.o -Wl, - ENDGROUP

Гэта важна, таму што ў адваротным выпадку праграма драйвера кампілятара можа маўкліва апускаюць опцыі кампаноўніка, што прыводзіць да дрэннай сувязі.

Вось табліца родавых ключоў каманднага радка, прыняты линкером GNU:

-a ключавое слова

Гэтая опцыя падтрымліваецца для сумяшчальнасці з HP / UX. Аргумент ключавых слоў павінен быць адзін з радкоў архіва, агульныя або па змаўчанні. -aarchive функцыянальна эквівалентная -Bstatic, а дзве іншыя ключавыя словы функцыянальна эквівалентныя -Bdynamic. Гэтая опцыя можа выкарыстоўвацца любую колькасць разоў.

- архітэктура

--Парковая = архітэктура

У бягучай версіі Л.Д., гэтая опцыя карысная толькі для сямейства архітэктур Intel 960. У гэтай канфігурацыі Л.Д., архітэктура аргумент ідэнтыфікуе канкрэтную архітэктуру ў 960 сям'і, што дазваляе пэўныя гарантыі і мадыфікацыі архіў бібліятэкі шляху пошуку.

Будучыя выпускі Л.Д. могуць падтрымліваць аналагічныя функцыянальныя магчымасці для іншых сямействаў архітэктуры.

-b уваходнага фармату

--format = ўваходных фармат

Л.Д. можа быць сканфігураваны для падтрымкі больш аднаго аб'ектнага файла. Калі Л.Д. наладжаны такім чынам, вы можаце выкарыстоўваць опцыю -b ўказаць двайковы фармат для ўводу аб'ектных файлаў , якія ідуць гэтай опцыі ў камандным радку. Нават калі Л.Д. настроены для падтрымкі альтэрнатыўных фарматаў аб'ектаў, вы звычайна не патрабуецца ўказваць, паколькі Л.Д. павінен быць наладжаны чакаць у фармаце ўводу па змаўчанні самы звычайны фармат на кожнай машыне. Ўваходных фармат ўяўляе сабой тэкставую радок, назва пэўнага фармату , падтрымоўванага бібліятэкай BFD. (Вы можаце атрымаць спіс даступных бінарных фарматаў з objdump -i.)

Вы можаце выкарыстоўваць гэтую опцыю, калі вы звязваеце файлы з незвычайным двайковым фарматам. Вы таксама можаце выкарыстоўваць -b для пераключэння фарматаў відавочна (пры злучэнні аб'ектных файлаў розных фарматаў), у тым ліку шляхам -b ўводу-фармат перад кожнай групай аб'ектных файлаў у пэўным фармаце.

Фармат па змаўчанні бярэцца з зменнай асяроддзі «GNUTARGET».

Акрамя таго, можна вызначыць фармат уводу з сцэнара, выкарыстоўваючы каманду «TARGET»;

-c MRI-commandfile

--mri-скрыпт = MRI-commandfile

Для сумяшчальнасці з линкерами , атрыманых з дапамогай МРТ, Л.Д. прымае файлы сцэнарыяў , напісаных у якасці альтэрнатыўнага, абмежаваны мову каманд, апісаных у MRI Сумяшчальны Script раздзеле Файлы Л.Д. дакументацыі GNU. Уявіце файлы сцэнарыяў МРТ з опцыяй -c; З дапамогай опцыі -t для запуску кампаноўніка скрыпты , напісаны на мове агульнага прызначэння Л.Д. сцэнарыяў. Калі МРТ-cmdfile не існуе, Л.Д. шукае яго ў каталогах , зададзеных любымі опцыямі -L.

-d

-dc

-dp

Гэтыя тры варыянты эквівалентныя; множныя формы падтрымліваюцца для сумяшчальнасці з іншымі линкерами. Прызначаюць прастору для агульных сімвалаў , нават калі перамяшчаўся выхадны файл зададзены (з -r). Камандны сцэнар «FORCE_COMMON_ALLOCATION» мае той жа эфект.

-e запіс

--entry = запіс

Выкарыстоўвайце запіс у якасці яўнага сімвала для пачатку выканання вашай праграмы, а не кропка ўваходу па змаўчанні. Калі няма сімвала з імем ўваходу, кампаноўнік будзе спрабаваць разабраць запісы ў выглядзе ліку, і выкарыстоўваць яго ў якасці адрасу ўводу (лік будзе інтэрпрэтавацца ў базе 10, вы можаце выкарыстоўваць 0x , для падставы 16, або вядучых 0 для падставы 8).

-E

--export-дынамічная

Пры стварэнні дынамічна звязаны выкананы файл, дадаць ўсе знакі ў дынамічнай табліцы знакаў. Дынамічная табліца сімвалаў з'яўляецца наборам знакаў, якія бачныя з дынамічных аб'ектаў падчас выканання.

Калі вы не выкарыстоўваеце гэтую опцыю, дынамічная табліца сімвалаў звычайна змяшчае толькі тыя сімвалы, якія спасылаюцца на нейкі дынамічнага аб'екта, названага ў спасылцы.

Калі вы выкарыстоўваеце «dlopen», каб загрузіць дынамічны аб'ект, які трэба спасылацца на знакі, вызначаныя ў праграме, а не які-небудзь іншы дынамічны аб'ект, то вам, верагодна, давядзецца выкарыстоўваць гэтую опцыю пры кампаноўцы самой праграмы.

Вы таксама можаце выкарыстоўваць версію скрыпту для кіравання, якія сімвалы павінны быць дададзены ў дынамічную табліцу сімвалаў, калі выхадны фармат падтрымлівае. Глядзіце апісанне --version-скрыпт в @ иом {VERSION}.

-EB

Спасылка аб'ектаў тупаканечнікаў. Гэта ўплывае на фармат высновы па змаўчанні.

-EL

Link мала-Endian аб'ектаў. Гэта ўплывае на фармат высновы па змаўчанні.

-f

--auxiliary імя

Пры стварэнні ELF сумесна выкарыстоўванага аб'екта, усталяваць ўнутраны DT_AUXILIARY поле з паказаным імем. Гэта сведчыць аб тым , што дынамічны кампаноўнік табліца сімвалаў агульнай аб'екта павінен быць выкарыстаны ў якасці дапаможнага фільтра на табліцу сімвалаў імя агульнага аб'екта.

Калі ў далейшым звязаць праграму супраць гэтага аб'екта фільтра, а затым, пры запуску праграмы, дынамічны кампаноўнік будзе бачыць DT_AUXILIARY поля. Калі дынамічны кампаноўнік дазваляе любыя сімвалы з аб'екта фільтра, ён спачатку правярае , ці ёсць вызначэнне ў імя агульнага аб'екта. Калі ёсць адзін, ён будзе выкарыстоўвацца замест вызначэння ў аб'екце фільтра. Імя агульнага аб'екта не павінна існаваць. Такім чынам, назва агульнай аб'екта можа быць выкарыстана , каб забяспечыць альтэрнатыўную рэалізацыю некаторых функцый, магчыма , для адладкі або для канкрэтнага выканання машыны.

Гэтая опцыя можа быць указана некалькі разоў. Запісы DT_AUXILIARY будуць стварацца ў тым парадку, у якім яны з'яўляюцца ў камандным радку.

-F імя

--filter імя

Пры стварэнні ELF сумесна выкарыстоўванага аб'екта, усталяваць ўнутранае поле DT_FILTER з паказаным імем. Гэта сведчыць аб тым , што дынамічны кампаноўнік табліца сімвалаў сумесна выкарыстоўванага аб'екта , які ствараецца павінен быць выкарыстаны ў якасці фільтра на табліцу сімвалаў імя агульнага аб'екта.

Калі ў далейшым звязаць праграму супраць гэтага аб'екта фільтра, а затым, пры запуску праграмы, дынамічны кампаноўнік будзе бачыць поле DT_FILTER. Дынамічны кампаноўнік будзе вырашаць сімвалы ў адпаведнасці з табліцай сімвалаў аб'екта фільтра , як звычайна, але гэта будзе на самой справе спасылкі на вызначэння знойдзеных ў імя агульнага аб'екта. Такім чынам , аб'ект фільтра можа быць выкарыстаны для выбару падмноства сімвалаў , прадстаўленых імя аб'екта.

Некаторыя старыя линкеры выкарыстоўвалі -F варыянт ўсёй кампіляцыі набору інструментаў для вызначэння фармату аб'ектнага файла як для ўваходных і выходных аб'ектных файлаў. Кампаноўнік GNU выкарыстоўвае іншыя механізмы для гэтай мэты: у -b, --format, --oformat параметраў, каманда «TARGET» у кампаноўнік скрыптах і пераменны атачэнне «GNUTARGET». Кампаноўнік GNU будзе ігнараваць параметр -F , калі не ствараючы ELF агульнай аб'екта.

-fini імя

Пры стварэнні ELF выкананы файл або агульны аб'ект, выклічце NAME, калі выкананы файл або агульны аб'ект выгружаецца, усталяваўшы DT_FINI на адрас функцыі. Па змаўчанні, кампаноўнік выкарыстоўвае «_fini» у якасці функцыі для выкліку.

-g

Ігнаруецца. Пры ўмове сумяшчальнасці з іншымі інструментамі.

-G значэнне

--gpsize = значэнне

Ўсталяваць максімальны памер аб'ектаў павінны быць аптымізаваны з дапамогай рэгістра GP памеру. Гэта мае сэнс толькі для фарматаў аб'ектных файлаў, такіх як MIPS ECOFF, які падтрымлівае пакласці буйныя і дробныя прадметы ў розныя дысцыпліны. Гэта ігнаруецца для іншых фарматаў аб'ектных файлаў.

-h імя

-soname = імя

Пры стварэнні ELF сумесна выкарыстоўванага аб'екта, усталяваць ўнутранае поле DT_SONAME з паказаным імем. Калі выкананы файл звязаны з агульным аб'ектам, які мае поле DT_SONAME, а затым, калі выкананы файл запускаецца дынамічны кампаноўнік будзе спрабаваць загрузіць агульны аб'ект, названы ў полі DT_SONAME, а не выкарыстоўваць імя файла, названы линкер.

-i

Выкананне Інкрыментны спасылкі ( такі ж , як опцыя -r).

-init імя

Пры стварэнні ELF выкананы файл або агульны аб'ект, выклічце NAME, калі выкананы файл або агульны аб'ект загружаецца, усталяваўшы DT_INIT на адрас функцыі. Па змаўчанні, кампаноўнік выкарыстоўвае «_init» у якасці функцыі для выкліку.

-l архіў

--library = архіў

Дадаць архіўны файл архіва ў спіс файлаў звязаць. Гэтая опцыя можа выкарыстоўвацца любую колькасць разоў. Л.Д. будзе шукаць свой шлях-спіс для ўваходжання «libarchive.a» для кожнага архіва названага.

У сістэмах , якія падтрымліваюць падзяляем бібліятэкі, Л.Д. можа таксама пошук бібліятэк з іншымі , чым «.a» пашырэннямі. У прыватнасці, у сістэмах ELF і SunOS, Л.Д. будзе шукаць каталог для бібліятэкі з пашырэннем «.so» , перш чым шукаць адзін з пашырэннем «.a». Паводле пагаднення, «.so» пашырэнне паказвае на агульную бібліятэку.

Кампаноўнік будзе шукаць архіў толькі адзін раз, у тым месцы, дзе ён паказаны ў камандным радку. Калі архіў вызначае сімвал, які быў нявызначаным ў нейкім аб'екце, які з'явіўся перад архівам у камандным радку, кампаноўнік будзе ўключаць у сябе адпаведны файл (ы) з архіву. Тым не менш, нявызначаны знак у аб'екце з'яўляецца пазней у камандным радку не будзе выклікаць кампаноўнік зноў шукаць архіў.

Глядзіце - (варыянт для спосабу , каб прымусіць линкер шукаць архівах некалькі разоў.

Вы можаце пералічыць тыя ж архіў некалькі раз у камандным радку.

Гэты тып архіўнага пошуку з'яўляецца стандартным для Unix линкера. Аднак, калі вы карыстаецеся Л.Д. onAIX, звярніце ўвагу , што яна адрозніваецца ад паводзінаў AIX линкера.

-L searchdir

--library-шлях = searchdir

Дадаць шлях searchdir ў спіс шляхоў, Л.Д. будзе шукаць архіў бібліятэкі і сцэнары кіравання л.д .. Вы можаце выкарыстоўваць гэтую опцыю любую колькасць разоў. Каталогі шукаюцца ў тым парадку, у якім яны пазначаны ў камандным радку. Каталогі, названыя ў камандным радку перад пошукам каталогаў па змаўчанні. Усе -L опцыі прымяняюцца да ўсіх -l варыянтаў, незалежна ад таго , у якім з'яўляюцца варыянты.

Калі searchdir пачынаецца з «=», то «=» будзе заменены прэфіксам SYSROOT, шлях , пазначаны пры линкер сканфігураваны.

Мноства шляхоў па змаўчанні пошук (без ўказанні з -L) залежыць ад рэжыму эмуляцыі Л.Д. выкарыстоўваецца, а ў некаторых выпадках і пра тое , як ён быў настроены.

Шляху таксама могуць быць паказаны ў сцэнары сувязі з камандай «SEARCH_DIR». Каталогі, названыя такім чынам шукаюцца ў кропцы, у якой скрыпт линкера з'яўляецца ў камандным радку.

-m эмуляцыя

Эмуляцыя эмуляцыі линкер. Вы можаце атрымаць спіс даступных эмуляцыі з --verbose або -V опцый.

Калі опцыя -m не выкарыстоўваецца, эмуляцыя бярэцца з зменнай асяроддзі «LDEMULATION», калі гэта вызначана.

У адваротным выпадку, эмуляцыя па змаўчанні залежыць ад таго, як быў настроены линкер.

--print-карта

Раздрукаваць карту спасылкі на стандартны вывад. Карта спасылка змяшчае інфармацыю пра сувязь, у тым ліку наступныя:

*

Дзе аб'ектныя файлы і сімвалы адлюстроўваюцца ў памяць.

*

Як агульныя сімвалы выдзяляюцца.

*

Усе члены архіва ўключаны ў спасылцы, з згадваннем пра сімвал, які выклікаў архіўныя выхоўвацца ст.

-n

--nmagic

Выключыце выраўноўванне старонкі раздзелаў, і калі магчыма пазначыць файл як «NMAGIC».

-N

--omagic

Усталюйце секцыі тэксту і дадзеных, каб быць для чытання і запісы. Акрамя таго, не старонкі выраўноўвання сегмента дадзеных, і адключыць сувязь з падзялянымі бібліятэкамі. Калі фармат вываду падтрымлівае Unix стыль магічных лікаў, адзначце выснову, як «OMAGIC».

--no-omagic

Гэтая опцыя адмяняе большасць эфектаў опцыі -N. Яна ўсталёўвае тэкставы раздзел будзе даступная толькі для чытання, і прымушае сегмент дадзеных быць старонкі выраўнаваны. Заўвага - гэтая опцыя не дазваляе лінковкі падзяляем бібліятэк. Выкарыстоўвайце -Bdynamic для гэтага.

выхад

--output = выхад

Выкарыстоўвайце выхад у якасці імя для праграмы вытворчасці ЛД; калі гэты параметр не зададзены, то імя a.out выкарыстоўваецца па змаўчанні. Камандны сцэнар «OUTPUT» можна таксама пазначыць імя выхаднога файла.

ўзроўню

Калі ўзровень уяўляе сабой лікавыя значэння больш за нуль LD аптымізуе выхад. Гэта можа заняць значна больш часу і таму, верагодна, павінна быць уключана толькі для канчатковага двайковага файла.

-q

--emit-relocs

Пакіньце раздзелы пераезду і ўтрыманне ў цалкам звязаныя exececutables. Post інструментаў аналізу і аптымізацыі спасылкі могуць спатрэбіцца гэтая інфармацыя для таго, каб выканаць правільныя мадыфікацыі выкананых файлаў. Гэта прыводзіць да буйнейшых выкананых файлаў.

Гэтая опцыя ў цяперашні час падтрымліваецца толькі на ELF платформаў.

-r

--relocateable

Сфармаваць перамяшчаўся выхад --- гэта значыць, генераваць выхадны файл , які ў сваю чаргу можа служыць у якасці ўваходных дадзеных Л.Д .. Гэта часта называюць частковае сшыванне. У якасці пабочнага эфекту, у асяроддзях, якія падтрымліваюць стандартныя нумары магічнай Unix, гэтая опцыя таксама ўстанаўлівае магічны нумар выхаднога файла на «OMAGIC». Калі гэты параметр не паказаны, абсалютны файл вырабляецца. Пры кампаноўцы праграм C ++, гэтая опцыя не будзе дазваляць спасылкі на канструктары; каб зрабіць гэта, выкарыстоўвайце -ur.

Калі ўваходны файл не мае такой жа фармат у якасці выхаднога файла, частковае звязванне падтрымліваецца толькі калі ўваходны файл не ўтрымлівае ніякіх пераездаў. Розныя фарматы вываду могуць мець дадатковыя абмежаванні; напрыклад, некаторыя «a.out» -ы фарматы не падтрымліваюць частковае звязванне з уваходнымі файламі ў іншых фарматах на ўсіх.

Гэтая опцыя робіць тое ж самае , што і -i.

-R імя файла

--just-сімвалы = імя_файла

Прачытайце знакавыя імёны і іх адрасы з файла, але не перанесьці яго ці ўключыць яго на выхадзе. Гэта дазваляе ваш выхадны файл сімвалічны ставіцца да абсалютным месцазнаходжанне памяці, вызначаным у іншых праграмах. Вы можаце выкарыстоўваць гэты варыянт больш за адзін раз.

Для сумяшчальнасці з іншымі ELF линкера, калі опцыя -R вынікаюць імя каталога, а не імя файла, яно разглядаецца як варыянт -rpath.

-s

--strip-ўсё

Апусцім ўсе знакавай інфармацыі з выхаднога файла.

-S

--strip-адладка

Апусціць знакавую інфармацыю адладчыка (але не ўсе знакі) з выхаднога файла.

-t

--trace

Вывесці імёны ўваходных файлаў, Л.Д. апрацоўвае іх.

-T файл_сценария

--script = файл_сценарий

Выкарыстоўвайце файл_сценарий як сцэнар кампаноўніка. Гэты сцэнар замяняе сцэнар кампаноўніка Л.Д. «s па змаўчанні (а не дадаваць да яго), таму commandfile неабходна ўказаць усё неабходнае , каб апісаць выхадны файл. Калі файл_сценарий не існуе ў бягучым каталогу, «ЛД» шукае яго ў каталогах , зададзеных любых папярэднічалі опцыямі -L. Некалькі -T опцыі назапашваюцца.

-u сімвал

--undefined = сімвал

Сімвал сілы , каб увесці ў выходны файл у якасці нявызначанага знака. Рабіць гэта можа, напрыклад, выклікаць сувязь дадатковых модуляў з стандартных бібліятэк. -u можа паўтарацца з рознымі аргументамі опцый , каб увесці дадатковыя нявызначаныя сімвалы. Гэтая опцыя эквівалентная «EXTERN» каманда кампаноўніка сцэнара.

-ur

Для чаго - небудзь, акрамя праграм C ++, гэтая опцыя эквівалентная -r: яна генеруе перамяшчаўся выхад --- гэта значыць выхадны файл , які ў сваю чаргу можа служыць у якасці ўваходных дадзеных Л.Д .. Пры кампаноўцы праграм C ++, -ur робіць дазвол спасылак на канструктары, у адрозненні ад -r. Яна не працуе , каб выкарыстоўваць -ur на файлы , якія самі былі звязаны з -ur; пасля таго, як табліца канструктара была пабудавана, ён не можа быць дададзены. Выкарыстоўвайце -ur толькі для апошняй частковай лініі сувязі і -r для іншых.

--unique [= РАЗДЗЕЛ]

Стварае асобную выходную секцыю для кожнага ўваходнага ўчастка ўзгаднення РАЗДЕЛА, або калі дадатковы групавога сімвал РАЗДЗЕЛ аргумент адсутнічае, для кожнай сірочай ўваходных секцыі. Раздзел сіроты адзін канкрэтна не згадваецца ў сцэнары кампаноўкі. Вы можаце выкарыстоўваць гэтую опцыю некалькі раз у камандным радку; Гэта перашкаджае нармальнаму зьліцьця ўваходных секцый з тым жа імем, перакрываючы выходную секцыю заданняў у сцэнары кампаноўкі.

-v

--version

-V

Вывесці нумар версіі для ЛД. Опцыя -V таксама змяшчае спіс падтрымліваецца эмуляцыі.

-x

--discard-ўсё

Выдаліць усе лакальныя сімвалы.

-X

--discard-мясцовыя

Выдаліць усе часовыя лакальныя сімвалы. Для большасці мэтаў, гэта ўсё лакальныя сімвалы, імёны якіх пачынаюцца з L.

-y сімвал

--trace-сімвал = сімвал

Выдаваць імя кожнага звязанага файла , у якім з'яўляецца сімвал. Гэтая опцыя можа быць дадзена любую колькасць разоў. У многіх сістэмах неабходна папярэднічаць падкрэсліванне.

Гэтая опцыя карысная, калі ў вас ёсць нявызначаны знак у вашай спасылцы, але не ведаюць, дзе спасылка зыходзіць ад.

-Y шлях

Дадаць шлях па змаўчанні шляху пошуку бібліятэк ст. Гэтая опцыя існуе для сумяшчальнасці з Solaris.

-z ключавое слова

Прызнаныя ключавыя словы "initfirst", "ўстаўляе", "loadfltr", "NODEFAULTLIB", "nodelete", "nodlopen", "nodump", "зараз", "паходжанне", "combreloc", "nocombreloc" і "nocopyreloc ». Іншыя ключавыя словы ігнаруюцца для сумяшчальнасці Solaris. «Initfirst» пазначае аб'ект для ініцыялізацыі першага падчас выканання перад любымі іншымі аб'ектамі. «Ўкліньваецца» адзначае аб'ект, яго сімвал табліцы уставіць перад усімі знакамі, але асноўны выкананы файл. «Loadfltr» адзначае аб'ект, яго filtees неадкладна апрацоўваецца падчас выканання. «NODEFAULTLIB» пазначае аб'ект, што пошук залежнасцяў гэтага аб'екта будзе ігнараваць любая бібліятэка па змаўчанні шляху пошуку. «Nodelete» адзначае аб'ект не павінен быць выгружаны падчас выканання. «Nodlopen» пазначае аб'ект не даступны «dlopen». «Nodump» адзначае аб'ект не можа быць скінуты «dldump». «Цяпер» пазначае аб'ект з абавязковым ня-лянівым выканання. «Паходжанне» адзначае аб'ект можа ўтрымліваць $ ORIGIN. «DEFS» забараняе нявызначаныя сімвалы. «Muldefs» дазваляе некалькі азначэнняў. «Combreloc» спалучае ў сабе некалькі раздзелаў RELOC і сартуе іх, каб зрабіць кэшаванне пошуку дынамічны сімвал магчыма.

«Nocombreloc» адключае некалькі раздзелаў RELOC спалучаюць. «Nocopyreloc» адключае вытворчасць копій relocs.

- (архівы -)

--start-архівы груп --end-груп

Архівы павінны быць спіс архіўных файлаў . Яны могуць быць альбо відавочныя імёны файлаў ці -l варыянтаў.

Названыя архівы шукаюцца, пакуль ніякія новыя нявызначаныя спасылкі не будуць створаны. Звычайна, архіў шукаецца толькі адзін раз у парадку, што ён паказаны ў камандным радку. Калі знак у гэтым архіве неабходна для вырашэння нявызначанага сімвала, на якую спасылаецца аб'ект у архіў, які з'яўляецца пазней у камандным радку, кампаноўнік не зможа вырашыць гэтую спасылку. Групоўка архіваў, усе яны будуць знойдзеныя, пакуль усе магчымыя спасылкі не будуць вырашаны.

Выкарыстанне гэтай опцыі мае значнае зніжэнне прадукцыйнасці. Лепш за ўсё выкарыстоўваць яго толькі тады, калі існуюць непазбежныя цыклічныя спасылкі паміж двума ці некалькімі архівамі.

--accept невядомы-уваход-арка

--no-Accept-невядомую-уваход-арка

Паведамляе линкер прымаць ўваходныя файлы, архітэктура не можа быць распазнаны. Здагадка пра тое, што карыстальнік ведае, што яны робяць, і свядома хоча, каб звязаць у гэтых невядомых ўваходных файлах. Гэта паводзіны па змаўчанні линкера, перад выпускам 2.14. Паводзіны па змаўчанні з версіі 2.14 і далей, каб адхіліць такія ўваходныя файлы, і таму опцыя --accept невядомы-уваход-арка была дададзеная , каб аднавіць старое паводзіны.

-assert ключавое слова

Гэты параметр ігнаруецца для сумяшчальнасці з SunOS .

-Bdynamic

-ды

-call_shared

Спасылка на дынамічныя бібліятэкі. Гэта мае сэнс толькі на платформах , для якіх агульных бібліятэк падтрымліваюцца. Гэты варыянт, як правіла, па змаўчанні на такіх платформах. Розныя варыянты гэтай опцыі для сумяшчальнасці з рознымі сістэмамі. Вы можаце выкарыстоўваць гэтую опцыю некалькі раз у камандным радку: яна ўплывае на бібліятэчны пошук па -l варыянтаў , якія ідуць за ім.

-Bgroup

Усталюйце сцяжок «DF_1_GROUP» у запісе «DT_FLAGS_1» у дынамічным раздзеле. Гэта прыводзіць да линкер часу выканання для апрацоўкі пошукаў у гэтым аб'екце і яго залежнасці, якія будуць выконвацца толькі ўнутры групы. --no-нявызначаны маюцца на ўвазе. Гэты параметр мае сэнс толькі на ELF платформаў , якія падтрымліваюць падзяляем бібліятэкі .

-Bstatic

-dn

-non_shared

-static

Не зьвязвайцеся з падзялянымі бібліятэкамі. Гэта мае сэнс толькі на платформах, для якіх агульных бібліятэк падтрымліваюцца. Розныя варыянты гэтай опцыі для сумяшчальнасці з рознымі сістэмамі. Вы можаце выкарыстоўваць гэтую опцыю некалькі раз у камандным радку: яна ўплывае на бібліятэчны пошук па -l варыянтаў , якія ідуць за ім.

-Bsymbolic

Пры стварэнні падзялянай бібліятэкі, звязаць спасылкі на глабальныя сімвалы для вызначэння ў агульнай бібліятэцы, калі такія маюцца. Як правіла, гэта магчыма праграма звязана з агульнай бібліятэкі перавызначаць ўнутры агульнай бібліятэкі. Гэты параметр мае сэнс толькі на ELFplatforms, якія падтрымліваюць падзяляем бібліятэкі.

--check перасеку

--no праверкі перасекаў

Пытаецца кампаноўнік не правяраць раздзел адрасы пасля таго, як яны былі прызначаныя , каб убачыць , калі ёсць якія - небудзь накладак. Звычайна кампаноўнік будзе выконваць гэтую праверку, і калі ён знаходзіць якія-небудзь перакрывае ён будзе вырабляць адпаведныя паведамленні пра памылкі. Кампаноўнік ведае пра, і робіць папраўку на раздзелы ў накладках. Паводзіны па змаўчанні можа быць адноўлена з дапамогай перамыкача лініі --check-секцыі каманд.

--cref

Выхадныя дадзеныя крыжаваныя спасылкі табліцы. Калі линкер файл карты генеруецца перакрыжаваная спасылка табліца друкуецца ў файл карты. У адваротным выпадку, ён будзе надрукаваны на стандартны вывад.

Фармат табліцы наўмысна просты, так што яна можа быць лёгка апрацавана сцэнаром, калі гэта неабходна. Сімвалы раздрукоўваюцца, сартуюцца па імені. Для кожнага знака, спіс імёнаў файлаў даюцца. Калі сімвал вызначаны, першы файл у спісе з'яўляецца размяшчэнне вызначэння. Астатнія файлы ўтрымліваюць спасылкі на знак.

--no-вызначыць, агульнае

Гэты параметр забараняе прызначэнне адрасоў для агульных сымбаляў. Камандны сцэнар «INHIBIT_COMMON_ALLOCATION» мае той жа эфект.

--no-вызначэння-распаўсюджаны варыянт дазваляе развязку рашэння прызначыць адрасы ў агульныя сімвалы ад выбару тыпу выхаднога файла; У іншым выпадку, не перамяшчаюцца тыпу вываду сілы прысваення адрасоў ў агульныя сімвалы. Выкарыстанне --no-азначэнняў-агульнымі дазваляе Агульныя сімвалы, на якія спасылаюцца з агульнай бібліятэкі для прызначэння адрасу толькі ў асноўнай праграме. Гэта ліквідуе невыкарыстоўваемую прастору дубліката ў агульнай бібліятэцы, а таксама прадухіляе магчымую блытаніну ў дазвол на няправільны дублікат, калі ёсць шмат дынамічных модуляў са спецыялізаваным пошукам шляхамі для дазволу сімвала падчас выканання.

--defsym сімвал = выраз

Стварыць глабальны знак у выходным файле, які змяшчае абсалютны адрас , дадзенае выраз. Вы можаце выкарыстоўваць гэтую опцыю, столькі разоў, колькі неабходна для вызначэння мноства знакаў у камандным радку. Абмежаваная форма арыфметычнага падтрымліваецца для выражэння ў гэтым кантэксце: вы можаце даць шаснаццатковай канстанту або імя існуючага сімвала, або выкарыстаць «+» і «-» , каб дадаць або адняць шаснаццаткавыя канстанты або сімвалы. Калі вам патрэбныя больш складаныя выказвання, разгледзець пытанне аб выкарыстанні каманднага мовы кампаноўніка з сцэнара. Заўвага: не павінна быць ніякага пустой прасторы паміж сімвалам, знакам роўнасці ( `` = «»), і выраз.

--demangle [= стыль]

--no-demangle

Гэтыя параметры кіруюць Ці demangle імёны знакаў у паведамленнях пра памылкі і іншы выхад. Калі линкер сказалі demangle, ён спрабуе прадставіць імёны знакаў у даступнай форме, таму ён выдаляе вядучыя падкрэслення, калі яны выкарыстоўваюцца ў фармаце аб'ектнага файла, і пераўтворыць C ++ падагнаных імёнаў знакаў у машыначытальныя імёны карыстальнікаў. Розныя кампілятары маюць розныя стылі перакручваючы. Неабавязковы аргумент дэкадавання стылю можа быць выкарыстаны для выбару падыходнага стылю дэкадавання для вашага кампілятара. Кампаноўнік demangle па змаўчанні , калі зменная асяроддзі COLLECT_NO_DEMANGLE не ўстаноўлена. Гэтыя параметры могуць быць выкарыстаны для пераазначэння па змаўчанні.

Файл --dynamic-линкер

Ўсталяваць імя дынамічнага кампаноўніка. Гэта мае сэнс толькі пры стварэнні дынамічна звязаны ELF выкананых файлаў. Дынамічны кампаноўнік па змаўчанні, як правіла, правільна; не выкарыстоўвайце гэта, калі вы не ведаеце, што вы робіце.

--embedded-relocs

Гэты параметр мае сэнс толькі пры кампаноўцы MIPS укаранёных PIC код, згенераваных -membedded-Pic варыянту для кампілятара GNU і асэмблера. Гэта прыводзіць да таго, линкеру стварыць табліцу, якая можа быць выкарыстана падчас выканання перанесці любыя дадзеныя, якія былі статычны ініцыялізуюцца значэння паказальнікаў. Глядзіце код у / з наборам тэстаў LD-empic для дэталяў.

--fatal-папярэджанне

Разглядаць усе папярэджання як памылкі .

--force-ех-суфікс

Пераканайцеся, што выходны файл мае exe-суфікс.

Калі паспяхова пабудавана цалкам звязаны выхадны файл не мае « еха " ці " .dll суфікс" гэтая опцыя прымушае кампаноўнік скапіяваць выхадны файл у адзін з таго ж імя з ".exe» суфіксам. Гэтая опцыя карысная пры выкарыстанні немадыфікаваных мейкфайлов Unix на хасце Microsoft Windows, так як некаторыя версіі Windows , не будуць запускаць файл , калі ён не заканчваецца ў «.exe» суфікс.

--no-ГЦ-секцыі

--gc перасеку

Ўключыць збор смецця невыкарыстоўваемых ўваходных секцый. Ён ігнаруецца на мэты, якія не падтрымліваюць гэтую опцыю. Гэтая опцыя не сумяшчальная з -r, і яго не варта выкарыстоўваць з дынамічнай кампаноўкай. Паводзіны па змаўчанні (не выконвае гэтую зборку смецця ) можа быць адноўлена шляхам ўказанні --no-Gc-секцыі ў камандным радку.

--help

Выдае спіс параметраў каманднага радка на стандартны вывад і выхад.

--target-дапамогу

Выдае спіс усіх канкрэтных мэтавых параметраў на стандартны вывад і выхад.

-Map файл праект

Друк спасылкі на карту ў файл файл праект . Глядзіце апісанне опцыі -M, вышэй.

--no-Keep-памяці

Л.Д. звычайна аптымізуе хуткасць па памяці выкарыстання шляхам кэшавання табліцы сімвалаў ўваходных файлаў у памяці. Гэтая опцыя кажа ЛД замест гэтага аптымізаваць выкарыстанне памяці, з дапамогай перачытваючы табліцы сімвалаў па меры неабходнасці. Гэта можа спатрэбіцца , калі Л.Д. выбягае з прасторы памяці , а злучае вялікі выкананы файл.

--no-нявызначаны

-z DEFS

Звычайна пры стварэнні несимволической падзялянай бібліятэкі, нявызначаныя сімвалы дапускаюцца і злева быць вырашаны падчас выканання загрузніка. Гэтыя опцыі забараняе такія няпэўныя сімвалы.

--allow-множны вызначэнне

-z muldefs

Звычайна, калі сімвал вызначаны некалькі разоў, кампаноўнік паведаміць фатальную памылку. Гэтыя опцыі дазваляюць некалькі азначэнняў і будзе выкарыстоўвацца першае азначэнне.

--allow-shlib-нявызначаны

Дазволіць нявызначаныя сімвалы ў агульных аб'ектах, нават калі --no-нявызначаны ўсталёўваюцца. Канчатковы вынік будзе тое, што нявызначаныя сімвалы ў рэгулярных аб'ектах будуць па-ранейшаму выклікае памылку, але нявызначаныя сімвалы ў сумесна выкарыстоўваюцца аб'ектах будуць праігнараваныя. Рэалізацыя no_undefined робіць здагадка аб тым, што падчас выканання кампаноўнік будзе задыхацца ад нявызначаных знакаў. Аднак ёсць па меншай меры адна сістэма (BeOS), дзе нявызначаныя сімвалы ў агульных бібліятэках нармальна, так як ядро ​​патчы іх у час загрузкі, каб выбраць, якая функцыя з'яўляецца найбольш прыдатным для бягучай архітэктуры. IE дынамічна выбраць адпаведную функцыю MemSet. Мабыць, гэта таксама нармальна для HPPA сумесна выкарыстоўваюцца бібліятэкі маюць нявызначаныя сімвалы.

--no-нявызначаная-версія

Звычайна, калі сімвал мае нявызначаную версію, кампаноўнік будзе ігнараваць яго. Гэтая опцыя забараняе сімвалы з нявызначанай версіяй і фатальная памылка будзе выдавацца замест.

--no-перасцерагаюць-неадпаведнасць

Звычайна Л.Д. выдасць памылку , калі вы спрабуеце звязаць разам ўваходныя файлы , якія не адпавядаюць адзін аднаму па якой - то прычыне, магчыма , таму , што яны былі складзеныя для розных працэсараў або для розных endiannesses. Гэтая опцыя кажа ЛД , што ён павінен моўчкі дазваляць такія магчымыя памылкі. Гэты параметр варта выкарыстоўваць толькі з асцярожнасцю, у тых выпадках, калі вы прынялі некаторыя спецыяльныя меры, якія гарантуюць, што памылкі кампаноўніка недарэчныя.

--no-ўвесь-архіў

Выключыце эфект опцыі --whole-архіў для наступных архіўных файлаў.

--noinhibit-Exec

Захавайце выкананы файл вываду кожны раз, калі ён усё яшчэ прыдатныя да ўжывання. Як правіла, кампаноўнік не будзе вырабляць выхадны файл, калі ён сутыкаецца з памылкамі ў працэсе сувязі; ён выходзіць без запісу выхаднога файла, калі ён выдае якую-небудзь памылку наогул.

-nostdlib

Толькі пошук бібліятэчных каталогаў відавочна указаных у камандным радку. Бібліятэка каталогі, названыя ў кампаноўнік сцэнарыяў (у тым ліку кампаноўніка сцэнарыяў, указаных у камандным радку) ігнаруюцца.

--oformat выхаднога фармату

Л.Д. можа быць сканфігураваны для падтрымкі больш аднаго аб'ектнага файла. Калі Л.Д. наладжаны такім чынам, вы можаце выкарыстоўваць --oformat параметр , каб паказаць двайковы фармат выхаднога файла аб'екта. Нават калі Л.Д. настроены для падтрымкі альтэрнатыўных фарматаў аб'ектаў, вы звычайна не патрабуецца ўказваць, паколькі Л.Д. павінен быць сканфігураваны для атрымання ў фармаце вываду па змаўчанні самы звычайны фармат на кожнай машыне. Выхадны фармат ўяўляе сабой тэкставую радок, назва пэўнага фармату , падтрымоўванага бібліятэкай BFD. (Вы можаце атрымаць спіс даступных бінарных фарматаў з objdump -i.) Каманда «OUTPUT_FORMAT» сцэнара можа таксама пазначыць выхадны фармат, але гэты параметр перакрывае яго.

-qmagic

Гэтая опцыя ігнаруецца для сумяшчальнасці з Linux.

-Qy

Гэтая опцыя ігнаруецца для сумяшчальнасці з SVR4.

--relax

Варыянт з машынна-залежныя эфекты. Гэтая опцыя падтрымліваецца толькі на некалькі мэтаў.

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

На некаторых платформах гэтых часовыя спасылкі глабальных аптымізацыі могуць зрабіць сімвалічную адладку выніковага выкананага файла немагчыма. Гэта, як вядома, справа для сям'і Мацусита MN10200and MN10300 працэсараў.

На платформах , дзе гэта не падтрымліваецца, --relax прымаецца, але ігнаруецца.

--retain-сімвалы-файл імя_файла

Захавайце толькі знакі , пералічаныя ў файле імя файла, адкідаючы ўсе астатнія. імя файла проста плоскі файл з адным імем сімвала ў кожнай радку. Гэтая опцыя асабліва карысная ў асяроддзях (такіх як VxWorks), дзе большая глабальная табліца сімвалаў, назапашаных паступова, каб захаваць час выканання памяці.

--retain-сімвалы-файл ня адкідвае нявызначаныя сімвалы або сімвалы , неабходныя для пераездаў.

Вы можаце паказаць толькі --retain-сімвалы-файл адзін раз у камандным радку. Ён перавызначаць -s і -S.

-rpath рэж

Дадаць каталог у бібліятэцы падчас выканання пошуку шляху. Гэта выкарыстоўваецца пры злучэнні ELFexecutable з агульнымі аб'ектамі. Усе -rpath аргументаў аб'ядноўваюцца і перадаюцца ць час выканання линкера, які выкарыстоўвае іх для пошуку агульных аб'ектаў падчас выканання. Опцыя -rpath таксама выкарыстоўваецца пры пошуку агульных аб'ектаў , якія неабходныя агульныя аб'екты , відавочна ўключаны ў ссылку; глядзіце апісанне опцыі -rpath-сувязі. Калі -rpath не выкарыстоўваецца пры злучэнні ELF выкананага файла, змесціва пераменнага «LD_RUN_PATH» навакольнага асяроддзя будзе выкарыстоўвацца , калі яна вызначана.

Опцыя -rpath таксама можа быць выкарыстана на SunOS. Па змаўчанні на SunOS линкер будзе фармаваць пошукавыя выканання латы з усіх варыянтаў -L яна даецца. Калі -rpath опцыя выкарыстоўваецца, пошук ць час выканання шлях будзе фарміравацца выключна з дапамогай опцыі -rpath, ня звяртаючы ўвагі на -L ' . Гэта можа быць карысна пры выкарыстанні GCC, які дадае мноства -L ', якія могуць быць устаноўлены onNFS файлавых сістэм.

Для сумяшчальнасці з іншымі ELF линкера, калі опцыя -R вынікаюць імя каталога, а не імя файла, яно разглядаецца як варыянт -rpath.

-rpath-Link DIR

Пры выкарыстанні ELF або SunOS, адна падзяляная бібліятэка можа спатрэбіцца іншы. Гэта адбываецца, калі «Л.Д. -shared» спасылка ўключае ў сябе агульную бібліятэку ў якасці аднаго з ўваходных файлаў.

Калі линкер сустракае такую ​​залежнасць пры выкананні неразделяемой, без перамяшчаецца спасылкі, ён аўтаматычна паспрабуе знайсці патрэбную агульную бібліятэку і ўключыць яго ў спасылцы, калі ён не ўключаны ў відавочным выглядзе. У такім выпадку, опцыя -rpath-спасылка вызначае першы набор каталогаў для пошуку. Опцыя -rpath-спасылка можа ўказваць паслядоўнасць імёнаў каталогаў , альбо шляхам ўказанні спісу імёнаў , падзеленых двукроп'ямі, ці з'яўляцца некалькі разоў.

Гэты параметр варта выкарыстоўваць з асцярожнасцю, бо яна перакрывае шлях пошуку, які можа быць цяжка скампіляваны ў агульную бібліятэку. У такім выпадку можна выкарыстоўваць ненаўмысна іншы шлях пошуку, за асяроддзе выканання кампаноўнік будзе рабіць.

Кампаноўнік выкарыстоўвае наступныя шляху пошуку, каб знайсці неабходныя падзяляем бібліятэкі.

1.

Усе каталогі , названыя параметры -rpath-спасылак.

2.

Усе каталогі , названыя -rpath опцый. Розніца паміж -rpath і -rpath-спасылкай , што каталогі , названыя -rpath опцыяй ўключаны ў выкананым файле і выкарыстоўваюцца падчас выканання, у той час як опцыя -rpath-спасылка сапраўдная толькі падчас кампаноўкі. Гэта толькі для роднага линкера.

3.

Аб сістэме ELF, калі -rpath і опцыі «RPATH-спасылка» не выкарыстоўваецца, пошук змесціва зменнай асяроддзі «LD_RUN_PATH». Гэта толькі для роднага линкера.

4.

На SunOS, калі опцыя -rpath не выкарыстоўваецца, пошук якіх - небудзь каталогаў , названых з дапамогай -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 існуе, то спіс каталогаў знаходзіцца ў гэтым файле.

Калі патрабаваная падзяляная бібліятэка не знойдзена, кампаноўнік выдасць папярэджанне і працягнуць са спасылкай.

-shared

-Bshareable

Стварэнне агульнай бібліятэкі. Гэта ў цяперашні час падтрымліваецца толькі на платформах, ELF, XCOFF і SunOS. На SunOS линкер будзе аўтаматычна стварыць агульную бібліятэку , калі опцыя -e не выкарыстоўваецца , і ёсць нявызначаныя сімвалы ў спасылцы.

--sort-агульны

Гэтая опцыя кажа ЛД сартаваць агульныя сімвалы па памеры , калі ён змяшчае іх у адпаведных выходных секцый. Спачатку ідуць усе адзін байт сімвалаў, то ўсё два байта, то ўсе чатыры байта, а затым усё астатняе. Гэта робіцца для прадухілення разрываў паміж сімваламі з-за абмежаванні выраўноўвання.

--split-на-файл [памер]

Падобна --split-на-RELOC , але стварае новую выходную секцыю для кожнага ўваходнага файла , калі памер будзе дасягнуты. памер па змаўчанні памер 1 , калі не дадзена.

--split-на-RELOC [лік]

Спрабуе стварае дадатковыя секцыі ў выходным файле так , што ні адзін выхадны секцыі ў файле не ўтрымоўваецца больш колькасці пераездаў. Гэта карысна пры стварэнні велізарных перамяшчаюцца файлаў для загрузкі ў некаторыя ядра ў рэжыме рэальнага часу з фарматам COFF аб'ект файла; так як COFFcannot ўяўляюць больш 65535 пераездаў у адным раздзеле. Звярніце ўвагу, што гэта не будзе працаваць з фарматамі аб'ектных файлаў, якія не падтрымліваюць адвольныя раздзелы. Линкер не будзе падзяліць асобныя секцыі ўводу для пераразмеркавання, так што калі адзін ўваходных падзел утрымлівае больш , чым колькасці пераездаў адзін выходны падзел будзе ўтрымліваць , што многія пераездаў. разлічваць па змаўчанні на значэнне 32768.

--stats

Вылічэнне і адлюстраванне статыстычных дадзеныя аб працы линкера, такіх як час выканання і выкарыстанне памяці.

--traditional-фармат

Для некаторых мэтаў, выхад LD адрозніваецца ў некаторых адносінах з выхаду якога - небудзь існуючага линкера. Гэты перамыкач просіць ЛД выкарыстоўваць традыцыйны фармат замест гэтага.

Напрыклад, на SunOS, Л.Д. аб'ядноўвае паўтараюцца запісу ў табліцы радкоў знакаў. Гэта можа паменшыць памер выхаднога файла з поўнай адладкавай інфармацыяй больш чым на 30 працэнтаў. На жаль, праграма SunOS «DBX» не можа прачытаць атрыманую праграму ( «GDB» не мае ніякіх праблем). Перамыкач --traditional фармату кажа ЛД ня аб'яднаць дублікаты запісаў.

--section-запуску = орг імя раздзела

Знайдзіце падзел у выходным файле пры абсалютным адрасе , паказанаму орг. Вы можаце выкарыстоўваць гэтую опцыю, столькі разоў, колькі неабходна, каб знайсці некалькі падзелаў у камандным радку. орг павінен быць адзіным цэлым лікам шаснаццатковай; для сумяшчальнасці з іншымі линкерами вы можаце апусціць 0x , як правіла , звязаны з шаснаццатковай значэннямі. Заўвага: не павінна быць ніякага пустой прасторы паміж імя раздзела, знак роўнасці ( `` = «») і орг.

-Tbss орг

-Tdata орг

-Ttext орг

Выкарыстоўвайце орг ў якасці зыходнага адрасы для --- --- адпаведна ў «ПБС», «даныя», або «тэкст» сегмента выхаднога файла. орг павінен быць адзіным цэлым лікам шаснаццатковай; для сумяшчальнасці з іншымі линкерами вы можаце апусціць 0x , як правіла , звязаны з шаснаццатковай значэннямі.

--dll-шматслоўны

--verbose

Вывесці нумар версіі для Л.Д. і спіс кампаноўніка эмуляцыя падтрымліваецца. Дысплей, які можа і не могуць быць адкрыты ўваходныя файлы. Адлюстраванне сцэнара кампаноўнік выкарыстоўваецца линкера.

--version-скрыпт = версія файл_сценария

Пакажыце імя версіі сцэнара для линкера. Гэта, як правіла, выкарыстоўваецца пры стварэнні агульных бібліятэк для ўказанні дадатковай інфармацыі аб версіі іерархіі для бібліятэкі ствараюцца. Гэты параметр мае сэнс толькі на ELF платформаў, якія падтрымліваюць падзяляем бібліятэкі.

--warn-агульны

Папярэджваць, калі агульны сімвал камбінуецца з іншым агульным сімвалам або з вызначэннем знака. Unix линкеры дазваляюць гэта некалькі нядбайную практыку, але линкера на некаторых іншых аперацыйных сістэм не робяць. Гэты параметр дазваляе знайсці патэнцыйныя праблемы ад аб'яднання глабальных знакаў. На жаль, некаторыя бібліятэкі C выкарыстоўваць гэтую практыку, так што вы можаце атрымаць некаторыя папярэджання пра сымбалі ў бібліятэках, а таксама ў сваіх праграмах.

Ёсць тры тыпу глабальных сімвалаў, праілюстраваць тут прыклады C:

Int = 1;

Вызначэнне, якое ідзе ў секцыю ініцыялізаваць дадзеных у выходным файле.

ехЬегп INT I;

Нявызначаная спасылка, якая не вылучае месца. Там павінна быць вызначэнне або агульны сімвал для зменных дзе-небудзь.

Int я;

Агульны сімвал. Калі ёсць толькі адзін (ці больш) агульныя сімвалы для пераменнага, яна ідзе ў неинициализированной вобласці дадзеных выхаднога файла. Линкер аб'ядноўвае некалькі агульных сымбаляў для адной і той жа зменнай у адзін знак. Калі яны маюць розныя памеры, ён выбірае самы вялікі памер. Кампаноўнік ператварае агульны сімвал ў дэкларацыю, калі ёсць вызначэнне таго ж самага зменныя.

--warn-распаўсюджаны варыянт можа вырабляць пяць відаў папярэджанняў. Кожнае папярэджанне складаецца з пары ліній: першая апісвае сімвал проста сустракаецца, а другі апісвае папярэдні сімвал сустракаецца з тым жа імем. Адзін або абодва з двух знакаў будзе агульны сімвал.

1.

Ператварэнне агульнай сімвала ў ссылку, таму што ўжо вызначэнне для знака.

<Файл> (<раздзел>): папярэджанне: агульнае з `<сімвал>» перавызначаны па вызначэнні <файл> (<раздзел>): папярэджанне: вызначана тут

2.

Ператварэнне агульнай сімвала ў якасці спасылкі, так як наступнае вызначэнне для знака сустракаюцца. Гэта ж, як і ў папярэднім выпадку, за выключэннем таго, што знакі сустракаюцца ў іншым парадку.

<Файл> (<раздзел>): папярэджанне: вызначэнне `<сімвал>» перакрываючы агульны <файл> (<раздзел>): папярэджанне: агульнае тут

3.

Аб'яднанне агульнай сімвала з папярэднім жа памерам агульнай сімвалам.

<Файл> (<раздзел>): папярэджанне: некалькі распаўсюджаных `<сімвал>» <файл> (<раздзел>): папярэджанне: папярэдні агульны тут

4.

Аб'яднанне агульнай сімвала з папярэднім вялікім агульным сімвалам.

<Файл> (<раздзел>): папярэджанне: агульнае з `<сімвал>» перавызначаць вялікім Коммон <файл> (<раздзел>): папярэджанне: больш агульнага тут

5.

Аб'яднанне агульнай сімвала з папярэднім меншым агульным сімвалам. Гэта ж, як і ў папярэднім выпадку, за выключэннем таго, што знакі сустракаюцца ў іншым парадку.

<Файл> (<раздзел>): папярэджанне: агульнае з `<сімвал>» пераазначэнне меншых агульнай кантакту <файл> (<раздзела>): папярэджанне: менш агульнае тут

--warn-канструктары

Папярэджваць, калі выкарыстоўваюцца якія-небудзь глабальныя канструктары. Гэта карысна толькі для некалькіх фарматаў аб'ектных файлаў. Для фарматаў, такіх як COFF або ELF, линкер не можа вызначыць выкарыстанне глабальных канструктараў.

--warn-множным ЗМ

Папярэджваць , калі некалькі глабальных значэння паказальнікаў патрабуецца ў выходным файле . Гэта мае сэнс толькі для некаторых працэсараў, такіх як Alpha. У прыватнасці, некаторыя працэсары ставіць вялікія мнагазначных канстанты ў спецыяльным раздзеле. Спецыяльны рэгістр (глабальны паказальнік) паказвае на сярэдзіну гэтага падзелу, так што канстанты могуць быць загружаны з дапамогай эфектыўнага рэжыму базавага рэгістра адноснай адрасавання. Так як зрушэнне ў базе рэгістра адносна рэжыму з'яўляецца фіксаваным і адносна невялікага (напрыклад, 16 біт), што абмяжоўвае максімальны памер пастаяннага пула. Такім чынам, у вялікіх праграмах, часта бывае неабходна выкарыстоўваць некалькі значэння глабальнага паказальніка для таго, каб быць у стане вырашаць усе магчымыя канстанты. Гэтая опцыя выклікае папярэджанне выдаецца кожны раз, калі ўзнікае гэты выпадак.

--warn аднаразовае

Толькі папярэджваюць адзін раз для кожнага знака нявызначанага, а не адзін раз на кожны модуль, які адносіцца да яго.

--warn перасек выраўноўвання

Папярэджваць, калі адрас выхадны секцыі змяняецца з-за выраўноўвання. Як правіла, выраўноўванне будзе ўстаноўлена з дапамогай ўваходных секцыі. Адрас будзе зменены, толькі калі відавочна не пазначана; гэта значыць, калі каманда «секцыі» не вызначае пачатковы адрас секцыі.

--whole-архіў

Для кожнага архіва , згаданага ў камандным радку пасля --whole-архіва опцыі ўключае ў сябе кожны аб'ектны файл у архіве ў спасылцы, а не пошук у архіў для патрэбных аб'ектных файлаў. Гэта, як правіла, выкарыстоўваецца для ўключэння архіўнага файла ў агульнай бібліятэку, прымушаючы кожны аб'ект павінны быць уключаны ў выніковай падзялянай бібліятэцы. Гэтая опцыя можа быць выкарыстана некалькі разоў.

Два заўвагі пры выкарыстанні гэтай опцыі з НКУ: ва- першых, НКУ не ведае аб гэтай опцыі, так што вы павінны выкарыстоўваць -Wl, -whole-архіў. Ва- другое, не забывайце выкарыстоўваць -Wl, -no-ўвесь-архіў пасля вашага спісу архіваў, таму што GCC дадасць свой уласны спіс архіваў вашай спасылцы , і вы не можаце гэты сцяг , каб паўплываць на гэтыя , а таксама.

--wrap сімвал

Выкарыстоўвайце функцыю - абалонку для знака. Любая нявызначаная спасылка на сімвал будзе вырашана да «__ wrap_symbol». Любая нявызначаная спасылка на «__real_symbol» будзе вырашана да сімвала.

Гэта можа быць выкарыстана, каб забяспечыць абалонку для сістэмнай функцыі. Функцыя абгортка павінна называцца «__wrap_symbol». Калі ён хоча, каб выклікаць сістэмную функцыю, ён павінен выклікаць «__ real_symbol».

Вось просты прыклад:

анулююцца * __wrap_malloc (ідэалам с) {Е ( "Таноса выклікаецца з% Ld \ п", с); вярнуць __real_malloc (с); }

Калі звязаць іншы код з гэтым файлам , выкарыстоўваючы --wrap Таноса, то ўсе выклікі «Таноса» будзе выклікаць функцыю «__wrap_malloc» замест гэтага. Заклік да «__real_malloc» у «__wrap_malloc» будзе называць рэальную функцыю «Таноса».

Вы можаце прадаставіць функцыю «__real_malloc» , а таксама, так што спасылкі без --wrap варыянт атрымаецца. Калі вы зробіце гэта, вы не павінны ставіць пад вызначэнне «__ real_malloc» у тым жа файле «__wrap_malloc»; калі вы гэта зробіце, асэмблер можа дазволіць выклік да линкера мае магчымасць абгарнуць яго ў «Таноса».

--enable-новыя-dtags

--disable-новыя-dtags

Гэты линкер можа ствараць новыя дынамічныя тэг у ELF. Але старыя сістэмы ELF не можа зразумець іх. Калі пазначыць --enable-новыя-dtags, дынамічныя тэгі будуць стварацца па меры неабходнасці. Калі пазначыць --disable-новую-dtags, будзе створаны ніякія новыя дынамічныя тэгі. Па змаўчанні, новыя дынамічныя тэгі не ствараецца. Звярніце ўвагу, што гэтыя опцыі даступныя толькі сістэмы forELF.

I386 РЭ линкер падтрымлівае -shared варыянт, які выклікае выхад быць дынамічна якая падключаецца бібліятэка (DLL) , а ня звычайны выкананы файл. Вы павінны назваць выхад «* .dll», калі вы выкарыстоўваеце гэтую опцыю. Акрамя таго, линкер цалкам падтрымлівае стандарт «* .DEF» файлы, якія могуць быць паказаны ў камандным радку кампаноўніка як аб'ектны файл (на самай справе, ён павінен папярэднічаць архівы экспартуюць сімвалы з, каб гарантаваць, што яны атрымліваюць звязаныя, гэтак жа, як звычайны файл аб'екта).

У дадатак да опцыі, агульныя для ўсіх мэтаў, у i386 РЭ падтрымкі линкер дадатковыя параметры каманднага радка, якія з'яўляюцца спецыфічнымі для мэтавага i386 PE. Параметры, якія прымаюць значэння могуць быць аддзелены ад іх значэнняў альбо прабелам або знакам роўнасці.

--add-STDCALL псеўданім

Калі ёсць , сімвалы з STDCALL суфіксам (@ Nn) будуць экспартавацца як ёсць , а таксама з суфіксам падзел.

Файл --base-файл

Выкарыстанне файла ў якасці імя файла , у якім , каб захаваць базавыя адрасы ўсіх пераездаў , неабходных для стварэння бібліятэкі DLL з dlltool.

--dll

Стварэнне DLL замест звычайнага выкананага файла. Вы таксама можаце выкарыстоўваць -shared або паказаць «Бібліятэка» ў дадзеным «DEF - файле».

--enable-STDCALL-выпраўленне

--disable-STDCALL-выпраўленне

Калі спасылка знаходзіць сімвал, які не можа вырашыць, ён будзе спрабаваць зрабіць `` невыразны увязку «», шукаючы іншы пэўны сімвал, які адрозніваецца толькі ў фармаце імя знака (Cdecl супраць STDCALL) і вырашыць гэты знак, звязваючы на матч. Напрыклад, не вызначаны сімвал «_foo» можа быць звязаны з функцыяй «_foo @ 12», або не вызначаны сімвалам «@ _bar 16» можа быць звязаны з функцыяй «_bar». Калі кампаноўнік робіць гэта, ён выводзіць папярэджанне, так як ён звычайна павінен не ўдалося звязаць, але часам імпартаваць бібліятэкі, атрыманыя ад іншых бібліятэк DLL можа спатрэбіцца гэтая функцыя будзе выкарыстоўвацца. Калі пазначыць --enable-STDCALL-FixUp, гэтая функцыя ўключаная цалкам і папярэджання не выводзяцца на друк. Калі вы пакажа --disable-STDCALL-FixUp, гэтая функцыя адключаная , і такія неадпаведнасці лічацца памылкі.

--export-ўсё-сімвалы

Калі ёсць, усё глабальныя сімвалы ў аб'ектах, якія выкарыстоўваюцца для стварэння бібліятэкі DLL будзе экспартавацца ў DLL. Звярніце ўвагу, што гэта значэнне па змаўчанні, калі іншае не будзе якіх-небудзь экспартуемых знакаў. Калі сімвалы відавочна экспартуюцца праз DEF файлы або няяўна экспартуюцца праз атрыбуты функцыі, то па змаўчанні нічога не экспартаваць, калі гэты параметр не зададзены. Звярніце ўвагу, што сімвалы "DLLMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12", і "impure_ptr" не будзе аўтаматычна экспартуюцца. Акрамя таго, сімвалы, імпартуемыя з іншых бібліятэк DLL, не будуць паўторна экспартаваныя, а таксама не сымбалі, якія паказваюць унутраны макет DLL, такіх як тыя, якія пачынаюцца з «_head_» або сканчаючы «_iname». Акрамя таго, не будзе экспартавацца ніякіх знакаў з "libgcc", "libstd ++", "libmingw32", ці "crtX.o". Сімвалы, імёны якіх пачынаюцца з «__rtti_» або «__builtin_» не будзе экспартавацца, каб дапамагчы з бібліятэк DLL C ++. Нарэшце, існуе шырокі спіс Cygwin-прыватных сімвалаў, якія ня экспартуюцца (відавочна, гэта ставіцца на пры стварэнні бібліятэкі DLL для Cygwin мэтаў).

Гэтыя Cygwin-выключае, з'яўляюцца: "_cygwin_dll_entry @ 12", "_cygwin_crt0_common @ 8", "_ cygwin_noncygwin_dll_entry @ 12", "_fmode", "_impure_ptr", "cygwin_attach_dll", "cygwin_premain0", "cygwin_premain1", "cygwin_premain2", «cygwin_premain3 », і" атачаць ".

--exclude-сімвалы сімвал, сімвал, ...

Задае спіс знакаў, якія не павінны быць аўтаматычна экспартуюцца. Імёны сімвалаў могуць быць падзеленыя коскі або двукроп'ем.

--exclude-LIBS Lib, Lib, ...

Вызначае спіс архіваў бібліятэк, з якіх сімвалы не павінны быць аўтаматычна экспартуюцца. Імёны бібліятэк могуць быць падзеленыя коскамі або двукроп'ямі. Ўказанне «--exclude-LIBS ALL» выключае сімвалы ва ўсіх архіўных бібліятэках з аўтаматычнай экспарту. Сімвалы відавочна пералічаныя ў файле .def па-ранейшаму экспартуецца, незалежна ад гэтай опцыі.

--file выраўноўванне

Пакажыце выраўноўванне файла. Раздзелы ў файле заўсёды будзе пачынацца з зрушэннямі файлаў, якія кратныя гэтага ліку. Гэта значэнне па змаўчанні 512.

--heap рэзерв

--heap рэзерв, здзейсніць

Пакажыце аб'ём памяці для рэзервавання (і, пры неабходнасці фіксацыі) для выкарыстання ў якасці дынамічнай памяці для гэтай праграмы. Па змаўчанні 1Мбы зарэзерваваны, 4K здзейсніў.

--image-базавую значэнне

Выкарыстоўвайце значэнне ў якасці базавага адрасу вашай праграмы або бібліятэкі DLL. Гэта самае нізкае месца ў памяці, які будзе выкарыстоўвацца, калі ваша праграма або DLL загружаецца. Для таго, каб паменшыць неабходнасць у перадыслакацыі і палепшыць прадукцыйнасць вашых бібліятэк DLL, кожны з іх павінен мець унікальны базавы адрас, а не перакрываць любыя іншыя бібліятэкі DLL. Па змаўчанні 0x400000 для выкананых файлаў, і 0x10000000 для бібліятэк DLL.

--kill-на

Калі зададзена, STDCALL суфіксы (@ Nn) будуць выдалены з сімвалаў , перш чым яны экспартуюцца.

--major-малюнкі значэнне версіі

Ўсталёўвае асноўны нумар версіі `` выявы «». Значэнне па змаўчанні 1.

--major-OS-значэнне версіі

Ўсталёўвае асноўны нумар `` зяпы версіі «». Значэнне па змаўчанні 4.

--major-падсістэма-значэнне версіі

Ўсталёўвае асноўны нумар `` падсістэмы версіі «». Значэнне па змаўчанні 4.

--minor-малюнкі значэнне версіі

Ўсталёўвае малодшы нумар версіі `` выявы «». Па змаўчанні 0.

--minor-OS-значэнне версіі

Ўсталёўвае малодшы нумар `` зяпы версіі «». Па змаўчанні 0.

--minor-падсістэма-значэнне версіі

Ўсталёўвае малодшы нумар `` падсістэмы версіі «». Па змаўчанні 0.

--output выразнасці файл

Линкер створыць файл файл , які будзе ўтрымліваць файл DEF , адпаведны DLL кампаноўнік генерыруючага. Гэты DEF файл (які павінен называцца «* .def») можа быць выкарыстаны для стварэння бібліятэкі імпарту з «dlltool» або можа быць выкарыстаны ў якасці спасылкі аўтаматычна або няяўна экспартуюцца сімвалы.

--out-Implib файл

Линкер створыць файл файл , які будзе ўтрымліваць LIB імпарту , адпаведны DLL кампаноўнік генерыруючага. Гэты імпарт Lib (які павінен называцца «* .dll.a» або «* .a» можа выкарыстоўвацца для сувязі кліентаў з генераванай DLL, такія паводзіны дазваляе прапускаць асобны «dlltool» крок стварэння бібліятэкі імпарту.

--enable-аўта-вобраз базы

Аўтаматычна выбраць базу малюнкаў для бібліятэк DLL, калі не паказаны з дапамогай «--image базы» аргументу. Пры выкарыстанні хэша генеруецца з DllName для стварэння унікальных баз малюнкаў для кожнай DLL, у памяці сутыкненне і пераезды, якія могуць затрымаць выкананне праграмы можна пазбегнуць.

--disable-аўта-вобраз базы

Ня аўтаматычна генераваць унікальную базу малюнкаў. Калі няма названага карыстальніка базавай выявы ( «--image базы»), а затым выкарыстоўваць платформу па змаўчанні.

--dll-пошук прэфікса радкі

Пры злучэнні дынамічна з DLL без бібліятэкі імпарту, пошук «<радок> <базавую імя> .dll» ў перавазе да «Lib <базавую імя> .dll». Такія паводзіны дазваляе лёгка адрозненне паміж бібліятэкамі DLL, пабудаванымі для рознага `` subplatforms «»: родныя, Cygwin, UWIN, PW, і г.д Напрыклад, Cygwin DLL, як правіла, выкарыстоўвае «--dll-пошук прэфікс = Лебедзь».

--enable-аўта-імпарт

Ёсць складаныя ўвязваньні «_symbol» да «__imp__symbol» для імпарту дадзеных, з бібліятэк DLL, а таксама стварыць неабходныя thunking сімвалы пры пабудове бібліятэкі імпарту з гэтым DATAexports. Як правіла, гэта будзе «проста працаваць» --- але часам вы можаце ўбачыць гэта паведамленне:

«Ясна" <пераменная> "не можа быць аўтаматычна імпартаваныя. Калі ласка, прачытайце дакументацыю для Л.Д." - enable-аўта-імпарту "для падрабязнай інфармацыі.»

Гэта паведамленне ўзнікае, калі некаторы выраз (суб) атрымлівае доступ да адрасу, у канчатковым рахунку вызначаецца сумай двух канстант (табліцы імпарту Win32 толькі дазваляюць). Выпадкі, дзе гэта можа адбыцца, ўключаюць доступ да палёў членаў STRUCT зменных, імпартуемым з DLL, а таксама з выкарыстаннем пастаяннага індэкса ў пераменны масіве імпартуецца з DLL. Любая Multiword зменныя (масівы, структуры, доўга доўга, і г.д.) могуць выклікаць гэты стан памылкі. Тым не менш, незалежна ад канкрэтнага тыпу дадзеных парушыў экспартавацца пераменным, Л.Д. заўсёды выявіць, праблема папярэджання і выхад.

Ёсць некалькі спосабаў вырашэння гэтай праблемы, незалежна ад тыпу дадзеных экспартуемага пераменны:

Адзін са спосабаў заключаецца ў выкарыстанні ключ --enable-асяроддзе-псеўда-RELOC. Гэта пакідае задачу налады спасылкі ў кліенцкім кодзе для асяроддзя выканання, так што гэты метад працуе толькі тады, калі падчас выканання environtment падтрымлівае гэтую функцыю.

Другое рашэнне заключаецца ў сілу адзін з канстант «», каб быць пераменным --- гэта значыць, невядома і ня-оптимизируемым падчас кампіляцыі. Для масіваў, існуе дзве магчымасці: а) робяць indexee (адрас у масіве) пераменны, або б) робяць «канстанту» індэкс зменнай. Такім чынам:

ехЬегп тыпу extern_array []; extern_array [1] -> {лятучым тып * т = extern_array; т [1]}

або

ехЬегп тыпу extern_array []; extern_array [1] -> {лятучым INT т = 1; extern_array [т]}

Для структур (і большасць іншых тыпаў Multiword дадзеных) адзіны варыянт, каб зрабіць сама структуру (або доўга доўга, або ...) зменнай:

ехЬегп структура з extern_struct; extern_struct.field -> {лятучы структура S * T = & extern_struct; t-> поле}

або

ехЬегп доўга доўга extern_ll; extern_ll -> {лятучы доўга доўга * local_ll = & extern_ll; * Local_ll}

Трэці метад барацьбы з гэтай цяжкасцю з'яўляецца адмова ад «аўтаматычнага імпарту» для знака крыўдзячы і пазначыць яго з «__declspec (DllImport)». Аднак, на практыцы, што патрабуе выкарыстання падчас кампіляцыі #defines, каб паказаць, ці з'яўляецца вы будуеце DLL, стварэнне кліенцкага кода, які будзе спасылка на DLL, або проста будаваць / спасылкі на статычную бібліятэку. У працэсе выбару паміж рознымі метадамі рашэння «прамой адрас з пастаянным зрушэннем» праблемы, вы павінны разгледзець тыповая выкарыстанне ў рэальным свеце:

арыгінал:

--foo.h ехЬегп INT обр []; --foo.c #include "foo.h" сілы асноўных (INT ARGC, сімвал ** ARGV) {Е ( "% d \ п", апр [1]); }

Рашэнне 1:

--foo.h ехЬегп INT обр []; --foo.c #include "foo.h" пустата асноўны (ідэалам ARGC, сімвал ** ARGV) {/ * Гэта абыходны шлях для win32 і Cygwin; не «аптымізаваць» * / лятучы INT * Пар = обр; Е ( "% d \ п", Пар [1]); }

Рашэнне 2:

--foo.h / * Заўвага: аўтаматычны экспарт мяркуецца (не __declspec (dllexport)) * / #if (вызначэнне (_WIN32) || вызначаецца (__ CYGWIN__)) && \ (вызначэнне (FOO_BUILD_DLL) || вызначана (FOO_STATIC )) #define FOO_IMPORT __declspec (DllImport) #else #define FOO_IMPORT #endif ехЬегп FOO_IMPORT INT обр []; --foo.c #include "foo.h" сілы асноўных (INT ARGC, сімвал ** ARGV) {Е ( "% d \ п", апр [1]); }

Чацвёрты спосаб пазбегнуць гэтай праблемы паўторна кода вашай бібліятэкі выкарыстоўваць функцыянальны інтэрфейс , а не інтэрфейс дадзеных для зменных парушальнікаў (напрыклад , set_foo () і get_foo () аксессоры функцыі).

--disable-аўта-імпарт

Не спрабуйце зрабіць sophisticalted увязванне «_symbol» да «__imp__symbol» для DATAimports з бібліятэк DLL.

--enable-асяроддзе-псеўда-RELOC

Калі код змяшчае выраз, апісанае ў --enable-аўта-імпарт падзелу, гэта значыць, DATAimports з DLL з ненулявое зрушэннем, гэты перамыкач будзе стварыць вектар «падчас выканання псеўда пераездаў», якія могуць быць выкарыстаны асяроддзямі выканання для налады спасылкі такія дадзеныя ў кодзе кліента.

--disable-асяроддзе-псеўда-RELOC

Не ствараць псеўда пераезды для ненулявога афсетнага Імпарту дадзеных з бібліятэкі DLL. Гэта значэнне па змаўчанні.

--enable-экстра-рэ-адладка

Паказаць дадатковую адладкавую інфармацыю, звязаную з аўтаматычным імпартам сімвалаў thunking.

--section выраўноўванне

Ўсталёўвае выраўноўванне секцыі. Раздзелы ў памяці заўсёды будуць пачынацца ў адрасах, якія кратныя гэты лік. Па змаўчанні 0x1000.

--stack рэзерв

--stack рэзерв, здзейсніць

Пакажыце аб'ём памяці для рэзервавання (і, пры неабходнасці фіксацыі), якія будуць выкарыстоўвацца ў якасці стэка для гэтай праграмы. Па змаўчанні 2Mb зарэзерваваны, 4K здзейсніў.

--subsystem які

--subsystem якіх: галоўная

--subsystem якіх: маёр. непаўнагадовы

Вызначае падсістэмы, пры якіх праграма будзе выконвацца. Дапушчальныя значэння для якіх з'яўляюцца «роднымі», «акно», «Кансоль», і «POSIX». Вы можаце дадаткова ўсталяваць версію падсістэмы таксама.

Важна: Выкарыстоўвайце каманду чалавека (%) чалавек , каб паглядзець , як каманда выкарыстоўваецца на вашым канкрэтным кампутары.