Linux / Unix команадсы: Id

NAME

ld - LD , GNU байланыстырушы құралын пайдалану

Синопсис

ld [ опциялар ] objfile ...

СИПАТТАМАСЫ

ld бірқатар объектілер мен мұрағат файлдарын біріктіреді , олардың деректерін ауыстырады және символ сілтемелерін байланыстырады. Әдетте бағдарламаны құрастырудағы соңғы қадам ld- ды орындау болып табылады.

ld Linker Command тілдік файлдарын AT & T Link Edit Command Language синтаксисінің жоғарғы бөлігінде жазылады, ол байланыстыру үрдісінде айқын және толық бақылауды қамтамасыз етеді.

Бұл адам бетінде командалық тіл сипатталмаған; командалық тілдегі толық мәліметтер және GNU сілтемесінің басқа аспектілері үшін «info» ішіндегі ld енгізілімін немесе нұсқаулықты ld: GNU сілтемесін қараңыз.

Ld нұсқасының бұл нұсқасы объектілік файлдарда жұмыс істеу үшін жалпы мақсаттағы BFD кітапханаларын пайдаланады. Бұл ld- ге нысан файлдарын көптеген форматтарда оқуға, біріктіруге және жазуға мүмкіндік береді --- мысалы, COFF немесе «a.out». Түрлі форматтар бір-бірімен байланыстырылуы мүмкін кез-келген нысан файлын шығару үшін.

Оның икемділігінен басқа, GNU байланыстырушы диагностикалық ақпаратты ұсынудағы басқа байланыстырушыларға қарағанда пайдалы. Көптеген сілтемелер қатені тапқаннан кейін орындауды дереу тоқтатады; мүмкіндігінше, ld басқа қателерді (немесе, кейбір жағдайларда қатеге қарамастан, шығыс файлын алуды) анықтауға мүмкіндік беретін орындауды жалғастырады.

GNU байланыстырушы ld жағдайлардың кең ауқымын қамтуға және басқа сілтемелермен мүмкіндігінше үйлесімді болуды көздейді. Нәтижесінде сізде оның мінез-құлқын бақылау үшін көптеген таңдау бар.

ОПЦИЯЛАР

Байланыстырушы пәрмен жолы опцияларының көпшілігін қолдайды, бірақ іс жүзінде олардың кейбіреулері кез келген нақты мәтінмәнде қолданылады. Мысалы, Ld- ті жиі пайдалану стандартты UNIX объектілік файлдарын стандартты қолдайтын Unix жүйесінде байланыстыру болып табылады . Мұндай жүйеде «hello.o» файлын байланыстыру үшін:

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

Бұл ld файлын «hello.o» және «libc.a» кітапханасы арқылы стандартты іздеу каталогтарынан келетін «/lib/crt0.o» файлын байланыстырудың нәтижесі ретінде шығару деп атайды. (Төменде -l опциясын талқылаңыз .)

Командалық жолдың кейбір параметрлері ld пәрмен жолының кез келген нүктесінде көрсетілуі мүмкін. Дегенмен, -l немесе -T сияқты файлдарға сілтеме жасайтын параметрлер файлды нысан файлдарына және басқа файлдық параметрлерге қатысты пәрмен жолында опция пайда болатын нүктеде оқуға әкеледі. Файлдық емес опцияларды басқа аргументпен қайталау ешқандай әсер етпейді немесе сол опцияның алдын-ала қайталануын (пәрмен жолында сол жақта) асыра алмайды. Төменде келтірілген сипаттамада бірнеше рет мағыналы түрде көрсетілуі мүмкін параметрлер көрсетілген.

Параметрлік емес аргументтер - бұл байланыстырылуы тиіс нысан файлдары немесе мұрағаттар. Нысан файлының аргументі опция мен оның аргументі арасында орналастырылмайтын болса, олар пәрмен жолы параметрлерін қолданып, алдын-ала немесе араласуы мүмкін.

Әдетте сілтегішке кемінде бір нысан файлымен шақырылады, бірақ сіз -l , -R және сценарий пәрменінің тілі арқылы екілік енгізу файлдарының басқа формаларын көрсете аласыз. Ешбір екілік енгізу файлдары көрсетілмесе, сілтегіш ешқандай шығыс шығармайды және кіріс файлдары жоқ хабарламаны шығарады.

Егер байланыстырушы нысан файлының пішімін тани алмаса, ол сілтеме сценарийі деп есептейді. Осылайша көрсетілген сценарий сілтемені пайдаланатын негізгі сілтеме сценарийін (әдепкі сілтеме сценарийін немесе -T пайдалану арқылы көрсетілген) кеңейтеді. Бұл мүмкіндік сілтегішке нысан немесе мұрағат болып көрінетін файлмен байланысуға мүмкіндік береді, бірақ шын мәнінде кейбір таңба мәндерін анықтайды немесе басқа нысандарды жүктеу үшін «INPUT» немесе «GROUP» пайдаланады. Сценарийді көрсету осылайша негізгі сілтеме сценарийін ұлғайтады; әдепкі сілтеме сценарийін толығымен ауыстыру үшін -T опциясын қолданыңыз.

Аттар бірыңғай әріп болып табылатын опциялар үшін, опция аргументтері бос орынға араласпай, опцияның әрпін орындауы керек немесе оларды талап ететін нұсқадан кейін дереу жеке дәлел ретінде берілуі керек.

Аттары бірнеше әріптер болатын опциялар үшін бір немесе екі сызық опцияның атауын ала алады; мысалы, - символ - символ және - символы - символы . Ескерту - бұл ережеден бір ерекшелігі бар. Кіші әріптен басталатын 'o' -ден басталатын бірнеше әріпті опциялар тек екі сызықтан асып кетуі мүмкін. Бұл -o параметрімен шатасуларды азайту. Мәселен, мысалы, -момагич шығу файлының атын сиқырға орнатады, ал - -момагич шығарудағы NMAGIC жалауын тағайындайды.

Бірнеше әріптік опцияларға дәлелдер опционның атауынан теңдік белгісімен бөлінуі немесе оларды талап ететін опциядан кейін дереу аргументтер ретінде берілуі керек. Мысалы, - foo және --trace-symbol = foo символы балама. Бірнеше әріптік опциялардың атауларының бірегей қысқартулары қабылданады.

Ескертпе - егер сілтегішті компилятор драйвері арқылы (мысалы, gcc ) жанама түрде шақырылса, онда барлық сілтеме жасаушы пәрмен жолы параметрлері -Wl (немесе қандай да бір компилятор драйверіне сәйкес келетін) арқылы префикс болуы керек:

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

Бұл маңызды, себебі басқаша компилятор драйвері бағдарламасы сілтегіш опцияларын үнсіз түсіре алады, нәтижесінде нашар сілтеме болады.

Мұнда GNU сілтемесі қабылдайтын жалпы командалық жол түйіндерінің кестесі:

- кілт сөз

Бұл опция HP / UX үйлесімділігіне қолдау көрсетіледі. Кілт сөздің аргументі архивтің , ортақ пайдаланылатын немесе әдепкі мәндердің бірі болуы керек. - Archival функционалды -Bstatic функциясына тең, ал қалған екеуі - функционалды -Бинамикалық . Бұл опция кез келген бірнеше рет пайдаланылуы мүмкін.

- Сәулет

- архитектурасы = сәулет

Ld ағымдағы шығарылымында, бұл опция тек Intel 960 сәулет үйлесімі үшін пайдалы. Ld конфигурациясында архитектура дәлелі 960 отбасындағы белгілі архитектураны анықтайды, кейбір қорғау шараларын қосады және мұрағат кітапханасын іздеу жолын өзгертеді.

Ld болашақ шығарылымдары басқа архитектуралық отбасылар үшін ұқсас функцияны қолдана алады.

-b енгізу-пішімі

--format = енгізу-пішімі

ld бірнеше нысан файлын қолдау үшін конфигурациялануы мүмкін. Егер сіздің ld теңшелген болса, пәрмен жолында осы параметрді сақтайтын кіріс нысандары файлдарының екілік пішімін көрсету үшін -b параметрін пайдалануға болады. Ld баламалы нысан пішімдерін қолдау үшін теңшелген болса да, әдетте ld әдепкі кіріс пішімінде әрбір құрылғыдағы ең әдеттегі пішім ретінде күтуге теңшелген жөн. input-format - мәтіндік жол, BFD кітапханалары қолдайтын нақты форматтың атауы. ( Objdump -i қол жетімді екілік пішімдерді тізімдеуіңізге болады.)

Файлдарды ерекше екілік пішіммен байланыстырсаңыз, бұл параметрді пайдалануыңыз мүмкін. Сондай-ақ, нақты пішімдегі нысан файлдарының əрбір тобы алдында -b кіріс-пішімін қоса, форматтарды анық түрде (түрлі пішімдердегі нысан файлдарын байланыстыру кезінде) пайдалануға болады.

Әдепкі пішім «GNUTARGET» айнымалы айнымалы мәнінен алынады.

Сондай-ақ, «TARGET» пәрменін қолданып, сценарийден енгізу пішімін анықтауға болады;

-c MRI-командалық файлы

--mri-script = MRI-командалық файлы

MRI арқылы шығарылатын сілтемелермен үйлесімділікте ld GNU ld құжаттамасындағы MRI Compatible Script Files бөлімінде сипатталған баламалы, шектелген пәрмен тілінде жазылған сценарий файлдарын қабылдайды. MRI скриптінің файлдарын -c параметрімен бірге енгізіңіз; жалпы мақсаттағы ld сценарий тілінде жазылған сілтеме сценарийлерін іске қосу үшін -T опциясын қолданыңыз. Егер MRI-cmdfile жоқ болса, ld кез келген -L опцияларымен анықталған каталогтарда іздейді.

-d

-dp

Бұл үш нұсқа баламалы; басқа сілтемелермен үйлесімділік үшін бірнеше нысандар қолданылады. Ауыстырылатын шығару файлы көрсетілсе де, ( -r ) бірге жалпы белгілерге кеңістік тағайындайды. Сценарий командасы «FORCE_COMMON_ALLOCATION» бірдей әсер етеді.

-e entry

--tentry = кіру

Жазбаны әдепкі кіріс нүктесімен емес, бағдарламаңыздың орындалуын көрсету үшін айқын белгі ретінде пайдаланыңыз. Енгізудің символы болмаса, сілтемесі жазбаны нөмір ретінде талдауға тырысады және оны кіру мекенжайы ретінде қолдануға болады (нөмір 10-негізде түсіндіріледі, 16-негіз бойынша жетекші 0x , немесе жетекші 0 8 базасында).

-E

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

Динамикалық түрде байланыстырылған орындалатын файлды жасаған кезде, барлық таңбаларды динамикалық таңба кестесіне қосыңыз. Динамикалық символдар кестесі - жұмыс уақытында динамикалық нысандардан көрінетін таңбалар жиынтығы.

Егер сіз осы параметрді пайдаланбайтын болсаңыз, динамикалық символдар кестесі әдетте сілтемеде көрсетілген кейбір динамикалық нысанмен сілтеме жасалған таңбаларды ғана қамтиды.

Динамикалық нысанды жүктеу үшін «dlopen» функциясын пайдалансаңыз, ол басқа динамикалық нысанға емес, бағдарламамен анықталған таңбаларға сілтеме жасау қажет болса, бағдарламаны өзі байланыстырған кезде осы параметрді пайдалануыңыз керек болады.

Шығару пішімі оны қолдайтын болса, динамикалық белгіше кестесіне қандай таңбаларды қосу керек екенін бақылау үшін нұсқалық сценарийді пайдалануға болады. @ Ref {VERSION} ішіндегі -версия-сценарий сипаттамасын қараңыз.

-EB

Big-endian объектілерін байланыстырыңыз. Бұл әдепкі шығу пішіміне әсер етеді.

-EL

Кішкентай нысандарды байланыстырыңыз. Бұл әдепкі шығу пішіміне әсер етеді.

-f

- қосалқы аты

ELF ортақ нысанды жасаған кезде ішкі DT_AUXILIARY өрісін көрсетілген атқа орнатыңыз. Бұл динамикалық байланыстырушыға ортақ нысанның символдық кестесінің ортақ нысан атауының символдық кестесіндегі көмекші сүзгі ретінде пайдаланылуы керек екенін білдіреді.

Егер кейінірек бағдарламаны осы сүзгі нысанына қарсы байланыстырсаңыз, онда бағдарламаны іске қосқан кезде динамикалық сілтеме DT_AUXILIARY өрісін көреді. Динамикалық байланыстырушы сүзгі нысанынан кез келген таңбаларды шешсе, алдымен ортақ нысан атауында анықтаманың бар-жоғын тексереді. Егер бар болса, ол сүзгі нысанындағы анықтаманың орнына пайдаланылады. Ортақ нысан атауы болмауы керек. Осылайша, ортақ объектінің аты белгілі бір функцияларды баламалы іске асыруды қамтамасыз ету үшін пайдаланылуы мүмкін, мысалы, жөндеуге немесе машинаның нақты жұмысына арналған.

Бұл опция бірнеше рет көрсетілуі мүмкін. DT_AUXILIARY жазбалары пәрмен жолында пайда болатын ретпен жасалады.

-F атауы

- фильтр атауы

ELF ортақ нысанды жасаған кезде ішкі DT_FILTER өрісін көрсетілген атауға орнатыңыз. Бұл динамикалық сілтеме жасайтын ортақ нысанның символдық кестесінің ортақ нысан атауының таңбалық кестесіндегі сүзгі ретінде пайдаланылатынын білдіреді.

Егер кейінірек бағдарламаны осы сүзгі нысанына байланыстырсаңыз, онда бағдарламаны іске қосқан кезде динамикалық байланыстырушы DT_FILTER өрісін көреді. Динамикалық сілтеме әдеттегідей сүзгі нысанының таңбалық кестесіне сәйкес таңбаларды шешеді, бірақ ол жалпы нысан атауында анықталған анықтамаларға сілтеме жасайды. Осылайша, сүзгі объектісі нысан атауымен берілген таңбалардың ішкі жиынын таңдау үшін пайдаланылуы мүмкін.

Кейбір ескі сілтемелер F- опцияны кіріс және шығыс нысандарының файлдары үшін нысан файлының пішімін көрсету үшін компиляция құралдарының жолы арқылы пайдаланды. GNU сілтемесі осы мақсат үшін басқа механизмдерді пайдаланады: -b , --format , --format опциялары, сілтеме сценарийлеріндегі «TARGET» және «GNUTARGET» ортасының айнымалысы. ELF ортақ нысанды жасамаған кезде, GNU байланыстырушы -F опциясын елемейді.

-фини атауы

ELF орындалатын немесе ортақ нысанды жасаған кезде, орындалатын немесе ортақ нысан босатылған кезде NAME-ге қоңырау шалыңыз, DT_FINI функциясының мекен-жайына орнатыңыз. Әдепкі бойынша, байланысушы «_fini» функциясын қоңырау шалу функциясы ретінде пайдаланады.

Елемеген. Басқа құралдармен үйлесімділікке арналған.

-G мәні

--gpsize = мән

GP тіркелімін өлшемге қарай оңтайландырылатын нысандардың ең үлкен өлшемін орнатыңыз. Бұл үлкен және кішкентай нысандарды әртүрлі бөлімдерге орналастыруға мүмкіндік беретін MIPS ECOFF сияқты нысан файлының пішімдеріне ғана маңызды. Бұл басқа нысан файл пішімдері үшін еленбейді.

- аты-жөні

-soname = name

ELF ортақ нысанды жасағанда, ішкі DT_SONAME өрісін көрсетілген атқа орнатыңыз. Егер орындалатын файл DT_SONAME өрісі бар ортақ нысанмен байланыстырылған болса, орындалатын файл іске қосылғанда, динамикалық сілтеме құрастырғышқа берілген файл атауын пайдаланудан гөрі DT_SONAME өрісі арқылы көрсетілген ортақ нысанды жүктеуге әрекет жасайды.

-i

Инкрементальды сілтемені орындаңыз (опция- l сияқты ).

- аты-жөні

ELF орындалатын немесе ортақ нысанды жасағанда, орындалатын немесе ортақ нысан жүктелгенде, NAME-ге қоңырау шалыңыз, функцияның мекен-жайына DT_INIT орнатыңыз. Әдепкі бойынша сілтемесі қоңырау шалатын функция ретінде «_init» функциясын қолданады.

-l мұрағаты

- кітапхана = мұрағат

Архивтік файл мұрағатын байланыстыратын файлдар тізіміне қосыңыз. Бұл опция кез келген бірнеше рет пайдаланылуы мүмкін. ld көрсетілген әрбір архив үшін «libarchive.a» көріністеріне арналған жол-парағын іздейді.

Ортақ кітапханаларды қолдайтын жүйелерде ld- ақ «.a» -ден басқа кеңейтімдерді қамтитын кітапханаларды іздеуге болады. Атап айтқанда, ELF және SunOS жүйелерінде ld «.a» кеңейтімі бар біреуді іздеуден бұрын «.so» кеңейтімі бар кітапхананың каталогын іздейді. Конвенциялар арқылы «.so» кеңейтімі ортақ кітапхананы көрсетеді.

Сілтемесі мұрағатты тек бір рет, пәрмен жолында көрсетілген жерде іздейді. Егер мұрағат командалық жолдағы мұрағат алдында пайда болған қандай да бір объектіде анықталмаған таңбаны анықтаса, сілтемеде мұрағатта тиісті файл (дер) болады. Алайда, кейінірек пәрмен жолында пайда болатын нысандағы анықталмаған белгі символды қайтадан мұрағаттағы іздеуді тудырмайды.

Қараңыз - ( сілтеме жасаушыны бірнеше рет іздеу мұрағатын мәжбүрлеуге арналған нұсқа.

Бірдей мұрағатты пәрмен жолында бірнеше рет тізімдеуіңізге болады.

Мұрағатты іздеудің бұл түрі Unix сілтемелері үшін стандартты болып табылады. Дегенмен, егер ld onAIX пайдалансаңыз, бұл AIX сілтемесінің әрекетінен ерекшеленетінін ескеріңіз.

-L іздеу

- кітапханалық- іздестіру = іздеу

Ld кітабын және ld басқару сценарийлерін іздейтін жолдардың тізіміне жолды іздеуді қосыңыз. Бұл опцияны бірнеше рет қолдануға болады. Каталогтар пәрмен жолында көрсетілген тәртіпте ізделеді. Пәрмен жолында көрсетілген каталогтар әдепкі каталогтардан бұрын ізделеді. Барлық нұсқалар опциялардың пайда болу тәртібіне қарамастан барлық -l опцияларына қолданылады.

Егер іздеуді «=» басталса, онда «=» сілтемесі конфигурацияланған кезде көрсетілген жолды sysroot префиксімен ауыстырады.

Ізделінетін жолдардың әдепкі жиынтығы ( L- белгісімен көрсетілмеген) ld эмуляция режимінің қайсысын қолданатынын, ал кейбір жағдайларда оны қалай теңшелгеніне байланысты.

Жолдар сілтеме сценарийінде «SEARCH_DIR» пәрменімен көрсетілуі мүмкін. Осындай көрсетілген каталогтар сілтеме сценарийі пәрмен жолында пайда болатын нүктеде ізделеді.

эмуляциясы

Эмуляция сілтемесін елестетіңіз. Қол жетімді эмуляцияларды - вербалды немесе опцияларымен тізімдей аласыз.

Егер -m опциясы пайдаланылмаса, онда эмуляция «LDEMULATION» ортасының айнымалы мәнінен алынады, егер ол анықталса.

Әйтпесе әдепкі эмуляция байланыстырушы қалай теңшелгеніне байланысты.

- басып шығару картасы

Сілтеме картасын стандартты шығару үшін басып шығарыңыз. Байланыстағы карта сілтеме туралы ақпаратты қамтиды, соның ішінде:

*

Нысандар мен таңбалар жадқа салыстырылатын жерлерде.

*

Жалпы белгілер қалай бөлінеді.

*

Архивтің барлық мүшелері архив мүшесін енгізуге әкелген символды еске алып, сілтемені енгізді.

- нмагич

Бөлімдердің беттің туралануын өшіріп, мүмкіндігінше шығымды «NMAGIC» деп белгілеңіз.

-N

-

Мәтінді және деректер бөлімдерін оқуға және жазуға болатын етіп орнатыңыз. Сондай-ақ, деректер сегментін бетпен туралау және ортақ кітапханалармен байланыстыруды ажырату. Шығу пішімі Unix стилінің сиқырлы нөмірлерін қолдаса, шығысын «OMAGIC» деп белгілеңіз.

- ештеңе емес

Бұл параметр -N опциясының көптеген әсерлерін жоққа шығарады. Ол мәтін бөлігін тек оқуға арналған етіп орнатады және деректер сегментін беттердің туралануына мәжбүр етеді. Ескерту - бұл параметр ортақ кітапханалармен байланысуға мүмкіндік бермейді. Бұл үшін -Бинамикалық пайдаланыңыз.

-o шығу

--output = шығу

Ld арқылы жасалған бағдарламаның атауы ретінде шығуды қолданыңыз; егер бұл параметр көрсетілмесе, әдепкі бойынша a.out аты қолданылады. «OUTPUT» командасының пәрмені шығу файлының атын да көрсете алады.

-O деңгейі

Егер деңгей нөлден артық сандық мәндер болса, шығыс параметрлерін оңтайландырады. Бұл біршама ұзағырақ болуы мүмкін, сондықтан соңғы екілік үшін ғана мүмкін болуы мүмкін.

-q

- эпит-көшіру

Көшіру бөлімдері мен мазмұнын толығымен байланысқан exsecutables ішінен қалдырыңыз. Post link талдау және оңтайландыру құралдары бұл ақпаратты қажет болуы мүмкін орындалатын файлдарды дұрыс өзгерту үшін. Бұл үлкен орындалатын файлдарға әкеледі.

Бұл опция қазіргі уақытта тек ELF платформаларында ғана қол жетімді.

- байланыстыратын

Ауыстырылатын шығыс шығаруды жасаңыз --- яғни, шығыс файлын шығарыңыз, ол өз кезегінде ld-ге кіріс ретінде қызмет ете алады. Бұл жиі ішінара байланыс деп аталады. Жан-жақты әсер ретінде стандартты Unix сиқырлы нөмірлерін қолдайтын орталарда бұл опция шығу файлының сиқырлы нөмірін «OMAGIC» -на орнатады. Бұл параметр көрсетілмесе, абсолютті файл жасалады. C ++ бағдарламаларын байланыстыру кезінде, бұл параметр конструкторларға сілтемелерді шешпейді; мұны істеу үшін -Ur .

Кіріс файлында шығыс файлы сияқты пішім болмаса, ішінара сілтеме тек қана бұл кіріс файлы кез-келген көшіруді қамтымаса ғана қолдау көрсетіледі. Түрлі шығыс форматтары қосымша шектеулерге ие болуы мүмкін; мысалы, кейбір «a.out» негізіндегі пішімдер басқа форматта кіріс файлдарымен ішінара байланыстыруды қолдамайды.

Бұл опция -i -i сияқты.

-R файлы

--just-symbols = файл атауы

Таңбалардың атауларын және олардың атауларын файл атауынан оқыңыз, бірақ оны ауыстырмаңыз немесе оны шығаруға қосыңыз. Бұл сіздің шығу файлыңыз символдық түрде басқа бағдарламаларда анықталған жадтың абсолютті орындарына сілтеме жасауға мүмкіндік береді. Бұл опцияны бірнеше рет пайдалануға болады.

Басқа ELF сілтемелерімен үйлесімділік үшін, егер -R параметрі файл атауы емес, каталог атауы болса, ол -rpath параметрі ретінде қарастырылады.

- шаңсорғыш - барлығы

Шығарылған файлдан барлық символдық ақпаратты өткізіп жіберіңіз.

- Өшіру

Шығарылған файлдан күйге келтіргіш белгісі туралы ақпаратты (бірақ барлық таңбалар емес) өткізіп тастаңыз.

-t

- шіркеу

Ld процестерін өңдейтін файлдардың атауын басып шығарыңыз.

-T скриптфайлы

--script = scriptfile

Сценарий файлын байланыстырушы сценарий ретінде пайдаланыңыз. Бұл сценарий ld әдепкі сілтеме сценарийін ауыстырады (оны қосудан гөрі), сондықтан командалық файл шығыс файлын сипаттау үшін қажетті барлық мәліметтерді көрсетуі керек. Егер сценарий файлы ағымдағы каталогта жоқ болса, «ld» оны кез-келген алдыңғы нұсқалармен анықталған каталогтардан іздейді. Бірнеше -T опциялары жинақталады.

-u таңбасы

- таңдалған = символы

Шығарылған файлға таңбаны белгісіз белгі ретінде енгізу керек. Мұны жасау, мысалы, стандартты кітапханалардан қосымша модульдерді байланыстыруды бастауы мүмкін. -u қосымша белгісіз белгілерді енгізу үшін әртүрлі опция дәлелдерімен қайталануы мүмкін. Бұл опция «EXTERN» сілтеме сценарийі пәрменіне тең.

-Ur

C ++ бағдарламаларынан басқа ештеңе болмаса, бұл опция -r : ол көшіруге болатын шығуды жасайды --- яғни, шығыс файлы, ол өз кезегінде ld-ге кіріс ретінде қызмет етуі мүмкін. C ++ бағдарламаларын байланыстыру кезінде -Ur -r- дан өзгеше, конструкторларға сілтеме жасайды. Ол пайдаланылмайды -Ur -Ur- мен байланысты болған файлдарға -Ur ; конструкторлық кесте салынғаннан кейін оны қосуға болмайды. Пайдалану -Ur тек соңғы соңғы сілтеме үшін және -r басқа.

- керемет [= SECTION ]

Әрбір кіріс бөлімі үшін SECTION сәйкес келетін бөлек шығыс бөлігін жасайды немесе әрбір еншілес кіріс бөлімі үшін қосымша таңбалы SECTION дәлелі болмаса. Жетім бөлімі сілтеме сценарийінде нақты айтылмаған. Бұл опцияны бірнеше рет командалық жолда пайдалануға болады; Бұл кіріс бөлімдерін бірдей атпен біріктіруге тыйым салады, сілтеме сценарийіндегі шығыс бөлімдерінің тапсырмаларын басады.

-v

- түрлендіру

-V

Ld нұсқасының нөмірін көрсету. -V опциясы қолдау көрсетілетін эмуляциялардың тізімін де көрсетеді.

-x

- дискард-барлығы

Барлық жергілікті таңбаларды жою.

-X

- жергілікті тұрғындар

Барлық уақытша жергілікті таңбаларды жойыңыз. Көптеген нысаналы мақсаттар үшін, бұл барлық жергілікті символдар, олардың атаулары L бастап басталады.

- символы

- символ - символ

Таңбаның пайда болған әрбір байланысты файлдың атын басып шығарыңыз. Бұл опцияға кез-келген бірнеше рет берілуі мүмкін. Көптеген жүйелерде астын сызуды басу керек.

Бұл опция байланысыңызда анықталмаған нышан болған кезде пайдалы, бірақ сілтеме қайдан шыққанын білмейді.

-Y жол

Әдепкі кітапхана іздеу жолына жол қосыңыз. Бұл параметр Solaris сыйысымдылығына арналған.

-z кілт сөзі

Танылған кілт сөздерді «initfirst», «interpose», «loadfltr», «nodefaultlib», «nodelete», «nodlopen», «nodump», «now», «origin», «combreloc», «nocombreloc» және «nocopyreloc «. Басқа негізгі сөздер Solaris үйлесімділігі үшін еленбейді. «initfirst» кез келген басқа нысандардың алдында іске қосу уақытында инициализацияланатын нысанды белгілейді. «interpose» белгісі барлық символдардан бұрын, бірақ бастапқы орындалатын файлға кіретін объектіні белгілейді «loadfltr» бұл файлдың орындалу уақытында дереу өңделетін нысанды белгілейді. «nodefaultlib» осы нысанның тәуелділіктерін іздеуді елемейтін объектіні белгілейді әдепкі кітапхана іздеу жолдары. «nodelete» белгісі объектіні орындау уақытында жүктелмеуі керек деп белгілейді. «nodlopen» объектіні «dlopen» үшін қол жетімді емес деп белгілейді. «nodump» белгісі объектіні «dldump» арқылы тастауға болмайды деп белгілейді. «Қазір» объектіге ленал емес жұмыс уақыты байланысы арқылы белгіленеді. «origin» деп белгілейді, нысан $ ORIGIN болуы мүмкін. «defs» белгісіз таңбаларға тыйым салады. «muldefs» көптеген анықтамалар береді. «combreloc» бірнеше көшкін бөлімдерін біріктіреді және оларды динамикалық символды іздеу кэштеу мүмкіндігін сұрыптайды.

«nocombreloc» бірнеше көшу бөлімдерін біріктіреді. «nocopyreloc» көшіру көшірмелері өндірісін өшіреді.

- ( мұрағаттар -)

- Бастапқы топтық мұрағаттар - топ-топ

Мұрағат файлдары мұрағаттық файлдардың тізімі болуы керек. Олар нақты файл атаулары немесе -l опциялары болуы мүмкін.

Көрсетілген мұрағаттар жаңа анықталмаған анықтамалар жасалмайынша қайта-қайта ізделеді. Әдетте, мұрағат тек бір рет пәрмен жолында көрсетілген тәртіпте ізделеді. Егер мұрағатта кейінірек пайда болатын белгіше белгісіз белгіні шешу үшін осы мұрағатта белгіше қажет болса, сілтеме бұл анықтаманы шеше алмайды. Архивтерді топтау арқылы барлық ықтимал анықтамалар шешілмейінше, олардың бәрі бірнеше рет іздеуге болады.

Бұл опцияны пайдалану өнімділікті айтарлықтай арттырады. Оны екі немесе одан да көп мұрағаттар арасында қайталанбайтын айналмалы сілтемелер болса ғана пайдалану керек.

- кіру-белгісіз-кіру-арка

- қабылдамаған-белгісіз-кіріс-арка

Сәйкестендіргішті архитектурасы танылмайтын енгізу файлдарын қабылдау туралы айтады. Болжам, пайдаланушы не істеп жатқанын біледі және белгісіз бұл белгісіз кіріс файлдарымен байланыстырғысы келеді. Бұл сілтеме жасаушының әдепкі мінез-құлқы болды 2.14. 2.14 шығарылымнан босатылған әдепкі мінез-құлық осындай кіріс файлдарын қабылдамау болып табылады, сондықтан ескі әрекетті қалпына келтіру үшін - қолы-белгісіз-кіріс-артқы параметрі қосылды.

кілт сөзді енгізу

Бұл опция SunOS үйлесімділігі үшін еленбейді.

-Бинамикалық

-ди

-call_shared

Динамикалық кітапханаларға қарсы байланыс. Бұл ортақ кітапханаларға қолдау көрсетілетін платформаларда ғана маңызды. Бұл опция мұндай платформаларда әдепкі болып табылады. Бұл опцияның әр түрлі нұсқалары түрлі жүйелермен үйлесімділікке арналған. Бұл опцияны пәрмен жолында бірнеше рет қолдануға болады: ол кітапхананы іздейтін -l опцияларын іздейді.

-Bgroup

Динамикалық бөлімдегі «DT_FLAGS_1» жазбасынан «DF_1_GROUP» жалауын орнатыңыз. Бұл іске қосу сілтемесін осы нысандағы іздеуді және оның тәуелділіктерін тек топ ішінде ғана орындауды тудырады. - жоқ-анықталмады . Бұл опция ортақ кітапханаларды қолдайтын ELF платформаларында ғана маңызды.

-Bstatic

-dn

-non_shared

- статикалық

Ортақ кітапханалармен байланыспаңыз. Бұл ортақ кітапханаларға қолдау көрсетілетін платформаларда ғана маңызды. Бұл опцияның әр түрлі нұсқалары түрлі жүйелермен үйлесімділікке арналған. Бұл опцияны пәрмен жолында бірнеше рет қолдануға болады: ол кітапхананы іздейтін -l опцияларын іздейді.

-Бимболбол

Ортақ кітапхананы жасағанда, жаһандық белгілерге сілтемелер ортақ кітапханадағы анықтамаға байланыстырады. Әдетте, ортақ кітапханаға қатысты байланысты ортақ кітапханадағы анықтаманы қайта анықтауға болады. Бұл опция ортақ кітапханаларды қолдайтын ELFplatforms-де ғана маңызды.

- тексеру бөлімдері

- тексерілмейтін бөлімдер

Байланыстырушыдан кез-келген қайталанулар бар-жоғын білу үшін тағайындалғаннан кейін бөлім адрестерін тексермеуді сұрайды. Әдетте сілтегіш бұл тексерісті орындайды және егер ол кез келген қателерді тапса, тиісті қате туралы хабарлар шығарады. Байланыстырушы біледі және қабаттасулардағы бөлімдерге арналған жәрдемақы жасайды. Әдепкі әрекетті пәрмен жолы қосқышын пайдалану арқылы қалпына келтіруге болады - тексеру бөлімдері .

- шаршы

Кросс-анықтамалық кестені шығару. Егер байланыстырушы карта файлы жасалса, көлденең сілтеме кестесі карта файлына басып шығарылады. Олай болмаған жағдайда, ол стандартты шығаруда басып шығарылады.

Кестенің форматы әдейі оңай, қажет болған жағдайда сценарий арқылы оңай өңделуі мүмкін. Таңбалар басылып шығарылады, аты бойынша сұрыпталады. Әр таңба үшін файл атауларының тізімі беріледі. Егер таңба анықталса, тізімдегі бірінші файл анықтаманың орналасқан жері болып табылады. Қалған файлдар символға сілтемелері бар.

- анықталмаған-жалпы

Бұл параметр мекенжайларды жалпы белгілерге тағайындауды тоқтатады. Сценарий командасы «INHIBIT_COMMON_ALLOCATION» бірдей әсерге ие.

- Несколько-настройка- опцией опция шығу файлының түрін таңдаудан мекенжайларды Жалпы белгілерге тағайындау туралы шешімді бөлуге мүмкіндік береді; әйтпесе Relocatable емес шығыс түрі мекенжайларды Жалпы белгілерге тағайындайды. Жалпыға ортақ пайдаланылатын әмбебап таңбалар тек негізгі бағдарламада ғана тағайындалатын ортақ кітапханаға сілтеме жасайды. Бұл ортақ кітапханада пайдаланылмаған қайталанатын орынды жояды, сондай-ақ орындалу уақытының символды ажыратуға арналған мамандандырылған іздеу жолдары бар көп динамикалық модульдер болған кезде дұрыс емес көшірмеге шешудің мүмкін болатын шатасуларын болдырмайды.

--Defsym символы = өрнек

Өрнекте берілген абсолюттік мекен-жайы бар шығу файлында жаһандық таңбаны жасаңыз. Бұл опцияны пәрмен жолында бірнеше таңбаларды анықтау үшін қажет болған кезде қолдануға болады. Бұл контекстте өрнектің шектеулі формасы қолданылады: он алтылықты тұрақты немесе қолданыстағы нышанның атын бере аласыз немесе он алтылық тұрақты немесе таңбаларды қосу немесе шығару үшін «+» және «-» пайдалануға болады. Егер сізге қосымша өрнектер қажет болса, сценарийден сілтеме пәрменінің тілін пайдалануды қарастырыңыз. Ескерту: символы арасындағы бос орын болмауы тиіс, теңдік белгісі (`` = '') және өрнек .

--demangle [= style ]

- жоқ-демонг

Бұл опциялар қате туралы хабарламаларда және басқа шығарылымдарда таңбалардың атауларын демонстрациялауды басқарады. Байланыстырушы туралы айтылған кезде, ол символды атауларын оқуға болатын түрде көрсетуге тырысады: ол нысанның файл пішімі арқылы пайдаланылса, жетекші астын сызып тастайды және C ++ таңбалы таңба атауларын пайдаланушының оқылатын аттарына түрлендіреді. Түрлі компиляторлар әртүрлі бүлдіргіш стилі бар. Конфигуратор үшін тиісті демонстрациялау стилін таңдау үшін қосымша таңбалық стиль дәлелін пайдалануға болады. COLLECT_NO_DEMANGLE ортасының айнымалысы орнатылмаған болса, сілтеме әдепкі бойынша демонстрацияланады . Бұл опциялар әдепкі бойынша бас тарту үшін пайдаланылуы мүмкін.

- динамикалық байланыстырушы файл

Динамикалық байланыстырушының атын орнатыңыз. Бұл динамикалық түрде байланыстырылған ELF орындалатын файлдарды генерациялау кезінде ғана маңызды. Әдепкі динамикалық сілтеме әдетте дұрыс; мұны не істеп жатқаныңызды білмейінше қолданбаңыз.

- жабылған-релоктар

Бұл опция MEMN-тің ендірілген PIC кодын, -Membedded-pic опциясы арқылы GNU компиляторына және ассемблерге байланыстырған кезде ғана мағыналы болады. Бұл байланыстырушының кесте жасауына әкеледі, ол кез-келген деректерді көрсеткіш мәндеріне статикалық инициализацияланған көшіру үшін қолданылуы мүмкін. Толық ақпарат алу үшін testuite / ld-empic ішіндегі кодты қараңыз.

- апаттық ескерту

Барлық ескертулерді қателік ретінде қарастырыңыз.

--force-exe-suffix

Шығару файлында .exe жұрнағы бар екеніне көз жеткізіңіз.

Егер сәтті салынған толығымен байланысқан шығару файлында «. Exe » немесе « .dll » жұрнағы болмаса, бұл опция сілтегішті шығару файлын «.exe» жұрнағымен бірдей атауға көшіреді. Бұл опция Microsoft Windows хостында өзгермейтін Unix makefiles пайдалану кезінде пайдалы, себебі Windows жүйесінің кейбір нұсқалары «.exe» жұрнағымен аяқталмайынша кескінді іске қоспайды.

--No-gc-бөлімдер

--gc-бөлімдер

Пайдаланылмаған енгізу бөлімдерінің қоқыс жинағын қосыңыз. Бұл параметрді қолдамайтын нысандарда еленбейді. Бұл опция -r- мен үйлесімді емес, ол динамикалық байланыста қолданылмауы керек. Әдепкі әрекет (осы қоқыс жинағын орындамау) пәрмен жолында --no-gc-бөлімдерін көрсету арқылы қалпына келтірілуі мүмкін.

--Көмектесіңдер

Стандартты шығару мен шығудағы пәрмен жолы параметрлерін қысқаша басып шығарыңыз.

--target-help

Стандартты шығу мен шығудағы барлық мақсатты арнайы опциялардың қысқаша мазмұнын басып шығарыңыз.

-Map картасыфайлы

Сілтеме картасын файлдық картафайлға басып шығарыңыз. Жоғарыдағы -M опциясының сипаттамасын қараңыз.

- жоқ-сақтау-есте сақтау

ld әдетте жадыдағы кіріс файлдарының символдық кестелерін кэштеу арқылы жады көлемін пайдалану жылдамдығын оңтайландырады. Бұл опция ld- ды қажет болған жағдайда символдар кестесін қайта қарап, жады көлемін оңтайландыруды білдіреді. Үлкен орындалатын файлды байланыстыру кезінде ld жадтың бос орынынан шыққан кезде қажет болуы мүмкін.

- жоқ-анықталмаған

-z defs

Әдетте, символдық емес ортақ кітапхананы жасаған кезде белгісіз таңбалар рұқсат етіледі және орындау уақытын жүктеуші арқылы шешіледі. Бұл опциялар мұндай белгісіз белгілерге тыйым салады.

- әр түрлі-айқындау

-z мульфиды

Әдетте символ бірнеше рет анықталған кезде сілтегіш қате қате туралы хабарлайды. Бұл опциялар көптеген анықтамалар береді және бірінші анықтама пайдаланылады.

- allow-shlib-анықталмаған

Белгілі емес таңбаларды ортақ нысандарда - тіпті белгісіз белгіленсе де рұқсат етіңіз. Таза нәтиже қалыпты нысандардағы анықталмаған таңбалар қатені тудырады, бірақ ортақ нысандардағы анықталмаған таңбалар еленбейді. No_undefined іске асыру іске қосу сілтемесі анықталмаған таңбаларға бөгет жасайтыны туралы болжам жасайды. Алайда кем дегенде бір жүйе бар (BeOS), онда ортақ кітапханаларда анықталмаған таңбалар қалыпты, өйткені ядро ​​оларды жүктеу уақытында бұзады, қай функция ағымдағы сәулет үшін ең қолайлы екенін таңдау үшін. IE тиісті memset функциясын динамикалық түрде таңдайды. Әлбетте, бұл HPPA-ның ортақ кітапханалары үшін белгісіз белгілер болуы әдеттегідей.

--No-undefined-нұсқасы

Әдетте символы анықталмаған нұсқасы болғанда, сілтеме беруші оны елемейді. Бұл опция анықталмаған нұсқамен таңбаларды рұқсат етпейді және оның орнына қателік қатесі шығарылады.

- жоқ-ескерту-сәйкес келмеуі

Әдетте ld әртүрлі процессорлар үшін немесе әртүрлі индианеттер үшін жиналғандықтан, кейбір себептермен сәйкес келмейтін кіріс файлдарын біріктіруге тырыссаңыз, қате береді. Бұл опция ld-ға осындай қателіктерді үнсіз түрде рұқсат ету керек екенін білдіреді. Бұл опция байланыстырушы қателерінің орынсыз екендігін қамтамасыз ететін кейбір арнайы әрекеттерді қабылдаған кезде ғана пайдаланылуы керек.

- жалпы емес - мұрағат

Келесі мұрағаттық файлдар үшін --whole-archive параметрінің әсерін өшіріңіз.

- noninhibit-exec

Қажет болған кезде орындалатын файлды сақтаңыз. Әдетте сілтеме процесінің барысында қателер кездесетін болса, сілтеме файлы шығыс файлын шығармайды; ол қандай да болмасын қатені шығарғанда шығу файлын жазбастан шығады.

-nostdlib

Пәрмен жолында анық көрсетілген іздеу кітапханалық каталогтары ғана. Сілтеме сценарийлерінде көрсетілген кітапхана каталогтары (командалық жолда көрсетілген сілтеме сценарийлерін қоса) еленбейді.

--format -format форматы

ld бірнеше нысан файлын қолдау үшін конфигурациялануы мүмкін. Егер сіздің ld осы жолмен конфигурацияланған болса, шығу нысаны файлының екілік пішімін көрсету үшін --format опциясын қолдануға болады. Ld баламалы нысан пішімдерін қолдауға теңшелген болса да, әдетте, бұл әрқайсысында әдеттегі пішімді әдепкі пішім ретінде шығару үшін конфигурациялануы керек. шығыс пішімі - мәтіндік жол, BFD кітапханалары қолдайтын нақты форматтың атауы. (Сіз objdump -i қол жетімді екілік пішімдерді тізімдеуіңізге болады.) «OUTPUT_FORMAT» сценарийі пішімі шығыс пішімін де көрсете алады, бірақ бұл опцияны алдын ала анықтайды.

-кмагич

Бұл параметр Linux үйлесімділігі үшін еленбейді.

-Тек

Бұл параметр SVR4 үйлесімділігі үшін еленбейді.

--босаңсыңыз

Машинаға тәуелді әсерлері бар параметр. Бұл параметр бірнеше нысандарда ғана қол жетімді.

Кейбір платформаларда, --relax опциясы жаһандық оңтайландыруларды орындайды, бұл байланыстырушы бағдарламада мекенжай режимдерін босату және шығару нысанының файлында жаңа нұсқауларды синтездеу сияқты бағдарламада адрестеуді шешсе мүмкін болады.

Кейбір платформаларда бұл сілтеме уақытының жаһандық оңтайландырулары орындалатын орындалудың символикалық күйін келтіруі мүмкін. Бұл Matsushita MN10200 және MN10300 процессорларының отбасы үшін белгілі.

Бұл жерде қолдау көрсетілмейтін платформаларда - шлейка қабылданады, бірақ еленбейді.

--Define-symbols-file файл атауы

Файлдың атауында тізімделген таңбаларды ғана сақтаңыз, қалғандарын алып тастаңыз. файл атауы тек бір жолда бір символдың атауы бар жазық файл болып табылады. Бұл опция жұмыс уақытының жадын сақтау үшін үлкен жаһандық символдар кестесінің біртіндеп жинақталатын орталарда (VxWorks сияқты) әсіресе пайдалы.

- таңбалар-файлдар анықталмаған рәміздер немесе көшіруге қажетті таңбалардан бас тартпайды.

Сіз пәрмен жолында тек - символдар-файлды бір рет көрсете аласыз. Ол -s және -S дегендерді жояды.

-ppath dir

Жұмыс кітапханасын іздеу жолына каталог қосу. Бұл ELFexecutable мүмкіндігін ортақ нысандармен байланыстыру кезінде пайдаланылады. Барлық жолды дәлелдер біріктіріліп, орындау уақыты сілтемесіне беріліп, олар ортақ нысандарды орындау уақытында табу үшін қолданылады. -rpath опциясы сілтемеде анық көрсетілген ортақ нысандарға қажет ортақ нысандарды табу кезінде де қолданылады; -rpath-link опциясының сипаттамасын қараңыз. Егер ELF орындалатын файлды байланыстыру кезінде -path қолданылмаса, ол анықталған болса, «LD_RUN_PATH» айнымалы мәнінің мазмұны пайдаланылады.

-Prath опциясы SunOS-да қолданылуы мүмкін. Әдепкі бойынша, SunOS-да сілтеме беруші берілген барлық -L опцияларының ішінен орындалу уақытының іздеу паттерін қалыптастырады . Егер a -ppath параметрі пайдаланылса, орындалу уақытын іздеу жолы -L опцияларын елемей, -rpath опцияларын пайдалану арқылы ғана жасалады. Бұл файлдарға арналған NFS орнатылған көптеген L опцияларын қосатын gcc пайдалану кезінде пайдалы болуы мүмкін.

Басқа ELF сілтемелерімен үйлесімділік үшін, егер -R параметрі файл атауы емес, каталог атауы болса, ол -rpath параметрі ретінде қарастырылады.

-pRath-link DIR

ELF немесе SunOS пайдаланған кезде бір ортақ кітапхана басқадан талап етуі мүмкін. Бұл «ld -shared» сілтемесі кіріс файлдарының бірі ретінде ортақ кітапхананы қамтыған кезде орын алады.

Байланыстырушы ортақ емес, көшіруге болмайтын сілтеме жасау кезінде осындай тәуелділікті кездестіргенде, ол автоматты түрде қажетті ортақ кітапхананы табуға тырысады және оны нақты сілтеме болмаса сілтемеге қосады. Мұндай жағдайда, -rpath-link параметрі іздеуге арналған анықтамалардың алғашқы жиынтығын көрсетеді. -rpath-link опциясы каталог атауларының тізбегін немесе қос нүктелермен бөлінген атаулардың тізімін көрсету арқылы немесе бірнеше рет пайда болуы мүмкін.

Бұл опция сақтықпен пайдаланылуы керек, себебі ол ортақ кітапханаға қатты жинақталған іздеу жолын алдын алады. Мұндай жағдайда іске қосу сілтемесі жасағаннан басқа жолды басқа жолмен іздеуге болады.

Байланыстырушы қажетті ортақ кітапханаларды табу үшін келесі іздеу жолдарын пайдаланады.

1.

-rpath-link опцияларымен анықталған кез-келген каталогтар.

2.

-rpath опциялары арқылы анықталған кез келген анықтамалар. -rpath және -rpath-link арасындағы айырмашылық -rpath параметрлері арқылы анықталған каталогтар орындаушыда қамтылған және орындалу уақытында пайдаланылған болса, -rpath-link параметрі байланыс уақытында ғана тиімді. Бұл тек жергілікті сілтеме үшін.

3.

ELF жүйесінде, -ppath және «rpath-link» параметрлері пайдаланылмаса, «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 файлы бар болса, сол файлдағы анықтамалар тізімі бар.

Қажетті ортақ кітапхана табылмаса, сілтемесі ескерту жасайды және сілтемемен жалғастырады.

- деді ол

-Bearareable

Ортақ кітапхана жасау. Қазіргі уақытта ELF, XCOFF және SunOS платформаларында ғана қолдау бар. SunOS-де сілтеме автоматты түрде ортақ кітапхананы жасайды, егер -e параметрі пайдаланылмаса және сілтемеде белгісіз белгілер болса.

- жалпыға ортақ

Бұл опция ld- ті тиісті шығарылымдар бөлімдеріне орналастырған кезде жалпы белгілерді мөлшерге қарай сұрыптайды. Алдымен барлық байттық рәміздерден, содан кейін барлық екі байтты, содан кейін барлық төрт байтты, содан кейін барлық қалғандарын келтіріңіз. Бұл таңбалар арасындағы аралықты шектеуді болдырмау үшін.

--split-by-file [ size ]

Ұқсас --split-by-reloc сияқты, бірақ өлшемге жеткен кезде әрбір кіріс файлы үшін жаңа шығыс бөлігін жасайды. егер ол берілмесе, өлшем өлшемі 1 мәніне дейін.

--split-by-reloc [ count ]

Файлдағы жалғыз шығыс бөлімі сандарды ауыстырудан көп болмайтындай етіп, шығару файлындағы қосымша бөлімдерді жасауға тырысады. Бұл COFF нысан файл пішімі бар нақты уақыттық ядраларға жүктеу үшін үлкен көшіруге болатын файлдарды генерациялау кезінде пайдалы; өйткені COFFcannot бір бөлікте 65535 астам қоныс аударуды білдіреді. Бұл ерікті бөлімдерді қолдамайтын нысан файл пішімдерімен жұмыс істемейтінін ескеріңіз. Байланыстырушы жеке қайта енгізу бөлімдерін қайта бөлу үшін бөлмейді, сондықтан бір кіріс бөлімі қайта санаудан көп болса, бір шығыс бөлімі көптеген көшіруді қамтиды. әдепкі мәндерді 32768 мәніне теңестіреді.

- статистика

Байланыстырушы құралдың жұмысы туралы статистиканы есептеу және көрсету, мысалы, орындалу уақыты мен жадты пайдалану.

- дәстүрлі-формат

Кейбір мақсаттар үшін, ld- ның шығу кейбір жолдармен кейбір қолданыстағы сілтемешінің шығуынан әр түрлі болады. Бұл коммутатор дәстүрлі форматты пайдалану үшін ld сұрайды.

Мысалы, SunOS, ld символдар жолының кестесінде қайталанатын жазбаларды біріктіреді. Бұл отладки туралы ақпаратты толық көлемде шығару файлының өлшемін 30 пайызға дейін азайтуы мүмкін. Өкінішке орай, SunOS «dbx» бағдарламасы бағдарламаны оқи алмайды («gdb» проблемасы жоқ). - дәстүрлі пішім қосқышы қайталанатын жазбаларды біріктірмеуді білдіреді.

--Секция-бастау бөлімінің атауы = орг

Органың берген абсолюттік мекенжайындағы шығыс файлындағы бөлімді табыңыз. Пәрмен жолында бірнеше бөлімдерді табу үшін осы опцияны қанша рет пайдалансаңыз болады. org он алтылық саннан тұруы керек; басқа байланыстырушылармен сыйысымдылық үшін әдетте он алтылық мәндермен байланыстырылған жетекші 0x қалдыруға болады. Ескерту: бөлімнің атауы , теңдік белгісі (`` = '') және орг арасындағы бос кеңістік болмауы керек.

-Tbss org

-Тата орг

-Тетекст орг

Бастапқы мекен-жайы ретінде --- оралу үшін - «bss», «data» немесе шығу файлының «мәтін» сегменті ретінде пайдаланыңыз. org он алтылық саннан тұруы керек; басқа байланыстырушылармен сыйысымдылық үшін әдетте он алтылық мәндермен байланыстырылған жетекші 0x қалдыруға болады.

- dll-verbose

- ұсақ

Ld нұсқасының нөмірін көрсетіңіз және қолдау көрсететін сілтеме эмуляцияларын тізімдеңіз. Кіріс файлдарын көрсетуге және ашуға болмайды. Сілтеме қолданатын байланыстырушы сценарийді көрсету.

--version-script = version-scriptfile

Сілтемедегі нұсқа сценарийінің атауын көрсетіңіз. Бұл, әдетте, құрылатын кітапхана үшін нұсқалық иерархия туралы қосымша ақпаратты көрсету үшін ортақ кітапханаларды жасау кезінде пайдаланылады. Бұл опция ортақ кітапханаларды қолдайтын ELF платформаларында ғана маңызды.

- әңгімелесу

Жалпы символды басқа жалпы символмен немесе символды анықтаумен біріктіргенде ескертіңіз. Unix сілтемелері бұл сәл тәжірибе жасауға мүмкіндік береді, бірақ кейбір басқа операциялық жүйелерде байланыстырушылар жоқ. Бұл параметр жаһандық таңбаларды біріктірудің ықтимал проблемаларын табуға мүмкіндік береді. Өкінішке орай, кейбір C кітапханалары бұл тәжірибені пайдаланады, сондықтан сіз кітапханаларда, сондай-ақ бағдарламаларда символдар туралы ескертулер аласыз.

Әлемдік рәміздердің үш түрі бар, олар мысалдарда келтірілген:

int i = 1;

Шығарылған файлдың инициализацияланған деректер бөлімінде анықталатын анықтама.

extern int i;

Бос орын бермейтін белгісіз анықтама. Кез келген айнымалы үшін анықтама немесе жалпы символ болуы керек.

int i;

Жалпы символ. Егер айнымалы үшін бір ғана (бір немесе бірнеше) жалпы белгілер болса, ол шығу файлының жаңартылмаған деректер аймағында жүреді. Сілтеме бірдей айнымалы мәндегі бірыңғай таңбаға бірнеше ортақ таңбаларды біріктіреді. Егер олар әр түрлі мөлшерде болса, ол ең үлкен өлшемді таңдайды. Бір айнымалы мәннің анықтамасы болса, сілтеме беруші ортақ символды декларацияға айналдырады.

- « жалпыға ортақ» опция бес түрлі ескерту түрлерін шығара алады. Әрбір ескерту жұп жолдардан тұрады: біріншісі ғана кездесетін символды сипаттайды, екіншісі сол атпен кездесетін алдыңғы таңбаны сипаттайды. Екі таңбаның біреуі немесе екеуі де ортақ белгі болады.

1.

Жалпы символды анықтамаға айналдырады, себебі символға анықтама бар.

(
): ескерту: <символы> 'ортақ анықтамасы <файл> (<бөлімі>) бойынша алдын ала анықталған: ескерту: анықталған жерде

2.

Символға ортақ таңбаны аудару, өйткені кейінгі белгі анықталады. Бұл бұрынғы жағдаймен бірдей, тек таңбалар басқа тәртіпте кездеседі.

(
): ескерту: <символды анықтау> <файл> (<бөлім>) анықтау: ескерту: жалпы

3.

Жалпы символды бұрынғы бірдей өлшемді ортақ символмен біріктіру.

(
): ескерту: бірнеше символы ` ' (
): ескерту: бұрынғы жалпы жерде

4.

Жалпы символды бұрынғы үлкен жалпы символмен біріктіру.

(
): ескерту: кеңінен таралған 'әдеттегі <файл> (<бөлім>) арқылы алдын-ала ескертілді: ескерту:

5.

Жалпы символды бұрынғы жалпы символмен біріктіру. Бұл бұрынғы жағдаймен бірдей, тек таңбалар басқа тәртіпте кездеседі.

(
): ескерту: жалпыға ортақ <символы> 'аз жалпы (
): ескерту:

- конструкторлар

Кез-келген ғаламдық конструктор пайдаланылғанын ескертіңіз. Бұл бірнеше нысан файл пішімдеріне ғана пайдалы. COFF немесе ELF сияқты пішімдер үшін байланыстырушы жаһандық құрылысшыларды пайдалануды анықтай алмайды.

--warn-multiple-gp

Шығару файлында бірнеше жаһандық көрсеткіш мәндері қажет болғанын ескертіңіз . Бұл Альфа сияқты белгілі бір процессорлар үшін ғана маңызды. Атап айтқанда, кейбір процессорлар арнайы бөлімде үлкен мәнді тұрақты мәндерді қояды. Арнайы тіркелім (жаһандық көрсеткіш) осы секцияның ортасына негізделеді, сондықтан тұрақтылар базалық тіркелімнің салыстырмалы адресация режимі арқылы тиімді жүктелуі мүмкін. Себебі, базалық тіркелімде салыстырмалы режимде есеп айырысу тіркелген және салыстырмалы түрде аз (мысалы, 16 бит), бұл тұрақты пулдың ең үлкен өлшемін шектейді. Осылайша, үлкен бағдарламаларда барлық мүмкін тұрақты мәндермен айналысу үшін бірнеше жаһандық көрсеткіш мәндерін пайдалану қажет. Бұл нұсқа оқиға орын алған сайын ескертуді шығарады.

- бір рет хабарлау

Әрбір модульге бір рет емес, әр белгісіз белгі үшін бір рет ескертіңіз.

- секундомер-туралау

Шығару бөлігінің мекенжайы туралануына байланысты өзгеретінін ескертіңіз. Әдетте, туралау кіріс бөлімі арқылы орнатылады. Мекен-жайы тек айқын болмаған жағдайда ғана өзгертіледі; яғни «СЕКЦИЯ» пәрменінде бөлім үшін бастапқы мекен-жайы көрсетілмесе.

- үй-мұрағат

--whole-archive опциясынан кейін пәрмен жолында айтылған әрбір мұрағат үшін әрбір объектілік файлды қажетті файлдарға арналған архивтерді іздеуге емес, сілтемедегі мұрағатқа қосыңыз. Бұл, әдетте, архивтік файлды ортақ кітапханаға айналдыру үшін пайдаланылады, нәтижесінде әрбір объекті ортақ кітапханаға қосылуға мәжбүр етеді. Бұл опция бірнеше рет пайдаланылуы мүмкін.

Бұл опцияны gcc ішінен пайдаланғанда екі ескертпе: Біріншіден, gcc осы параметр туралы білмейді, сондықтан сіз -Wl, -whole-archive- ды пайдалануыңыз керек . Екіншіден, мұрағаттар тізімінен кейін -Wl, -no-whole-archive- ді пайдалануды ұмытпаңыз, себебі gcc сілтемеге архивтердің өздерінің тізімін қосады және сіз бұл жалаушаға әсер етпеуіңіз мүмкін.

- таңбаның таңбасы

Таңба үшін қабықша функциясын қолданыңыз. Белгіге белгісіз сілтеме «__ wrap_symbol» деп шешіледі. «__real_symbol» белгісіне белгісіз сілтеме таңбаға шешіледі.

Бұл жүйе функциясы үшін қабықпен қамтамасыз ету үшін пайдаланылуы мүмкін. Қаптама функциясы «__wrap_symbol» деп аталуы керек. Егер ол жүйелік функцияны шақырғысы келсе, ол «__ real_symbol» деп аталуы керек.

Міне, төмендегі мысал:

void * __wrap_malloc (int c) {printf («malloc% ld \ n деп аталатын», c); қайтару __real_malloc (c); }

Егер сіз басқа кодты осы файлмен - wrap malloc арқылы байланыстырсаңыз , онда «malloc» деген барлық қоңыраулар «__wrap_malloc» функциясын шақырады. «__wrap_malloc» ішіндегі «__real_malloc» шақыру нақты «malloc» функциясын шақырады.

Сіз сондай-ақ «__real_malloc» функциясын беруіңіз мүмкін, сондықтан --wrap параметрі жоқ сілтемелер сәтті болады. Егер мұны жасасаңыз, «__wrap_malloc» деген файлдағы «__ real_malloc» анықтамасын қоюға болмайды; Егер сіз жасасаңыз, ассембер қоңырауды «malloc» -қа орап алмас бұрын қоңырауды шешуі мүмкін.

--enable-new-dtags

--Disable-new-dtags

Бұл сілтеме ELF-те жаңа динамикалық тегтерді жасай алады. Бірақ ескі ELF жүйесі оларды түсінбеуі мүмкін. Егер сіз --enable-new-dtags көрсетсеңіз , динамикалық тегтер қажет болғанда жасалады. Егер --disable-new-dtags көрсетсеңіз , жаңа динамикалық тегтер жасалмайды. Әдепкі бойынша, жаңа динамикалық тегтер жасалмайды. Бұл опциялар тек ELF жүйелерінде қол жетімді екенін ескеріңіз.

I386 PE сілтемесі әдеттегі орындалатын файлдың орнына шығаруды динамикалық түрде байланыстырылған кітапхана (DLL) етіп тудыратын -shared опциясын қолдайды. Осы опцияны пайдаланған кезде «* .dll» шығысын атаңыз. Сонымен қатар, сілтемесі объектілік файл сияқты сілтеме пәрмен жолында көрсетілуі мүмкін «* .def» стандартты файлдарды толығымен қолдайды (шын мәнінде, ол мұрағаттардан олардың таңбаларын экспорттайды, қалыпты объектілік файл сияқты).

Барлық мақсаттарға ортақ параметрлерге қоса, i386 PE сілтемесі i386 PE мақсатына тән қосымша пәрмен жолы параметрлерін қолдайды. Мәндерді қабылдайтын опциялар олардың мәндерінен бос орын немесе теңдік белгісімен бөлінуі мүмкін.

--Add-stdcall-alias

Егер берілген болса, stdcall суффиксі бар символдар (@ nn ), сондай-ақ, жұрнақ алынып тасталады.

- файлдың негізі

Файлды dlltool көмегімен DLL жасау үшін қажетті барлық көшірудің негізгі мекенжайларын сақтауға болатын файлдың атауы ретінде пайдаланыңыз.

- dll

Тұрақты орындалатын файлдың орнына DLL жасаңыз. Сондай-ақ, « -DARF » файлында «кітапханалық» дегенді қолдануға немесе көрсетуге болады.

- мүмкін-stdcall-fixup

--Disable-stdcall-fixup

Егер сілтеме ол шеше алмайтын символды тапса, ол символдың атауының (cdecl vs stdcall) форматында ғана ерекшеленетін анықталған нышанды іздеу арқылы `` анық емес сілтеме '' жасауға тырысады және бұл таңбаны байланыстыру арқылы шешеді матчқа. Мысалы, «_foo» белгісіз белгісі «_foo @ 12» функциясымен байланыстырылуы мүмкін немесе «_bar @ 16» белгісіз белгісі «_bar» функциясымен байланыстырылуы мүмкін. Байланыстырушы мұны істегенде, ол ескертуді басып шығарады, себебі әдетте байланыстыру мүмкін болмады, бірақ кейде үшінші тарап файлдарынан алынған кітапханаларды импорттау пайдалы болуы мүмкін. Егер сіз --enable-stdcall-fixup параметрін көрсеңіз, бұл мүмкіндік толығымен қосылып, ескертулер басылмайды. Егер --disable-stdcall-fixup анықтасаңыз , бұл мүмкіндік ажыратылған және мұндай сәйкессіздік қателер деп қарастырылады.

--экспорт-барлық символдар

Егер берілген болса, DLL файлын жасау үшін пайдаланылатын нысандардағы барлық жаһандық таңбалар DLL арқылы экспортталады. Экспортталған таңбалар болмаса, бұл әдепкі болып табылады. Таңбалар DEF файлдары арқылы нақты экспортталса немесе функционалдық атрибуттар арқылы тікелей экспортталса, әдепкі бұл опция берілгенше ештеңені экспорттамайды. «DllMain @ 12», «DllEntryPoint @ 0», «DllMainCRTStartup @ 12» және «impure_ptr» таңбалары автоматты түрде экспортталмайтынын ескеріңіз. Сондай-ақ, басқа DLL-лерден импортталатын таңбалар қайта экспортталмайды және DLL-дің «_head_» бастап басталатын немесе «_iname» дегенмен аяқталатын ішкі орналасуын көрсететін таңбалар болмайды. Бұдан басқа, «libgcc», «libstd ++», «libmingw32» немесе «crtX.o» дан ешқандай таңба экспортталмайды. C ++ DLL-леріне көмектесу үшін аттары «__rtti_» немесе «__builtin_» бастап бастайтын таңбалар экспортталмайды. Ақырында, экспортталмаған cygwin-жеке рәміздердің кең тізбесі бар (бұл cygwin нысаналары үшін DLL-ді құру кезінде қолданылады).

Бұл cygwin-excludes: «_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 »және« қоршаған орта ».

- таңбалар символы , белгісі , ...

Автоматты түрде экспортталмауы керек таңбалар тізімін көрсетеді. Таңба атаулары үтірлер немесе қос нүктелер арқылы бөлінуі мүмкін.

--Қосымша , lib , lib , ...

Таңбалар автоматты түрде экспортталмауы керек мұрағат кітапханаларының тізімін анықтайды. Кітапхана атаулары үтірлер немесе қос нүктелер арқылы бөлінуі мүмкін. «--exclude-libs ALL» параметрін автоматты түрде экспорттаудың барлық мұрағаттық кітапханаларында таңбалар жоқ. Бұл опцияға қарамастан, .def файлында анық көрсетілген рәміздер әлі де экспортталады.

- файлды теңшеу

Файлды туралауды көрсетіңіз. Файлдағы бөлімдер әрқашан осы санның көбі болып табылатын файлдардан тыс болады. Бұл 512 мәніне ауытқиды.

- резервтік қор

- резервтік қор , міндеттеме

Осы бағдарлама үшін жинақ ретінде пайдаланылатын резервке қоюға (және міндетті түрде орындауға) арналған жад көлемін көрсетіңіз. Әдепкі бойынша, 1Mb сақталған, 4K орындалды.

- мәні -базалық мәні

Мәні сіздің бағдарламаңыздың немесе dll бағдарламасының негізгі мекенжайы ретінде пайдаланыңыз. Бұл бағдарлама немесе dll жүктелген кезде пайдаланылатын ең төменгі жад орны. Көшіру және DLL-лердің өнімділігін жоғарылату қажеттілігін төмендету үшін әрқайсысы бірегей негізгі мекенжайға ие болуы керек және кез-келген басқа DLL-тің қабаттаспауы керек. Әдепкі бойынша орындалатын файлдар үшін 0x400000 және DLL үшін 0x10000000 болады.

- килл-ат

Егер берілген болса, stdcall жұрнақтары (@ nn ) экспортталғанға дейін таңбалардан алынып тасталады.

--Major-image-нұсқасының мәні

«Сурет нұсқасының» негізгі санын анықтайды. Әдепкі бойынша 1.

--Major-os-нұсқасының мәні

`` Os нұсқасының 'негізгі санын анықтайды. Әдепкі бойынша 4-ке дейін.

--mjor-subsystem-нұсқасының мәні

`` Шағын жүйенің нұсқасының 'негізгі санын анықтайды. Әдепкі бойынша 4-ке дейін.

--minor-image-нұсқасының мәні

«Сурет нұсқасының» кіші санын орнатады. 0-ге дейін әдепкі мәндер.

--minor-os-нұсқасының мәні

`` Os нұсқасының 'кіші нөмірін орнатады. 0-ге дейін әдепкі мәндер.

--minor-subsystem-нұсқасының мәні

`` Шағын жүйенің нұсқасы 'кіші емес нөмірін орнатады. 0-ге дейін әдепкі мәндер.

--output-def файлы

Байланыстырушы құрастырушы жасайтын DLL файлына сәйкес келетін DEF файлын қамтитын файл файлын жасайды. Бұл DEF файлы («* .def» деп аталуы тиіс) «dlltool» импорттау кітапханасын жасау үшін пайдаланылуы мүмкін немесе ол автоматты түрде немесе жанама экспортталған таңбалар сілтемесі ретінде пайдаланылуы мүмкін.

--prolib- файл

Байланыстырушы файлды құрастырушы жасайтын DLL-ке сәйкес келетін импорттау либі бар файл файлын жасайды. Бұл импорттаушы lib («* .dll.a» немесе «* .a» деп аталатын клиентті клиенттерді генерацияланған DLL-ге байланыстыру үшін қолданылуы мүмкін, бұл мінез-құлықтан бөлек «dlltool» импорттау кітапханасын құру қадамын өткізуге мүмкіндік береді.

--enable-auto-image-base

«--image-base» аргументі арқылы көрсетілмесе, DLL файлдар үшін сурет негізін автоматты түрде таңдаңыз. Әрбір DLL үшін бірегей сурет негіздерін жасау үшін, dllname атынан жасалған хэштерді пайдалану арқылы, бағдарламаны орындауды кешіктіре алатын жад ішіндегі қақтығыстар мен қоныс аударулар аулақ болады.

--Disable-auto-image-base

Бірегей сурет негізін автоматты түрде жасамаңыз. Егер пайдаланушыда көрсетілген сурет базасы болмаса («-имаж-база»), онда платформа әдепкі параметрін пайдаланыңыз.

- dll-іздеу-префикс жолы

Импорттау кітапханасы жоқ DLL-ге динамикалық түрде байланысқанда, «lib .dll» параметрінде « .dll» дегенді іздеңіз. Бұл мінез-құлық әр түрлі `` subplatforms 'үшін жасалған DLL-лер арасындағы оңай айырмашылықты береді: native, cygwin, uwin, pw және т.б. Мысалы, cygwin DLL әдетте «--dll-search-prefix = cyg» пайдаланады.

--enable-auto-import

DLL-дің DATA импорты үшін «_symbol» -қа «__imp__symbol» -қа күрделі сілтеме жасау және импорттау кітапханаларын осы DATAexports-лармен құрастыру кезінде қажетті thunking белгілерін жасаңыз. Бұл, әдетте, «жұмыс істейді» --- бірақ кейде сіз бұл хабарды көре аласыз:

«айнымалы» 'импортталмайды. Толығырақ ақпарат алу үшін ld-ның «--enable-auto-import» құжаттамасын оқып шығыңыз. «

Бұл хабарлама, кейбір (sub) өрнегі, екі тұрақты мәндердің (Win32 импорттау кестелері тек біреуіне мүмкіндік береді) қорытындысында адреске қол жеткізген кезде орын алады. Бұл жағдай орын алуы мүмкін жағдайларда DLL-ден импортталатын құрылымдық айнымалы мәндердің мүше жолдарына кіруге, сонымен қатар тұрақты индексті DLL-ден импортталған жиым айнымалы мәніне қолдануға болады. Кез келген көпмәндік айнымалылар (массивтер, құрылымдар, ұзақ уақыт және т.б.) осы қателік жағдайын тудыруы мүмкін. Дегенмен, қате жіберілген экспортталған айнымалы деректердің нақты түріне қарамастан ld әрқашан оны анықтайды, ескертуді шығарады және шығу.

Берілген айнымалы деректер түріне қарамастан бұл қиындықты шешудің бірнеше жолы бар:

Мұның біреуі - қолдануға болатын-runtime-pseudo-reloc қосқышын пайдалану. Бұл сіздің клиент кодыңыздағы сілтемелерді орындау ортасы үшін реттеуді қалдырады, сондықтан бұл әдіс тек қана орындалу ортасының бұл мүмкіндікті қолдаған кезде ғана жұмыс істейді.

Екінші шешім - «тұрақты» біреуін айнымалы --- мәжбүрлеу, яғни компиляция уақытында белгісіз және оңтайландырылмайды. Массивтер үшін екі мүмкіндік бар: а) indexee индексін (массивтің мекен-жайы) айнымалыны жасаңыз, немесе b) 'тұрақты' индексін айнымалыны жасаңыз. Осылайша:

extern типі extern_array []; extern_array [1] -> {ұшпа түрі * t = extern_array; t [1]}

немесе

extern типі extern_array []; extern_array [1] -> {ұшқыр int t = 1; extern_array [t]}

Құрылымдар үшін (және көптеген басқа көп түрдегі деректер түрлеріне) жалғыз опция құрылымның өзі (немесе ұзын немесе ұзақ ...) айнымалыны жасау болып табылады:

extern құрылымы extern_struct; extern_struct.field -> {ұшпа struct s * t = & extern_struct; t-> өрісі}

немесе

extern long long extern_ll; extern_ll -> {ұшқыр ұзақ ұзақ * local_ll = & extern_ll; * local_ll}

Бұл қиындықпен күресудің үшінші тәсілі - «авто-импорт» бұзушылық символы үшін «__declspec (dllimport)» белгісінен бас тарту. Дегенмен, іс жүзінде, DLL құрастырып жатқаныңызды, клиент кодын DLL-ге байланыстыратыныңызды немесе жай ғана статикалық кітапханаға байланыстыруды / байланыстыруды көрсететінін көрсету үшін компиляция уақытын # define анықтайды. «Тікелей адрестің тұрақты ауытқуы» проблемасын шешудің әртүрлі әдістерінің арасында таңдау жасағанда, нақты әлемді пайдалануды қарастырған жөн:

Түпнұсқа:

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

1-шешім:

- foo.h extern int arr []; - foo.c #include «foo.h» void main (int argc, char ** argv) {/ * Бұл шешімді win32 және cygwin; «оңтайланбаңыз» * / ұшпа int * parr = arr; printf («% d \ n», parr [1]); }

2-шешім:

- foo.h / * Ескерту: автоэкспорттау болжамдалады (__declspec (dllexport)) * / #if (анықталған (_WIN32) || анықталған (__ CYGWIN__)) && \! (анықталған (FOO_BUILD_DLL) || анықталды (FOO_STATIC )) #define FOO_IMPORT __declspec (dllimport) #else #define FOO_IMPORT # қолданыстағы extern FOO_IMPORT int arr []; - foo.c #include «foo.h» void main (int argc, char ** argv) {printf («% d \ n», arr [1]); }

Бұл мәселені болдырмаудың төртінші жолы - кітапханаңызды айнымалы айнымалы мәндер (мысалы, set_foo () және get_foo () accessor функциялары) үшін деректер интерфейсі емес, функционалдық интерфейсті пайдалану үшін қайта кодтау.

--Disable-auto-import

DLL файлдарынан DATAimports үшін «_symbol» дегенді «__imp__symbol» -қа дәлелдеуге тырыспаңыз.

- мүмкін-runtime-pseudo-reloc

Егер сіздің кодыңызда --enable-auto-import бөлімінде сипатталған өрнектер бар болса, яғни нөлден тыс офсетпен DLL-ден DATAимпорттамаса, бұл қосқыш сілтемелерді реттеу үшін орындалу ортасы арқылы қолдануға болатын 'runtime pseudo relocations' векторын жасайды клиент кодының осындай деректеріне.

--Disable-runtime-pseudo-reloc

DLL-дан нөлден тыс оффтерді DATA импорттау үшін жалған көшіруді жасамаңыз. Бұл әдепкі болып табылады.

--enable-extra-pe-debug

Автоматты импорттау символы thunking қатысты қосымша отладки туралы ақпаратты көрсету.

--Секция-тігу

Бөлімді туралауды орнатады. Жадтағы бөліктер әрқашан осы сандардың көбісі болатын мекенжайлардан басталады. Әдепкі мәні 0x1000.

- резервтік қор

- резервтік қор , міндеттеме

Осы бағдарлама үшін жинақ ретінде пайдаланылатын резервке қоюға (және міндетті түрде орындауға) арналған жад көлемін көрсетіңіз. Әдепкі бойынша 2Мб сақталған, 4K орындалды.

- Шағын жүйе

- Шағын жүйе : ол ірі

- Шағын жүйе : ол ірі . кішігірім

Бағдарлама орындалатын ішкі жүйені анықтайды. Құқықтық құндылықтар «туған», «терезелер», «консоль» және «посикс» болып табылады. Сіз сондай-ақ шағын жүйенің нұсқасын да орнатасыз.

Маңызды: Жеке компьютерде пәрменді қалай пайдалану керектігін көру үшін man ( % man ) пәрменін пайдаланыңыз.