Linux / Unix Command: Id

NAME

ld - LD istifadə edərək , GNU linker

SYNOPSIS

ld [ variantları ] objfile ...

TƏSVİRİ

ld bir sıra obyekt və arxiv fayllarını birləşdirir, məlumatlarını köçürür və simvol istinadları bağlayır. Bir proqramın tərtib edilməsində adətən son addım ld .

ld , Linker Command Language fayllarını, AT & T'nin Link Redaktor Komutanlığı sözdiziminin üstünde yazılmış və bağlama prosesinin açıq və ümumi nəzarətini təmin etmək üçün qəbul edir.

Bu adam səhifəsində komanda dili təsvir edilmir; komanda dilində və GNU linkerinin digər aspektləri haqqında ətraflı məlumat üçün "info" ld girişinə və ya manual ld: GNU linkerinə baxın.

Ld bu versiyası obyekt faylları fəaliyyət üçün ümumi məqsəd BFD kitabxana istifadə edir. Bu ld bir çox müxtəlif formatda obyekt fayllarını oxumaq, birləşdirmək və yazmaq imkanı verir - məsələn, COFF və ya "a.out". Müxtəlif formatlar hər hansı mövcud obyekt faylını istehsal etmək üçün birlikdə birləşdirilə bilər.

Onun rahatlığından başqa, GNU linker diaqnostik məlumatların təqdim edilməsində digər linklərə nisbətən daha faydalıdır. Bir çox linker səhvlə qarşılaşdıqdan sonra icradan imtina edir; mümkün olduğunda, ld , digər səhvləri (və ya bəzi hallarda səhvdən asılı olaraq bir çıxış faylını almaq üçün) müəyyən etməyə imkan verərək, icra etməyə davam edir.

GNU bağlayıcısı ld , müxtəlif vəziyyətləri əhatə etmək və mümkün olan digər əlaqələndiricilərlə mümkün qədər uyğun olmağı nəzərdə tutur. Nəticədə, onun davranışını nəzarət etmək üçün bir çox seçim var.

Seçimlər

Bağlayıcısı bir sıra komanda-line variantlarını dəstəkləyir, lakin faktiki praktikada bir neçəsi hər hansı bir kontekstdə istifadə olunur. Məsələn, ld-nin tez-tez istifadə edilməsi standart Unix obyekt fayllarını standart, dəstəklənən Unix sisteminə birləşdirməkdir . Belə bir sistemdə "hello.o" faylını bağlamaq üçün:

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

Bu ld "/lib/crt0.o" faylını "hello.o" və standart axtarış dizələrindən gələn kitabxana "libc.a" ilə birləşdirmək nəticəsində nəticə çıxdığına görə bir fayl çıxarmaq deməkdir. (Aşağıdakı -l variantının müzakirəsinə baxın.)

Ld komut satırı variantlarından bəziləri komanda satırında hər hansı bir yerdə göstərilə bilər. Lakin, -l və ya -T kimi fayllara istinad edən variantlar faylın obyekt faylları və digər fayl variantlarına nisbətən komanda xəttində göründüyü nöqtədə oxumağa səbəb olur. Faylı olmayan variantları fərqli bir dəlil ilə təkrarlamadan ya da bu seçimin əvvəlki hadisələrini (komanda xəttinin solunda olanları) əvəz edəcəkdir. Aşağıdakı təsvirlərdə birdən çox dəfə mənalı şəkildə göstərilə bilən variantlar qeyd olunur.

Qeyri-variant dəlilləri birlikdə əlaqəli olan obyekt faylları və arxivlərdir. Komanda-line variantları ilə əlaqə saxlaya bilər, əvvəllər və ya birləşə bilər, ancaq bir obyekt faylı arqumenti bir seçim və onun arqumenti arasında yerləşdirilə bilməz.

Adətən linker ən azı bir obyekt faylı ilə çağırılır, lakin -l , -R və skript komut dilini istifadə edərək, ikili giriş fayllarının digər formalarını göstərə bilərsiniz. Heç bir ikili giriş faylları göstərilmirsə, linker heç bir çıxış vermir və mesajı heç bir giriş faylları ilə əlaqələndirmir .

Bağlayıcının bir obyekt faylı formatını tanımaması halında, bir linker skripti olduğunu varsayar. Bu şəkildə göstərilən bir skript link üçün istifadə olunan əsas linker skriptini (ya da default linker skriptini və ya -T istifadə edərək göstərilən) artırır. Bu xüsusiyyət linkerin bir obyekt və ya arxiv kimi görünən bir faylla əlaqə yaratmasına imkan verir, amma həqiqətən sadəcə bəzi sembol dəyərlərini müəyyən edir və ya digər obyektlərin yüklənməsi üçün "INPUT" və ya "GROUP" istifadə edir. Qeyd edək ki, bu şəkildə bir skript yazmaq yalnız əsas linker skriptini artırır; default linker scriptini tamamilə əvəz etmək üçün -T seçimini istifadə edin.

Adları tək bir məktub olan variantlar üçün, seçim dəlilləri ya boşluq arasına müdaxilə etmədən seçim məktubunu izləməlidir və ya tələb olunan variantdan dərhal sonra ayrıca arqumentlər olaraq verilməlidir.

Adları birdən çox məktub olan variantlar üçün ya bir və ya ikisi bir seçim adından əvvəl ola bilər; məsələn, simvolsimvolu bərabərdir. Qeyd - bu qayda üçün bir istisna var. Bir kiçik halda 'o' ilə başlayan birdən çox məktub variantları yalnız iki tiredən başlana bilər. Bu, -o seçimi ilə qarışıqlığı azaltmaqdır. Beləliklə, məsələn, -miqqiqi çıxış faylının adını sehrli edir - amaziq çıxışda NMAGIC bayrağını təyin edir.

Çoxsaylı məktub variantlarına dair arqumentlər ya bərabər işarəsi ilə seçilən addan ayrılmalı və ya tələb olunan variantdan dərhal sonra ayrıca arqumentlər kimi verilmiş olmalıdır. Məsələn, - simvolu foo-trace-symbol = foo bərabərdir. Çoxsaylı məktublar adlarının unikal qısaltmaları qəbul edilir.

Qeyd edək ki, bağlayıcı dolayı yolla, bir kompilyator sürücüsü (məsələn, gcc ) vasitəsi ilə çağırılırsa, bütün bağlayıcı komut satırı variantları -Wl, (və ya hər hansı bir kompilyator sürücüsü üçün uyğun olan hər hansı) aşağıdakı kimi olmalıdır:

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

Bu, vacibdir, çünki əks halda kompilyator sürücüsü proqramı bağlayıcı seçimlərini səssizcə poza bilər, nəticədə pis bir link yaranır.

GNU bağlayıcısı tərəfindən qəbul edilən ümumi komanda xəttinin açarları:

- bir söz

Bu seçim HP / UX uyğunluğu üçün dəstəklənir. Söz arqumenti strings arxivindən , paylaşılan və ya defaultdən biri olmalıdır. -Axarif funksional -Bstatic- ə bərabərdir , digər iki açar sözlər, funksional olaraq -Binamikdir . Bu seçim hər hansı bir neçə dəfə istifadə edilə bilər.

- Bir memarlıq

- arxitektura = memarlıq

Ld -nin buraxılışında, bu seçim yalnız Intel 960 ailəsi üçün faydalıdır. Bu ld konfiqurasiyasında, arxitektura arqumenti 960 ailənin xüsusi arxitekturasını müəyyən edir, bəzi mühafizələrin təmin edilməsi və arxiv-kitabxananın axtarışı yolunun dəyişdirilməsi.

Ld-nin gələcək relizləri digər memarlıq ailələri üçün də oxşar funksiyanı dəstəkləyə bilər.

-b giriş-formatı

--format = giriş-format

ld birdən çox növ obyekt faylını dəstəkləmək üçün konfiqurasiya edilə bilər. Sizin ld bu şəkildə yapılandırılmışsa, komanda satırında bu seçimi izləyən giriş obyekti faylları üçün ikili formatı göstərmək üçün -b seçimini istifadə edə bilərsiniz. Ld alternativ obyekt formatlarını dəstəkləmək üçün konfiqurasiya olunduqda belə, ld'nin hər bir maşındakı ən çox adi formatın default giriş formatı kimi gözləməsi üçün yapılandırılmalıdır. input-format mətn simvoludur, BFD kitabxanaları tərəfindən dəstəklənən xüsusi formatın adı. ( Objdump -i ilə mövcud ikili formatları göstərə bilərsiniz.)

Faylları qeyri-adi bir ikili formatla bağlayan əgər bu seçimi istifadə edə bilərsiniz. Biçən formatları dəqiq biçimdə (müxtəlif formatda obyekt faylları bağlarkən ), -b giriş formatı daxil olmaqla hər bir obyekt faylının müəyyən bir forma daxilində köçürülməsi üçün -b istifadə edə bilərsiniz.

Varsayılan format "GNUTARGET" ətraf mühiti dəyişənindən alınır.

Siz də "TARGET" əmrini istifadə edərək, bir skriptdən giriş formatını təyin edə bilərsiniz;

-c MRI-commandfile

--mri-script = MRI-commandfile

MRİ tərəfindən istehsal edilən bağlayıcılarla uyğunluq üçün ld , GNU ld sənədlərinin MRI Compatible Script Files bölməsində təsvir olunan alternativ, məhdudlaşdırılmış komanda dilində yazılmış script fayllarını qəbul edir. MRI skript fayllarını -c ilə seçmək; Ümumi təyinatlı ld scripting dilində yazılmış linker skriptlərini işlətmək üçün -T seçimini istifadə edin. MRI-cmdfile olmadığı təqdirdə ld hər hansı bir -L variantında göstərilən kataloqlarda görünür.

-d

-DC

-dp

Bu üç variant bərabərdir; çoxlu formalar digər bağlayıcılarla uyğunluq üçün dəstəklənir. Köçürülmüş bir çıxış faylı ( -r ilə müəyyən edilmiş olsa da), ümumi simvollara yer ayırırlar. "FORCE_COMMON_ALLOCATION" skript əmri eyni effektə malikdir.

- giriş

- yerini = giriş

Proqramın başlanğıcını yerinə yetirmək üçün açıq sətir kimi girişi istifadə edin, u mənim giriş nöqtəsindən deyil. Girişin heç bir simvolu yoxdursa, linker girişə nömrə kimi ayrışmaq üçün cəhd edəcək və giriş ünvanı olaraq istifadə edir (nömrə 10 əsasda şərh ediləcəkdir; baz 16 üçün aparıcı 0x və ya aparıcı 0 8).

-E

- ixrac-dinamik

Dinamik olaraq əlaqəli yürütülebilir bir yaratdıqda, bütün simvolları dinamik simvol masasına əlavə edin. Dinamik simvol masası, iş vaxtında dinamik obyektlərdən görünən simvollar dəstidir.

Bu seçimi kullanmıyorsanız, dinamik simge tablosu normal olaraq bağlantıda göstərilən bəzi dinamik obyektin istinad etdiyi simvolları ehtiva edir.

Dinamik bir obyekti yükləmək üçün "dlopen" istifadə edirsinizsə, digər dinamik obyektlərdən deyil, proqram tərəfindən müəyyən edilmiş simvollara istinad etmək lazımdır, onda siz proqramı özü ilə əlaqələndirərkən bu seçimdən istifadə etməlisiniz.

Çıxış formatı onu dəstəkləyirsə, dinamik nişan masasına hansı simvolların əlavə edilməsini nəzarət etmək üçün versiya skriptini istifadə edə bilərsiniz. @ Ref {VERSION} kateqoriyasındakı -version-skriptin təsvirinə baxın.

-EB

Böyük endian obyektləri bağlayın. Bu, default çıxış formatına təsir göstərir.

-EL

Az endian obyektləri bağlayın. Bu, default çıxış formatına təsir göstərir.

-f

- köməkçi adı

Bir ELF paylaşılan obyekt yaratdıqda, daxili DT_AUXILIARY alanını müəyyən edilmiş adı təyin edin. Bu dinamik bağlayıcı paylaşılan obyektin simvolu masanın paylaşılan obyekt adının simvol masasında köməkçi bir filtre kimi istifadə edilməsini bildirir.

Daha sonra bir proqramı bu filtre obyektinə qarşı bağlasanız, proqramı çalıştırdığınızda dinamik bağlayıcı DT_AUXILIARY alanını görəcəksiniz. Dinamik bağlayıcı filtr obyektindən hər hansı simvolları həll edərsə, əvvəlcə paylaşılan obyekt adında bir tərifin olub olmadığını yoxlayacaq. Bir varsa, filtr obyektindəki tərifin yerinə istifadə ediləcək. Paylaşılan obyekt adının olmaması lazımdır. Beləliklə, bölüşdürülmüş obyekt adı , müəyyənləşdirilmiş funksiyaları alternativ şəkildə həyata keçirmək üçün istifadə edilə bilər, bəlkə də diskussiya üçün və ya maşının xüsusi performansına görə.

Bu seçim bir dəfədən artıq müəyyən edilə bilər. DT_AUXILIARY girişləri əmr satırında göründükləri sırada yaradılar.

-F adı

- filtr adı

Bir ELF paylaşılan obyekti yaratdıqda, daxili DT_FILTER sahəsi müəyyən edilmiş adı təyin edin. Bu, dinamik bağlayıcıya yaradılmış paylaşılan obyektin simvolu masanın paylaşılan obyekt adının simvol masasında bir filtre kimi istifadə edilməsini bildirir.

Daha sonra bir proqramı bu filtre obyektinə qarşı bağlasanız, proqramı çalıştırdığınızda dinamik bağlayıcı DT_FILTER alanını görəcəksiniz. Dinamik bağlayıcı filtr obyektinin simvolu masasına görə simvolları hər zamanki kimi həll edəcək, lakin əslində paylaşılan obyekt adında olan təriflərə bağlanacaqdır. Beləliklə, filtr obyekti obyekt adından verilən simvolların alt kümesini seçmək üçün istifadə edilə bilər.

Bəzi köhnə bağlayıcılar, həm giriş-çıxış obyekt faylları üçün obyekt fayl formatını göstərmək üçün bir tərtib alət dilində -F seçimini istifadə etdilər. GNU linker bu məqsəd üçün digər mexanizmlərdən istifadə edir: -b , --format , --format variantları, linker skriptlərindəki "TARGET" əmri və "GNUTARGET" mühit dəyişənliyi. ELF paylaşılan bir obyekt yaratmadığında GNU bağlayıcısı -F seçimini görməyəcək.

Fini adı

Bir ELF çalıştırılabilir və ya paylaşılan bir obyekt yaratdıqda, DQ_FINI funksiyasına ünvanlayaraq, çalıştırılabilir və ya paylaşılan obyekt boşaldıldığında NAME-ə zəng edin. Varsayılan olaraq, linker "_fini" funksiyasını zəng etmək üçün istifadə edir.

-g

Yoksaydınız. Digər vasitələrlə uyğunluq təmin edilir.

-G dəyəri

--gpsize = dəyər

GP reyestrini ölçüsü ilə optimallaşdırılacaq obyektlərin maksimum ölçüsünü təyin edin. Bu, böyük və kiçik obyektlərin müxtəlif hissələrə qoyulmasını dəstəkləyən MIPS ECOFF kimi obyekt fayl formatları üçün yalnız mənalıdır. Bu digər obyekt fayl formatları üçün göz ardı edilir.

- adı

-soname = ad

Bir ELF paylaşılan obyekti yaratdıqda, daxili DT_SONAME sahəsini təyin edilmiş adı təyin edin. Bir yürütülebilir bir DT_SONAME sahəsi olan paylaşılan bir obyekt ilə əlaqəli olduqda, yürütülebilir çalıştırıldığında, dinamik bağlayıcı, linker üçün verilən faylın adını istifadə etmək yerine DT_SONAME sahəsi tərəfindən göstərilən paylaşılan obyekti yüklemeye çalışacaq.

-i

Artımlı bir keçid həyata keçirin (eyni -r seçimi ilə).

- adı

Bir ELF yürütülebilir və ya paylaşılan bir obyekt yaratdıqda, DQ_INIT funksiyasına ünvanlayaraq çalıştırılabilir və ya paylaşılmış obyekt yükləndikdə NAME-ə zəng edin. Varsayılan olaraq, linker zəng etmək üçün funksiya kimi "_init" istifadə edir.

-l arxivi

- kitabxana = arxiv

Arxiv fayl arxivini əlaqələndirmək üçün faylların siyahısına əlavə edin. Bu seçim hər hansı bir neçə dəfə istifadə edilə bilər. ld , hər bir arxiv üçün "libarchive.a" nın baş verməsi üçün onun yol siyahısını axtaracaqdır.

Paylaşılan kitabxanaları dəstəkləyən sistemlərdə, ld ayrıca ".a" dan başqa uzantıları olan kitabxanalar üçün axtarış edə bilər. Xüsusən, ELF və SunOS sistemlərində, ld , ".a" nın bir uzantısı olan birini axtarmadan əvvəl ".so" bir uzantısı olan bir kitabxana üçün bir qovluq axtaracaq. Konvensiya ilə ".so" uzadılması paylaşılan kitabxananı göstərir.

Bağlayıcı bir arxivə yalnız bir dəfə, komanda xəttində göstərildiyi yerdə axtarış edəcəkdir. Arxiv, komanda xəttindəki arxivdən əvvəl ortaya çıxan bir obyektdə təsvir olunmayan bir simvolu müəyyənləşdirirsə, linker arxivdən müvafiq faylları ehtiva edir. Ancaq daha sonra komanda satırında görünən bir obyektdə müəyyənləşdirilməyən bir simvolu bağlayıcının arxivi təkrar axtarışına səbəb olmaz.

Baxın - ( bağlayıcıyı axtarış arxivlərinə bir neçə dəfə məcbur etmək üçün bir seçim yolu.

Komanda xəttində eyni arxivi bir neçə dəfə siyahıya sala bilərsiniz.

Bu tip arşiv axtarışları Unix bağlayıcıları üçün standartdır. Lakin, ld onAIX istifadə edirsinizsə, bu AIX bağlayıcısının davranışından fərqli olduğunu unutmayın.

-L axtarış

- dilli-yol = axtarış

Ld arxiv kitabxanaları və ld nəzarət skriptlərini axtaracaq yolların siyahısına yol axtarışını əlavə edin. Bu seçimi hər hansı bir neçə dəfə istifadə edə bilərsiniz. Dizinler, əmr satırında göstərildikləri sırada axtarılır. Komut satırında göstərilən dizinler default dizinleri öncesinde aranır. Bütün -L variantları, seçimlərin göründüyündən asılı olmayaraq, bütün -l variantlarına tətbiq edilir.

Əgər axtarış "=" ilə başlamışsa, "=" sysroot prefiksi ilə əvəz olunacaq, linker konfiqurasiya edildikdə göstərilən yol.

Axtarışa gedən yolların standart dəsti ( L ilə göstərilmədən) hansı emülasyon rejimi ld istifadə etdiyinə, bəzi hallarda isə necə konfiqurasiya olunduğuna bağlıdır.

Yollar "SEARCH_DIR" əmri ilə bir link scriptində də göstərilə bilər. Bu şəkildə göstərilən kataloqlar, linker scriptinin komanda xəttində göründüyü nöqtədə aranır.

-m emulyasiya

Emulation linker-i öyüd-nəsihət . Mövcud emülasyonları - forbose və ya V variantları ilə göstərə bilərsiniz.

-m variantının istifadə edilmədiyi təqdirdə, emülasiya "LDEMULATION" ətraf mühit dəyişkənliyindən alınır, əgər müəyyən edilirsə.

Əks təqdirdə, default emulyasiya bağlayıcının necə konfiqurasiya olunduğuna bağlıdır.

-M

- çap xəritəsi

Standart çıxışa bir əlaqə xəritəsi yazdırın. Bağlantı xəritəsi, aşağıdakılar daxil olmaqla, link haqqında məlumat verir:

*

Nümunə faylları və simvolları yaddaşa eşlenen yerdə.

*

Ümumi simvollar necə ayrılır.

*

Arxiv üzvünün gətirilməsinə səbəb olan simvolu xatırladan linkdə yer alan bütün arxiv üzvləri.

-n

- nağagic

Bölmələrin səhifə hizasını söndürün və mümkünsə "NMAGIC" kimi çıxış edin.

-N

- məcburi

Mətn və məlumatların bölmələrini oxunaqlı və yazılabilir ola bilərsiniz. Ayrıca, məlumat seqmentini səhifə hizalamaq və paylaşılan kitabxanalara keçid verməyin. Çıxış formatı Unix stil sihirli nömrələrini dəstəkləyirsə, çıxışı "OMAGIC" kimi qeyd edin.

- qeyri-omagic

Bu seçim -N variantının əksəriyyətini inkar edir. Mətn bölməsini yalnız oxumaq üçün təyin edir və məlumat seqmentinin səhifə hizalı olmasını təmin edir. Qeyd - bu seçim paylaşılan kitabxanalara keçid verməyə imkan vermir. Bunun üçün istifadə edin.

-o çıxış

- çıxış = çıxış

Ld tərəfindən istehsal olunan proqramın adı kimi istifadə edin; bu seçim belirtilmemişse, a.out adı default olaraq istifadə olunur. "OUTPUT" skript əmri çıxış faylının adını da göstərə bilər.

-O səviyyəsində

Səviyyə sıfırdan çox olan ədədi dəyərlər olduqda ld optimallaşdırır. Bu, əhəmiyyətli dərəcədə uzun müddətə gələ bilər və buna görə də, ehtimal ki, son ikili üçün yalnız aktiv olmalıdır.

-q

- Emitent-relocs

Köçürmə bölmələrindən və məzmunu tam əlaqəli exececutables tərk. Post link təhlili və optimallaşdırma alətləri bu məlumatları yerinə yetirilən faylların düzgün dəyişikliklərini yerinə yetirmək üçün tələb edə bilər. Bu daha böyük yürütülebilirliğe səbəb olur.

Bu seçim hazırda yalnız ELF platformalarında dəstəklənir.

-r

- əlaqəli

Yəni relocatable çıxış yaradın --- yəni ld üçün giriş kimi xidmət edə biləcək bir çıxış faylını yaradın. Bu tez-tez qismən birləşmə adlanır. Yan təsiri, standart Unix sehrli ədədləri dəstəkləyən mühitlərdə bu seçim çıxış faylının sehrli nömrəsini "OMAGIC" olaraq da təyin edir. Bu seçim müəyyən edilmirsə, mütləq bir fayl çıxarılır. C ++ proqramlarını əlaqələndirərkən, bu seçim quruculara istinadları həll etmir ; Bunu etmək, istifadə etmək -Ur .

Bir giriş faylı çıxış faylı ilə eyni formata malik olmadıqda, qismən keçid yalnız giriş verilənlәrinin köçürülmәsi olmadıqda dəstəklənir. Müxtəlif çıxış formatları daha da məhdudlaşdıra bilər; məsələn, bəzi "a.out" bazlı formatlar digər formatlarda giriş faylları ilə qismən əlaqə yaratmır.

Bu seçim, -i ilə eyni şeydir.

-R filename

- just-symbols = filename

Simvolu adları və onların ünvanlarını fayl adından oxuyun, ancaq onu köçürməyin və ya çıxışa daxil etməyin. Bu, çıxış faylının simvolik olaraq digər proqramlarda müəyyən edilmiş yaddaş yerlərinə mütləq müraciət etməsinə imkan verir. Bu seçimi bir dəfədən çox istifadə edə bilərsiniz.

Digər ELF bağlayıcısı ilə uyğunluq üçün, -R seçimi bir fayl adından daha çox bir qovluq adı ilə təqlid edildikdə , -rpath seçimi kimi qəbul edilir.

-s

- zərbə-bütün

Çıxış faylından bütün simvol məlumatlarını sil.

-S

- Strip-debug

Çıxış faylından hata ayıklama simvol məlumatını (lakin bütün simvolları) silin.

-t

- şəfəq

Ld prosesləri kimi giriş fayllarının adlarını yazdırın.

-T scriptfile

- script = scriptfile

Linker skripti kimi scriptfile istifadə edin. Bu skript ld 'in default linker skriptini əvəz edir (bunun əvəzinə), belə ki commandfile çıxış faylını təsvir etmək üçün lazım olan hər şeyi göstərməlidir. Scriptfile mövcud dizindəki mövcud deyilsə, "ld" hər hansı əvvəlki L-l variantları tərəfindən göstərilən kataloqlarda görünür. Birdən çox -T variantları yığılır.

-u simvolu

- göstərilən = simvolu

Çıxış faylı daxilində simvolun təsvir edilməyəcəyi bir simvoldur. Bunu etmək, məsələn, standart modullardan əlavə modulların əlaqələndirilməsini tetikleyebilir. -u, əlavə müəyyən olmayan simvolları daxil etmək üçün müxtəlif seçim dəlilləri ilə təkrarlana bilər. Bu seçim "EXTERN" linker script əmrinə bərabərdir.

-Ur

C ++ proqramları xaricində başqa bir şey üçün bu seçim -r : bərabər çıxış çıxışı yaradır --- yəni ld üçün giriş kimi xidmət verə bilən bir çıxış faylıdır. C ++ proqramlarını əlaqələndirərkən, -Ur -r- dan fərqli olaraq, konstruktorlara istinadları həll edir. Bu istifadə üçün işləmir - özləri ilə əlaqəli olan fayllarda -Ur ; konstruktor masası qurulduqdan sonra onu əlavə etmək mümkün deyil. Yalnız sonuncu qismən link üçün istifadə edin və digərləri üçün.

- əlamət [= SECTION ]

BÖLÜM uyğun hər daxil bölmə üçün ayrı bir çıxış bölmə yaradır və ya hər bir yetim giriş bölməsi üçün isteğe bağlı joker SECTION bağımsız değişken varsa. Bir yetim bölməsi bir linker skriptində xüsusi qeyd edilməmişdir. Bu seçimi bir neçə dəfə komanda xəttində istifadə edə bilərsiniz; Bu giriş bölmələrinin eyni adı ilə normal birləşməsini maneə törədir, bir keçid ssenarisində çıxış bölmə tapşırıqlarını ləğv edir.

-v

--versiya

-V

Ld üçün versiya nömrəsini göstərin. -V variantında da dəstəklənən emulyasiyalar siyahıları var.

-x

-discard-all

Bütün yerli simvolları silin.

-X

-diskard-yerli

Bütün müvəqqəti yerli simvolları silin. Ən çox hədəflər üçün bu, adları L ilə başlayan bütün yerli simvollardır.

- simvolu

- simvol - simvolu

Simvolun göründüyü hər bir bağlı faylın adını yazdırın. Bu seçim hər hansı bir neçə dəfə verilə bilər. Bir çox sistemdə bir alt sətir əlavə etmək lazımdır.

Bu seçim linkinizdə müəyyənləşdirilməmiş bir simvol olduğunuzda faydalıdır, ancaq referansın nereden geldiğini bilmirsiniz.

-Y yolu

Standart kitabxana axtarışı yolunu əlavə edin. Bu seçim Solaris uyğunluğu üçün mövcuddur.

-z açar sözü

Tanınmış açar sözlər, "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" və "nocopyreloc ". Digər açar sözlər, Solaris uyğunluğu üçün göz ardı edilir. "initfirst" obyektin digər obyektlərdən əvvəl işə salınması üçün əvvəlcədən təyin olunmasını qeyd edir. "interpose" işarəsi, onun simvolu masanın bütün simvollardan əvvəl, lakin birincil olaraq işləniləndən öncə yerləşdirdiyi obyekti qeyd edir. "loadfltr", filtrləri işlədildikdən dərhal işlədildiyini qeyd edir. "nodefaultlib", bu obyektin bağımlılığına görə axtarışın məhəl qoymayacağını qeyd edir hər hansı bir default kitabxana axtarış yolları. "nodelete" işarəsi zamanı obyektin boşaldılmaması lazım olduğunu qeyd edir. "nodlopen", "dlopen" üçün mövcud olmayan obyekti qeyd edir. "nodump" nişanı obyektin "dldump" tərəfindən atlanmasına yol vermir. "İndi" obyekti tənbəl olmayan işləmə müddəti ilə qeyd edir. "mənşə" nişanı obyektin $ ORIGIN ola bilər. "defs" qeyri-müəyyən simvolları qadağan edir. "muldefs" çoxlu anlayışlara imkan verir. "combreloc" bir çox reloc bölmələri birləşdirir və dinamik sembol axtarışının önbelleğe alınmasını təmin edir.

"nocombreloc" birdən çox relok bölmələri birləşdirir. "nocopyreloc" surəti relocların istehsalını məhdudlaşdırır.

- ( arxiv -)

- başlanğıc qrup arxivləri - qrupu

Arxiv arxiv fayllarının siyahısı olmalıdır. Onlar açıq fayl adları və ya -l variantları ola bilər.

Belirlenen arşivler, yeni bir tanımlanmamış referans oluşturulana kadar tekrar aranır. Normalda bir arxiv yalnız komanda xəttində göstərildiyi sırada bir dəfə aranır. Arxivdəki bir simvol daha sonra komanda xəttində görünən bir arşivdeki bir obyekt tərəfindən istinad edilməyən bir simvolu həll etmək üçün lazım olsa, linker bu istinadı həll edə bilməz. Arxivləri qruplaşdırmaqla, bütün mümkün istinadlar həll olunana qədər, hamısı təkrar-təkrar aranmalıdır.

Bu seçimi istifadə edərək əhəmiyyətli bir performansa sahibdir. İki və ya daha çox arxiv arasında qaçılmaz dairəvi arayış olduqda istifadə etmək yaxşıdır.

- başlanğıc-naməlum-giriş-arch

- qəbul etməyən-unknown-giriş-arch

Bağlayıcısı, arxitekturası tanınmayan giriş fayllarını qəbul etməyə bildirir. Həssaslıq, istifadəçinin nə etdiklərini bildiyindən və qəsdən bu bilinməyən giriş faylları ilə əlaqə yaratmaq istəyir. Bu, 2.14 versiyasından əvvəl bağlayıcının default davranışı idi. Sərbəst buraxılışdan 2.14-dən əvvəlki davranış bu cür giriş fayllarını rədd etməkdir və beləliklə, köhnə davranışı bərpa etmək üçün əlçatmaz-input-arch seçimi əlavə edilmişdir.

Açar sözü daxil edin

Bu seçim SunOS uyğunluğu üçün nəzərə alınmır.

-Binamik

-di

-call_shared

Dinamik kitabxanalara qarşı əlaqə. Bu, paylaşılan kitabxanaların dəstəkləndiyi platformalarda yalnız mənalıdır. Bu seçim normal olaraq bu cür platformalarda quraşdırılmışdır. Bu variantın müxtəlif variantları müxtəlif sistemlərlə uyğunluq təşkil edir. Bu seçimi bir neçə dəfə komanda xəttində istifadə edə bilərsiniz: kütləvi informasiya vasitələrini izləyən -l-l seçimlərini təsir göstərir.

-Qrup

Dinamik bölmənin "DT_FLAGS_1" girişindəki "DF_1_GROUP" bayrağını seçin. Bu, runtime linker bu obyektdə axtarışlar və onun bağımlılıkları yalnız qrup daxilində axtarış etmək üçün səbəb olur. - qeyri-müəyyənləşdirilmişdir . Bu seçim, paylaşılan kitabxanaları dəstəkləyən ELF platformalarında yalnız mənalıdır.

-Bstatic

-dn

-non_shared

-statik

Paylaşılan kitabxanalara keçid etməyin. Bu, paylaşılan kitabxanaların dəstəkləndiyi platformalarda yalnız mənalıdır. Bu variantın müxtəlif variantları müxtəlif sistemlərlə uyğunluq təşkil edir. Bu seçimi bir neçə dəfə komanda xəttində istifadə edə bilərsiniz: kütləvi informasiya vasitələrini izləyən -l-l seçimlərini təsir göstərir.

-Bizymbolic

Paylaşılan bir kitabxana yaratdıqda, ümumi simvollara istinadlar paylaşılan kitabxanada tərifə bağlayın. Paylaşılan kütüphanedeki paylaşılan kütüphanedeki tanımı geçersiz kılmak üçün normal bir proqramla bağlı bir proqram mümkündür. Bu seçim yalnız paylaşılan kitabxanaları dəstəkləyən ELFplatformlarda mənalıdır.

- yoxlama bölmələri

- yox yoxsa bölmələr

Bağlayıcıya hər hansı bir üst-üstə düşmənin yoxluğunu yoxlamaq üçün təyin olunduqdan sonra bölmə ünvanlarını yoxlamaq istəmir. Normal olaraq linker bu çekləri yerinə yetirəcək və hər hansı bir üst-üstə düşməni taparsa, müvafiq səhv mesajları verəcəkdir. Bağlayıcının bildiyi yoxdur və bindirmələr bölümləri üçün öhdəliklər yaradır. Sifarişli davranış command line switch -check-bölümlərindən istifadə etməklə bərpa edilə bilər.

- qr

Çapraz istinad masası çıxarın. Bir bağlayıcının xəritəsi faylı yaradılıbsa, çarpaz istinad masası xəritə faylına yazdırılır. Əks təqdirdə, standart çıxdıqda yazılır.

Cədvəlin formatı qəsdən sadədir, belə ki, zəruri hallarda asanlıqla bir skript ilə işlənə bilər. Rəmzləri çap olunur, adı ilə sıralanır. Hər bir simvol üçün fayl adlarının siyahısı verilir. Simvolu müəyyən edildiyi təqdirdə, ilk fayl siyahıda təsvirin yeridir. Qalan fayllar simvol istinad edir.

- qeyri-müəyyən-ümumi

Bu seçim ümumi rəmzlərə ünvanların təyin edilməsini maneə törədir. "INHIBIT_COMMON_ALLOCATION" skript əmri eyni effektə malikdir.

- qeyri-müəyyən ümumi seçim çıxış faylının seçilməsindən ümumi rəmzlərə ünvanları təyin etmək qərarının ayrılmasına imkan verir; əksinə, ümumi rəmzlərə ünvanlar təyin edən qeyri-köçürülür çıxış tipi qüvvələr. Ortaq olmayan qeyri -müəyyən istifadə edərək, paylaşılan kitabxanadan baş verən ümumi simvollara əsas proqramda ünvanları təyin etmək imkanı verir. Bu, paylaşılan kitabxanada istifadə olunmayan yinelenmiş yerləri ortadan qaldırır və eyni zamanda, işləmə simvolu həlli üçün xüsusi axtarış yolları olan bir çox dinamik modul olduqda yanlış dublikatın həllində mümkün olan bir qarışıqlığı qarşısını alır.

--defsym simvolu = ifadə

Çıxış faylında ifadə ilə verilən mütləq ünvanı olan qlobal bir simvol yaradın. Komanda xəttində çoxlu simvolları müəyyən etmək üçün bu seçimi bir neçə dəfə istifadə edə bilərsiniz. Bu məzmunda ifadə üçün məhdud bir aritmetik forma dəstəklənir: hexadecimal sabit və ya mövcud simvolun adını vermək və ya hexadecimal sabitləri və ya simvolları əlavə etmək və ya çıxmaq üçün "+" və "-" istifadə edə bilərsiniz. Daha ətraflı ifadələrə ehtiyacınız varsa, bir skriptdən linker komanda dilini istifadə edin. Qeyd: simvol arasında ağ boşluq olmamalı, işarəsi bərabərdir ('` = ' ') və ifadə .

--Demangle [= style ]

- qeyri-demangle

Bu seçimlər, səhv mesajlarda və digər çıxışlarda simvolu adları deməyin olub olmadığını yoxlayır. Bağlayıcıya demanə deyildikdə, simvolu adları oxunaqlı bir şəkildə təqdim etməyə çalışır: obyektin fayl formatı ilə istifadə edildikdə öndə gedən şəffafları düzəldir və C ++ simvolu simvolu adlarını istifadəçi tərəfindən oxunan adlara çevirir. Müxtəlif derleyiciler müxtəlif qarışdırma üslublarına malikdirlər. İstədiyiniz demanqlama üslubu argümanı sizin kompilyatorunuz üçün müvafiq demanış stilini seçmək üçün istifadə edilə bilər. COLLECT_NO_DEMANGLE ətraf mühiti değişkeni qurulmamışsa , linker default olaraq demangle olacaq. Bu variantlar standartı ləğv etmək üçün istifadə edilə bilər.

- dinamik bağlayıcı fayl

Dinamik bağlayıcının adını seçin. Bu, dinamik şəkildə əlaqəli ELF faylları yaratmaqda yalnız mənalıdır. Standart dinamik bağlayıcı adətən düzgündür; nə etdiyinizi bilmədən bunu istifadə etməyin.

- yığılmış-relocs

Bu seçim, MIPS-in quraşdırılmış PIC kodunu, birləşdirilmiş-pik seçimi ilə yaradılan GNU kompilyatoru və assemblerə birləşdirərkən yalnız mənalıdır. Bağlayıcıya göstərici dəyərlərinə statik olaraq sıfırlanmış hər hansı məlumatın yerini dəyişdirmək üçün istifadə müddətində istifadə oluna biləcək bir cədvəl yaratmağa səbəb olur. Ətraflı testuite / ld-empic kodunu baxın.

- ölümcül xəbərdarlıqlar

Bütün xəbərdarlıqları səhvlər kimi müalicə edin.

- qüvvət-exe-sonrakı

Bir çıxış faylının bir .exe sonxuna malik olduğundan əmin olun.

Bir uğurla qurulmuş tam əlaqəli çıxış faylında ". Exe " və ya " .dll " sonekası yoxdursa, bu seçim bağlayıcıyı çıxış faylını ".exe" sonrakı ilə eyni adı birinə kopyalamağa məcbur edir. Bu seçim Microsoft Windows ana kompyuterində unmodified Unix makefiles istifadə edərkən faydalıdır, çünki Windows'un bəzi versiyaları ".exe" sonxuncunda bitməyincə bir şəkil çəkməyəcəkdir.

-no-gc-bölmələr

--gc bölmələr

İstifadə edilməmiş giriş hissələrinin zibil toplusunu aktivləşdirin. Bu seçimi dəstəkləməyən hədəflər üzərində nəzərə alınmır. Bu seçim -r ilə uyğun deyil, nə də dinamik birləşmə ilə istifadə edilməməlidir. Əvvəlcədən davranış (bu zibil toplusunu işləməməsi) komanda xəttində - no-gc-bölmələr göstərilərək bərpa edilə bilər.

- yardımçı

Standart çıxış və çıxışda komanda-line variantlarının xülasəsini yazdırın.

- target-yardım

Standart çıxış və çıxışda bütün hədəflərə dair xüsusi seçimlərin xülasəsini çap edin.

-Map xəritəsifili

Fayl xəritəsi faylına bir əlaqə xəritəsi yazdırın . Yuxarıda -M variantının təsvirinə baxın.

- qeyri-saxlama-yaddaş

ld yaddaşda giriş fayllarının simvol masalarını önbelleğe alaraq yaddaşın istifadəsi üzərində sürətlə optimallaşdırır. Bu seçim, ld- ə lazım deyilsə, simvol masalarının təkrarlanması ilə yaddaşın istifadəsini optimallaşdırmaq deməkdir. Böyük bir çalıştırılabilirliğe bağlandığında ld yaddaş yerindən çıxdıqda bu tələb oluna bilər.

- qeyri-müəyyənləşdirilməmiş

-z defs

Normalda qeyri-simvolik paylaşılan kitabxana yaradan zaman, müəyyənləşdirilməyən simvollara icazə verilir və runtime loader tərəfindən həll olunacaq. Bu variantlar bu cür qeyri-müəyyən simvolları qadağan edir.

- bütünlüklə çoxlu təriflər

-z maldefs

Normalda simvolu bir neçə dəfə müəyyən edildikdə, linker ölümcül bir səhv bildirəcəkdir. Bu seçimlər bir çox təsvirlərə imkan verir və ilk tərif istifadə olunur.

- Allow-shlib-undefined

Ümumi təsvirlərdə müəyyən olmayan simvollara - hətta qeyri-müəyyənləşdirildikdə də icazə verin. Net nəticə, müntəzəm obyektlərdə müəyyənləşdirilməmiş simvollar hələ də bir səhv gətirməyəcək, lakin paylaşılan obyektlərdə müəyyənləşdirilməmiş simvollar nəzərə alınmayacaqdır. No_undefined tətbiqi iş saatı bağlayıcısının müəyyən olmayan simvolları boğacağı ehtimalını yaradır. Ancaq ən azı bir sistem var (BeOS), paylaşılan kitabxanalarda müəyyənləşdirilmiş simvolların normal olduğu zaman, çekirdek yükləmə müddətində onlara hansı funksiyanın mövcud mimari üçün ən uyğun olduğunu seçmək üçün pozduğundan normaldır. IE dinamik olaraq müvafiq memset funksiyasını seçir. Görünür, HPPA-nın paylaşılan kütüphanelerinde müəyyənləşdirilməmiş simvollar olması normaldır.

- qeyri-müəyyənləşdirilməmiş versiyası

Normalda simvolu müəyyənləşdirilmədikdə, linker onu görməyəcək. Bu seçim qeyri-müəyyən versiyası olan simvolları qadağan edir və bunun əvəzinə ölümcül bir səhv çıxarılacaq.

- xəbərdar edilməməsi-uyğunsuzluq

Normal olaraq ld, hər hansı bir səbəbə uyğun olmayan giriş fayllarını birləşdirməyə çalışarsanız, bəlkə də müxtəlif prosessorlar üçün və ya müxtəlif endiannesslər üçün yığılmış olduqları üçün bir səhv verəcəkdir. Bu seçim ld-ə deyir ki, belə bir şəkildə mümkün olmayan səhvlərə səssizcə icazə verməlidir. Bu seçim yalnız bağlayıcı səhvlərinin uyğun olmadığını təmin edən bəzi xüsusi tədbirlər aldığınız hallarda diqqətlə istifadə edilməlidir.

- qeyri-bütün arxiv

Son arxiv faylları üçün - arxiv arxivinin effektini söndür .

--ninhibit-exec

Yəqin ki, istifadə edilə bilən hallarda yerinə yetirilən çıxış faylını saxlaya bilərsiniz. Normal olaraq linker, link prosesi zamanı səhvlərlə qarşılaşdıqda çıxış faylını çıxarmaz; hər hansı bir səhv vermədiyi zaman bir çıxış faylını yazmadan çıxır.

-nostdlib

Komanda xəttində açıq şəkildə göstərilən axtarış kitabxanaları kataloqu. Bağlayıcı skriptlərdə göstərilən kitabxana kataloqları (əmr satırında göstərilən linker skriptləri daxil olmaqla) nəzərə alınmır.

--formatın formatı

ld birdən çox növ obyekt faylını dəstəkləmək üçün konfiqurasiya edilə bilər. Sizin ld bu şəkildə yapılandırılmışsa, çıxış obyekti faylının ikili formatını göstərmək üçün --format seçimini istifadə edə bilərsiniz. Ld alternativ obyekt formatlarını dəstəkləmək üçün konfiqurasiya olunduqda belə, ld'nin hər bir maşında ən çox adi biçimi olan standart çıxış formatı kimi istehsal etmək üçün konfiqurasiya edilməli olduğu kimi, adətən bunu göstərməmisiniz. çıxış formatı bir mətn simli, BFD kitabxanaları tərəfindən dəstəklənən bir formatın adıdır. (Siz objdump -i ilə mövcud ikili formatları siyahıya ala bilərsiniz.) "OUTPUT_FORMAT" skript əmri də çıxış formatını müəyyən edə bilər, lakin bu seçim onu ​​ləğv edir.

-qmagic

Bu seçim Linux uyğunluğu üçün nəzərdə tutulmur.

-Qy

SVR4 uyğunluğu üçün bu seçim göz ardı edilir.

- Elədir

Maşından asılı təsiri olan bir seçimdir. Bu seçim yalnız bir neçə hədəfdə dəstəklənir.

Bəzi platformalarda - xırda seçim variantları, bağlayıcı proqram proqramında çıxış rejimi həll edərkən, məsələn, rahatlaşdıran ünvan rejimi və çıxış obyekti faylında yeni təlimatlar sintez edilməsi kimi mümkün olan qlobal optimallaşdırma işləri aparır.

Bəzi platformalarda bu link vaxtının qlobal optimallaşdırılması nəticəsində həyata keçirilə bilən işləmənin simvolik debug edilməsi mümkün deyildir. Bu, Matsushita MN10200 və MN10300 prosessorları ailəsi üçün də məlumdur.

Bu dəstəklənməyən platformalarda, - yunan qəbul edilir, lakin nəzərə alınmır.

- simvollar-fayl faylını saxlaya bilərsiniz

Faylın faylında sadalanan simvolları saxlayaraq bütün digərləri atın. filename sadəcə bir xətt üçün bir simvolu adı olan düz bir fayldır. Bu seçim xüsusilə mühitlərdə faydalıdır (VxWorks kimi), böyük bir qlobal simvol masası tədricən yığılır, iş zamanı yaddaşını qoruyur.

- Rəmz-simvollar-fayl köçürülmələri üçün lazımsız rəmzləri və ya simvolları ləğv etmir.

Komanda xəttində yalnız bir dəfə - simvollar-faylını göstərə bilərsiniz . Bu, -s-S-yi ləğv edir.

-rpath dir

Çalışma kitabxanasının axtarış yoluna bir qovluq əlavə edin. Bu, bir ELFexecutable obyektini paylaşılan obyektlərlə əlaqələndirərkən istifadə olunur. All -path arqumentləri birləşdi və iş vaxtında paylaşılan obyektləri tapmaq üçün istifadə olunan runtime linkerinə keçir. Pik yol seçimi, paylaşılan obyektlərin yerləşdirilməsində istifadə edilən paylaşılan obyektlərin yerləşdirilməsində istifadə olunur; -rpath-link variantının təsvirinə baxın. Bir ELF çalıştırılabilirliğini bağlayan zaman -path istifadə edilmirsə , "LD_RUN_PATH" ətraf mühitin məzmunu müəyyən edildikdə istifadə ediləcək.

-Prath seçimi SunOS da istifadə edilə bilər. Mənim cari olaraq, SunOS'da, linker verilmiş bütün -L variantlarından bir iş saatı axtarış patch təşkil edəcək. Bir -rpath seçimi istifadə edildikdə, iş zamanı axtarış yolu, -L variantlarını görmədən , -rpath variantlarını istifadə edərək yalnız formalaşdırılacaq. NFS quraşdırılmış fayl sistemlərində ola biləcək bir çox L seçimini əlavə edən gcc istifadə edərkən bu faydalı ola bilər.

Digər ELF bağlayıcısı ilə uyğunluq üçün, -R seçimi bir fayl adından daha çox bir qovluq adı ilə təqlid edildikdə , -rpath seçimi kimi qəbul edilir.

-sərhədə olan DIR

ELF və ya SunOS istifadə edərkən, bir paylaşılan kitabxana başqa tələb edə bilər. Bu, "ld-şarkı" bağlantısında paylaşılan bir kitabxana giriş fayllarından biri olduğu zaman olur.

Bağlayıcı paylaşılamayan, qeyri-köçürülməmiş bir link edərkən belə bir asılılıqla qarşılaşdıqda, avtomatik olaraq tələb olunan paylaşılan kitabxananı tapmaq və onu açıq şəkildə daxil edilməzsə linkə daxil etməyə çalışacaq. Belə bir halda, -rpath-link seçimi ilk ardıcıl kataloqları müəyyənləşdirir. -Prath-link seçimi, ikitərəfli ayrılmış adların siyahısını göstərməklə və ya bir neçə dəfə görünərək, dizin adlarının sırasını müəyyən edə bilər.

Paylaşılan bir kitabxanaya yığılmış ola biləcək axtarış yolunu ləğv edərkən bu seçim ehtiyatla istifadə olunmalıdır. Belə bir vəziyyətdə, iş vaxtının bağlayıcısının edə biləcəyindən daha çox fərqli bir axtarış yolu istifadə etmək mümkündür.

Bağlayıcı, lazımi paylaşılan kitabxanaları tapmaq üçün aşağıdakı axtarış yollarını istifadə edir.

1.

-rpath-link variantları ilə göstərilən hər hansı bir kataloq.

2.

-Parış variantları ilə göstərilən hər hansı bir kataloq. -rpath-rpath-link arasındakı fərq, -rpath variantları ilə göstərilən qovluqların çalıştırılabilir və istifadə müddətində istifadə edildiyindən, -rpath-link seçimi yalnız keçid dövründə effektivdir. Yalnız yerli bağlayıcı üçün.

3.

Bir ELF sistemində, -ppath və "rpath-link" variantları istifadə edilmədikdə, "LD_RUN_PATH" ətraf mühit dəyişəninin məzmununu axtarın. Yalnız yerli bağlayıcı üçün.

4.

SunOS-da, -ppath seçimi istifadə edilmədikdə, -L variantlarından istifadə edərək göstərilən hər hansı bir kataloq axtarın.

5.

Yerli bir linker üçün "LD_LIBRARY_PATH" ətraf mühitin məzmunu dəyişir.

6.

Bir doğma ELF bağlayıcısı üçün, paylaşılan bir kitabxananın "DT_RUNPATH" və ya "DT_RPATH" dizinleri tərəfindən tələb olunan paylaşılan kitabxanalar axtarılır. "DT_RPATH" girişləri "DT_RUNPATH" girişləri varsa nəzərə alınmır.

7.

Standart dizinler, normal olaraq / lib/ usr / lib .

8.

Bir ELF sistemindəki doğma bağlayıcı üçün /etc/ld.so.conf faylı varsa, bu faylda tapılan siyahıların siyahısı.

Gərəkli paylaşılan kitabxana tapılmadıqda, linker bir xəbərdarlıq verəcək və link ilə davam edəcək.

-dedi

-Bareyable

Paylaşılan bir kitabxana yaradın. Hal-hazırda yalnız ELF, XCOFF və SunOS platformalarında dəstəklənir. SunOS'da, -e variantının istifadə edilmədiyi və linkdə müəyyən olmayan simvollar varsa linker avtomatik olaraq paylaşılan bir kitabxana yaradır.

-sort-ümumi

Bu seçim, ld- ə müvafiq simvolları müvafiq çıxış bölmələrinə yerləşdirdikdə ölçüyə görə sıralamaq deməkdir. Əvvəlcə hər bir bayt simvolunu, daha sonra bütün iki baytını, sonra bütün dörd baytını, sonra isə hər şeyə gəlin. Bu, hizalama məhdudiyyətləri səbəbindən simvollar arasındakı boşluqların qarşısını almaqdır.

--split-by-file [ size ]

Ölçüyə çatdıqda, --split-by-reloc kimi, lakin hər bir giriş faylı üçün yeni bir çıxış bölməsini yaradır. əgər ölçüsünü 1 ölçüsünə verərsə,

--split-by-reloc [ count ]

Faylda heç bir vahid bölmənin köçürülməsindən çox olmaması üçün çıxış faylında əlavə bölmələr yaratmağa çalışır. COFF obyekt fayl formatı ilə müəyyən real vaxt çekirdeklərinə daxil olmaq üçün böyük köçürülmüş faylları yaradan zaman faydalıdır; COFFcannot bir bölmədə 65535-dən çox köçürməni təmsil edir. Bu, özbaşına bölmələri dəstəkləməyən obyekt fayl formatları ilə işləməyəcəkdir. Bağlayıcının təkrar bölüşdürülməsi üçün fərdi giriş bölmələrini bölüşdürməyəcəkdir, belə ki, bir giriş bölməsi sayım köçürülməsindən çoxdursa, bir çıxış bölməsi bir çox köçürülməni ehtiva edir. Varsayılanları 32768 dəyərinə hesablamaq .

- stats

İcra müddətinin və yaddaşın istifadəsi kimi bağlayıcının işləməsi ilə bağlı statistika hesablayın və göstərin.

- ənənəvi format

Bəzi hədəflər üçün, ld çıxışı, bəzi mövcud linkerin çıxışından bəzi yollarla fərqlənir. Bu keçid əvəzinə ənənəvi formatı istifadə etmək üçün ld tələb edir.

Məsələn, SunOS-da, ld , simvolu simli stolun dublikatını birləşdirir. Bu, tam bir ayıklama məlumatı olan bir çıxış faylının ölçüsünü 30 faizdən çox azalda bilər. Təəssüf ki, SunOS "dbx" proqramı nəticəsində proqramı oxuya bilməz ("gdb" nin problemi yoxdur). - Ənənəvi biçimli keçid dublikatların birləşməməsi üçün ld deyir.

- bölmə başlanğıc bölməsi = org

Org tərəfindən verilən mütləq ünvana çıxış faylının bir hissəsini tapın. Komanda xəttində birdən çox bölməni tapmaq üçün bu seçimi bir neçə dəfə istifadə edə bilərsiniz. org bir hexadecimal tamsayı olmalıdır; digər linkerlər ilə uyğunluq üçün, onsuz da hexadecimal dəyərlərlə əlaqəli aparıcı 0x-nı tərk edə bilərsiniz. Qeyd: bölmə adı , bərabər işarəsi (`` = '') və org arasında heç bir ağ boşluq olmamalıdır.

-Tbss org

-Tadata org

-Textext org

Başlanğıc ünvanı olaraq sırasıyla --- "bss", "data" və ya çıxış faylının "mətn" seqmenti kimi istifadə edin. org bir hexadecimal tamsayı olmalıdır; digər linkerlər ilə uyğunluq üçün, onsuz da hexadecimal dəyərlərlə əlaqəli aparıcı 0x-nı tərk edə bilərsiniz.

- dll-verbose

- köləlik

Ld üçün versiya nömrəsini göstərin və dəstəkləyən linker emulyasiyalarını dinləyin. Hansı giriş fayllarını göstərə bilər və aça bilmir. Bağlayıcının istifadə etdiyi linker skriptini göstərin.

--version -script = version-scriptfile

Bağlayıcıya bir versiya scriptinin adını göstərin. Bu, yaradılan kitabxana üçün versiya heyrarxiyası haqqında əlavə məlumat vermək üçün paylaşılan kitabxanalar yaratarkən istifadə olunur. Bu seçim, paylaşılan kitabxanaları dəstəkləyən ELF platformalarında yalnız mənalıdır.

- xəbərdarlıq

Ümumi simvol başqa bir ümumi simvolu və ya simvolu tərif ilə birləşdirildikdə xəbərdarlıq edin. Unix bağlayıcıları bu bir qədər əyləncəli praktikaya imkan verir, amma bəzi digər əməliyyat sistemlərində linkerlər yoxdur. Bu seçim qlobal simvolların birləşməsindən potensial problemlər tapmağa imkan verir. Təəssüf ki, bəzi C kitabxanaları bu praktikadan istifadə edirlər, buna görə kitabxanalarda simvolların olduğu kimi, proqramlarınızda da bəzi xəbərdarlıqlar ala bilərsiniz.

C nümunələri ilə təsvir olunan üç növ qlobal simvol vardır:

int i = 1;

Çıxış faylının başlanğıc verilənlər bölməsində gedən bir tərif.

extern int i;

Məkan ayırmır ki, müəyyənləşdirilməmiş bir istinad. Bir yerdə dəyişən bir tərif və ya ümumi simvol olmalıdır.

int i;

Ümumi simvolu. Bir dəyişən üçün yalnız bir (bir və ya daha çox) ümumi simvol varsa, çıxış faylının təkrarlanmayan məlumat sahəsinə keçir. Bağlayıcı eyni dəyişən üçün bir çox simvolları simvol birləşdirir. Onlar fərqli ölçülərdə olduqda, ən böyük ölçüsü alır. Eyni dəyişən bir tərif varsa, bağlayıcı bəyannaməyə ümumi simvolu çevirir.

- "xəbərdarlıq" seçimi beş növ xəbərdarlıq çıxara bilər. Hər bir xəbərdarlıq bir cüt xətadan ibarətdir: birincisi yalnız rast gəlinən rəmzi təsvir edir, ikincisi eyni adı ilə qarşılaşan əvvəlki simvolu təsvir edir. İki simvoldan biri və ya hər ikisi ümumi simvol olacaqdır.

1.

Bir simvolun bir simvol halına gətirilməsi, çünki artıq simvol üçün bir tərif var.

(
): xəbərdarlıq: 'ın ümumi' definition (
) tərəfindən köhnəlmişdir: xəbərdarlıq: burada müəyyən edilmiş

2.

Ümumi simvolu referendə çevirir, çünki simvol üçün sonrakı tərif müəyyənləşdirilir. Bu, əvvəlki vəziyyətlə eynidır, istisna olmaqla, simvollar fərqli bir sırada qarşılanır.

(
): xəbərdarlıq: ümumi (
) üstünlük təşkil edən 'nın təsviri: xəbərdarlıq: ümumi

3.

Ümumi simvolu bir əvvəlki eyni ölçülü ümumi simvolu ilə birləşdirmək.

(
): xəbərdarlıq: çox simvolu ' (
): xəbərdarlıq: əvvəlki ümumi burada

4.

Bir ümumi simvolu əvvəlki ümumi simvolu ilə birləşdirmək.

(
): xəbərdarlıq: ümumi (
) tərəfindən köklənən 'ümumi: xəbərdarlıq: daha geniş yayılmışdır

5.

Bir ümumi simvolu bir əvvəlki daha kiçik simvolu ilə birləşdirmək. Bu, əvvəlki vəziyyətlə eynidır, istisna olmaqla, simvollar fərqli bir sırada qarşılanır.

(
): xəbərdarlıq: ümumi (
) daha kiçik olan 'ümumi: xəbərdarlıq: daha kiçikdir

- xəbərdar edənlər

Qlobal konstruktorlardan istifadə edildikdə xəbərdarlıq edin. Bu yalnız bir neçə obyekt fayl formatı üçün faydalıdır. COFF və ya ELF kimi formatlar üçün linker qlobal quruculardan istifadə edə bilmir.

--warn-multiple-gp

Çıxış faylında birdən çox qlobal göstərici dəyərinin tələb olunduğuna xəbərdarlıq edin. Bu yalnız Alpha kimi müəyyən prosessorlar üçün mənalıdır. Xüsusən, bəzi prosessorlar xüsusi bölmədə böyük qiymətli sabitləri qoyurlar. Xüsusi bir qeyd (qlobal pointer) bu bölmənin ortasına baxır, belə ki, sabitlər bir əsas reyestri nisbi ünvanlama rejimi vasitəsilə effektiv şəkildə yüklənə bilər. Bazlı qeydiyyatdan nisbi rejimdə ofset sabit və nisbətən kiçik olduğu üçün (məsələn, 16 bit) sabit hovuzun maksimum ölçüsünü məhdudlaşdırır. Beləliklə, böyük proqramlarda, bütün mümkün sabitləri həll etmək üçün bir çox qlobal göstərici dəyərindən istifadə etmək çox vaxt lazımdır. Bu seçim, bu vəziyyət baş verdikdə bir xəbərdarlıq verməyə səbəb olur.

- bir dəfə oxuyun

Yalnız hər bir modul üçün bir dəfə deyil, hər bir simvol üçün bir dəfə xəbərdarlıq edin.

- xəbərdarlıq hissəsi-align

Çıxış bölməsinin ünvanı hizalanması səbəbindən dəyişdirildikdə xəbərdarlıq edin. Tipik olaraq, hizalama bir giriş bölməsi ilə təyin olunacaq. Bu ünvan yalnız açıq şəkildə müəyyən edilmədikdə dəyişəcək; yəni "Bölmələr" əmrində bölmə üçün başlanğıc ünvanı göstərilmir.

- arxiv arxivi

- Arxiv variantından sonra əmr satırında göstərilən hər bir arxiv üçün, tələb edilən obyekt faylları üçün arşiv axtarmağı deyil, hər bir obyekt faylını linkdə olan arxivə daxil edin. Bu adətən bir arşiv faylını paylaşılan bir kitabxana halına gətirmək üçün istifadə olunur, nəticədə yaradılan paylaşılan kitabxanaya daxil olmaq üçün hər bir obyektin məcbur edilməsi. Bu seçim bir dəfədən çox istifadə edilə bilər.

Bu seçimi gcc-dən istifadə edərkən iki qeyd: Birincisi, gcc bu seçim haqqında bilmir, belə ki, -wl, -whole-arxiv istifadə etmək lazımdır. İkincisi, arxiv siyahınızdan sonra -Wl, -siz-arxiv arxivini istifadə etməyi unutma, çünki gcc, linkinizə öz ardıcılları siyahısına əlavə edəcək və bu bayrağın həm də bu cür təsir göstərməsini istəməyəcəksiniz.

- tökmə sembolü

Sembol üçün bir sarğı funksiyasından istifadə edin. Sembolde hər hansı bir müəyyənləşdirilməmiş istinad "__ wrap_symbol" olaraq həll ediləcək. "__real_symbol" ə hər hansı bir müəyyənləşdirilməmiş istinad simvolu həll ediləcək.

Bu, bir sistem funksiyası üçün bir sarmal təmin etmək üçün istifadə edilə bilər. Sarmaşma funksiyası "__wrap_symbol" adlandırılmalıdır. Sistem funksiyasını çağırmaq istəsə, "__ real_symbol" adlandırmalıdır.

Burada əhəmiyyətsiz bir nümunə:

void * __wrap_malloc (int c) {printf ("% ld \ n ilə çağırılan malloc", c); __real_malloc (c) qayıtmaq; }

Əgər digər kodu bu faylla - wrap malloc ilə əlaqələndirirsinizsə , "malloc" a edilən bütün çağırışlar "__wrap_malloc" funksiyasını çağırır. "__wrap_malloc" da "__real_malloc" a edilən zəng real "malloc" funksiyasını çağırır.

Siz də "__real_malloc" funksiyasını təmin etmək istəyə bilərsiniz, belə ki, "wrap" seçimi olmadan əlaqələr uğur qazanacaqdır. Bunu etsəniz, "__wrap_malloc" ilə eyni faylda "__ real_malloc" un tanımını verməməlisiniz; əgər varsa, assembler bu linkerin "malloc" a keçməsinə imkan verməyincə zəngləri həll edə bilər.

- yenilənə bilər-yeni-dtags

--Disable-new-dtags

Bu linker ELF-də yeni dinamik yazıları yarada bilər. Lakin köhnə ELF sistemləri onları anlamır. Əgər müəyyən edərsiniz - yeni-yeni-dtags , dinamik etiketlər lazım gəldikdə yaradılacaq. Əgər müəyyən edərsənsə , yeni bir dinamik tags yaradılmayacaq. Varsayılan olaraq, yeni dinamik etiketlər yaradılmır. Qeyd edək ki, bu variantlar yalnız ELF sistemlərində mövcuddur.

I386 PE bağlayıcısı, çıxışın normal bir yerinə yerinə yetirilmək yerinə dinamik olaraq əlaqəli bir kitabxana (DLL) olmasına səbəb olan -shared variantını dəstəkləyir. Bu seçimi istifadə etdiyiniz zaman "* .dll" çıxışı adlandırmalısınız. Əlavə olaraq, linker bir obyekt faylı kimi linker komanda satırında müəyyən edilə bilən standart "* .def" fayllarını tam dəstəkləyir (əslində, arxivləri əvvəlcədən olmalıdır ki, arxivləri, normal bir obyekt faylı kimi).

Bütün hədəflər üçün ümumi olan variantlara əlavə olaraq, i386 PE linker i386 PE hədəfinə aid olan əlavə komanda xətti seçimlərini dəstəkləyir. Məbləğləri götürən variantlar bir dəyər və ya bərabər işarə ilə onların dəyərlərindən ayrıla bilər.

- add-stdcall-alias

Verildiyi təqdirdə, bir stdcall suffix (@ nn ) olan simvollar as-ixrac və həmçinin sıfırdan ləğv olunacaq.

- əsas fayl faylı

Dlltool ilə DLL yaratmaq üçün lazım olan bütün köçürülmələrin əsas ünvanlarını saxlamaq üçün faylın adı kimi istifadə edin.

- dll

Normal bir yürütülebilir yerinə bir DLL yaradın. Siz də istifadə edə bilərsiniz -düşmək və ya müəyyən bir ".def" faylında "KİTABXANA" müəyyən edə bilərsiniz.

- əlverişli-stdcall-fixup

--Disable-stdcall-fixup

Bağlantı həll edilə bilməyəcək bir simvol taparsa, simvol adı (cdecl vs stdcall) formatında fərqlənən başqa bir müəyyən simvolu axtararaq "qeyri-səlis əlaqə" etmək üçün çalışır və bu simvolu birləşdirərək matç üçün. Məsələn, "_foo" un tanımadığımız simvolu "_foo @ 12" funksiyasına bağlı ola bilər və ya "_bar @ 16" un tanımsız simvolu "_bar" funksiyasına bağlı ola bilər. Bağlayıcının bunu etməsi halında bir xəbərdarlıq yazır, çünki adətən əlaqə qura bilmədi, ancaq bəzən üçüncü şəxslərin dlllərindən yaradılan kitabxanaları idxal edə bilər, bu xüsusiyyət istifadə edilə bilər. Əgər təyin edərsəniz , bu xüsusiyyət tamamilə effektivdir və xəbərdarlıqlar yazılmır . Əgər təyin edərsəniz , - bu, disable-stdcall-fixup , bu xüsusiyyət aradan qaldırılır və belə uyğunsuzluqlar səhv hesab olunur.

- ixrac-bütün simvollar

Verildikdə, bir DLL qurmaq üçün istifadə olunan obyektlərin bütün qlobal simvolları DLL tərəfindən ixrac ediləcək. Əks halda ixrac edilən simvollar olmayacaqsa, bu u mənimdir. Simvollar açıq şəkildə DEF faylları ilə ixrac edildikdə və ya funksiya funksiyalarından dolayı idxal olunan halda, bu parametr verilmədikdə, u mənim başqa bir şey ixrac etməməlidir. Qeyd edək ki, "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12" və "impure_ptr" simvolları avtomatik olaraq ixrac olunmayacaq. Ayrıca, digər DLL'lerden alınan simgeler yeniden dışa aktarılamaz və "_head_" ile başlayan və ya "_iname" ile sonlanan DLL'nin daxili düzenini belirten simgeler kullanılmayacaktır. Ayrıca, "libgcc", "libstd ++", "libmingw32" və ya "crtX.o" dan heç bir simvol ixrac olunmayacaq. C ++ DLL-lərinə kömək etmək üçün adları "__rtti_" və ya "__builtin_" ilə başlayan rəmzlər ixrac olunmayacaq. Nəhayət, ixrac edilməyən cygwin-şəxsi simvolların geniş siyahısı var (açıq-aydın bu, cygwin hədəfləri üçün DLL-lərin yaradılması zamanı tətbiq olunur).

"Cygwin_premain0", "cygwin_premain1", "cygwin_premain2", "cygwin_premain3", "cygwin_noncygwin_dll_entry @ 12", "_fmode", "_impure_ptr", "cygwin_attach_dll" və "ətraf mühit".

- simvolları sembol , simvolu əlavə edin ...

Avtomatik olaraq ixrac edilməməli olan simvollar siyahısını müəyyənləşdirir. Simvolu adları virgülle və ya ikilisiyle ayrılmış ola bilər.

- Xahiş olunur , lib , lib , ...

Sembollərin avtomatik olaraq ixrac edilməməsi lazım olan arxiv kitabxanalarının siyahısını bildirir. Kitabxananın adları virgülle və ya ikilisiyle ayrılmış ola bilər. "--Bütün məzmuna malikdir" ifadəsini bütün arxiv kitabxanalarından avtomatik ixracatın içərisindən silmək istisna olunur. Bir .def faylında açıq şəkildə qeyd olunan rəmzlər, bu seçimdən asılı olmayaraq, hələ də ixrac olunur.

- faylın hizalanması

Faylın hizalamasını göstərin. Dosyanın bölmələri həmişə bu sayının çox hissəsi olan faylların formasından başlayacaqlar. Bu, 512'dir.

- qalıq ehtiyatı

- ehtiyat zəmanəti

Bu proqram üçün yığın kimi istifadə edilmək üçün ehtiyat (və isteğe bağlı olaraq tövbə ediləcək) yaddaşın məbləğini göstərin. Varsayılan olaraq 1Mb qorunur, 4K işləyir.

- İşıq bazası dəyəri

Proqramınızı və ya dll-in əsas ünvanını istifadə edin. Proqramınız və ya dll yükləndiyi zaman istifadə olunacaq ən aşağı yaddaş yeri. Dell'lerinizin performansını yükseltmek və artırmaq üçün ehtiyaclarınızı azaltmaq üçün, hər biriniz özünəməxsus bir əsas ünvana sahib olmalı və hər hansı digər DLL faylının üst-üstə düşməməlidir. Varsayılan fayllar üçün 0x400000 və DLL faylları üçün 0x10000000 təşkil edir.

- Kill-at

Verildikdə, stdcall sonekləri (@ nn ) ixrac edildikdən əvvəl simvollardan ləğv ediləcək.

- yamor-image-versiyası dəyəri

`` Image version '' nin əsas sayını təyin edir. Varsayışlar 1.

- yüngül-os-versiya dəyəri

`` Os versiyası '' nın əsas sayını təyin edir. Varsayılanlar 4.

- yamor-subsystem-versiya dəyəri

'' Alt sistem versiyası '' nın əsas sayını təyin edir. Varsayılanlar 4.

--minor-image-versiyası dəyəri

`` Image version '' un kiçik sayını təyin edir. 0 etibarlılıq.

--minor-os-versiyası dəyəri

`` Os versiyası '' nın kiçik sayını təyin edir. 0 etibarlılıq.

--minor-subsystem-versiyası dəyəri

`` Alt sistem versiyasının 'kiçik sayını təyin edir. 0 etibarlılıq.

--putput-def faylı

Bağlayıcının, bağlayıcının oluşturduğu DLL'ye uyğun bir DEF faylını ehtiva edən fayl faylını yaratmasıdır. "DDTool" ilə bir idxal kitabxana yaratmaq üçün bu DEF faylı ("* .def" adlandırılmalıdır) istifadə edilə bilər və ya avtomatik olaraq və ya gizli şəkildə ixrac edilən simvollar üçün istinad kimi istifadə edilə bilər.

- Dəyişdirici fayl

Bağlayıcının, bağlayıcının yaradılan DLL'sine uyğun olan bir import libini ehtiva edən fayl faylını yaradır. Bu idxal lib ("* .dll.a" və ya "* .a" adları müştərilərin yaratılmış DLL-ə qarşı əlaqə yaratmaq üçün istifadə oluna bilər; bu davranış ayrı bir "dlltool" idxal kitabxanasının yaradılması addımını atmağa imkan verir.

- Mövcud avtomatik-image-bazası

"--image-base" argümanı istifadə etmədikdə, DLL faylları üçün avtomatik olaraq şəkil bazasını seçin. Hər bir DLL üçün unikal şəkil üslubu yaratmaq üçün dllname-dən yaradılan bir karma istifadə edərək, proqramın icrasını gecikdirə biləcək yaddaş içərisində olan toqquşmalar və köçürmələrdən çəkinirlər.

--Disable-auto-image-bazası

Avtomatik olaraq unikal bir şəkil bazası yaratmırıq. Heç bir istifadəçi tərəfindən göstərilməyən şəkil bazası ("-image-baz") olmadıqda platforma standartını istifadə edin.

- DLL-axtarış-ön düyməsi

Bir idxal kitabxanası olmayan bir DLL-yə dinamik olaraq keçid edərkən, "lib .dll" üstündəki " .dll" axtarın. Məsələn, cygwin DLL-ləri adətən "--dll-search-prefix = cyg" istifadə edir: bu davranış, müxtəlif subdivisions üçün tikilmiş DLLlər arasında asan fərq qoyur: yerli, cygwin, uwin, pw və s.

- Mövcud avtomatik-idxal

DLL fayllarından "_symbol" -ni "__imp__symbol" -a dürüst birləşdirin və bu DATAexports ilə idxal kitabxanalarını tikərkən zəruri thunking simvollarını yaradın. Bu, ümumiyyətlə 'yalnız işləyəcək' --- bəzən bu mesajı görə bilərsiniz:

"dəyişən '' avtomatik olaraq idxal edilə bilməz. Ld-nin" --enable-auto-import "üçün sənədlərini oxuyun."

Bəzi (alt) ifadənin nəticədə iki sabitin cəmi (Win32 idxal masaları yalnız birinə icazə verməklə) verilən bir ünvana daxil olduqda bu mesaj meydana gəlir. Bu meydana gələ biləcək nümunələr bir DLL-dən idxal edilən struct dəyişənlərin üzv sahələrinə daxil olmaq və həmçinin DLL-dən idxal edilən bir sıra dəyişəninə daimi bir indeksdən istifadə etmək daxildir. Hər hansı çoxmərtəbəli dəyişən (array, structs, uzun və s.) Bu səhv vəziyyətə səbəb ola bilər. Lakin, təhqir olunan ixrac edilən dəyişənlərin tam məlumat növündən asılı olmayaraq, ld həmişə onu aşkarlayacaq, xəbərdarlıq verəcək və çıxışdan çıxış edəcəkdir.

Verilən dəyişənlərin məlumat növündən asılı olmayaraq, bu çətinliyi həll etmək üçün bir neçə yol vardır:

Bir yol - istifadə edilə bilər-runtime-pseudo-reloc keçid. Bu, iş müddəti ətraf mühit üçün müştəri kodunuzdakı istinadları düzəltmək məsələsini yaradır, belə ki, bu metod yalnız iş müddəti mühitinin bu xüsusiyyəti dəstəklədiyi zaman işləyir.

İkinci bir həll 'sabitləri' bir dəyişən olmaq məcbur etməkdir --- ki, kompilyasiya zamanı unknown və un-optimallaşdırılması. Diziler üçün iki imkan var: a) indeksin (dizinin ünvanı) bir dəyişən etmək və ya b) 'sabit' indeksini bir dəyişən etmək. Beləliklə:

extern növü extern_array []; extern_array [1] -> {uçucu tip * t = extern_array; t [1]}

və ya

extern növü extern_array []; extern_array [1] -> {uçucu int t = 1; extern_array [t]}

Stillər üçün (və digər çoxmərtəbə tipli məlumat növləri) tək variant struct özünü (ya da uzunmüddətli və ya ...) dəyişən etməkdir:

extern struct s extern_struct; extern_struct.field -> {uçucu struct s * t = & extern_struct; t-> sahə

və ya

extern uzun uzun extern_ll; extern_ll -> {uçucu uzun uzun * local_ll = & extern_ll; * local_ll}

Bu çətinliklə məşğul olmaq üçün üçüncü bir üsul, "__declspec (dllimport)" ilə təhqir edən simvol üçün "avtomatik idxal" ləğv etməkdir. Bununla belə, praktikada DLL-i bağlayacaq və ya statik bir kitabxana qurmaq / bağlamaq üçün müştəri kodu yaratmaq üçün bir DLL qururmadığınızı bildirmək üçün kompilyasiya-vaxtını # define istifadə etmək tələb olunur. "Doğrudan ünvana daimi ofset" problemini həll etmək üçün müxtəlif üsullar arasında seçim etməklə, real dünya istifadə tipini nəzərdən keçirməliyik:

Orijinal:

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

Həll 1:

- foo.h extern int arr []; --foo.c #include "foo.h" void main (int argc, char ** argv) {/ * Bu həlli win32 və cygwin üçün; "optimallaşdırma" * / dəyişkən int * parr = arr; printf ("% d \ n", parr [1]); }

Həll 2:

--foo.h / * Qeyd: Avtomatik ixrac qəbul edilir (heç bir __declspec (dllexport)) * / #if (tanımlanmış (_WIN32) || müəyyən (__ CYGWIN__)) && \! (müəyyənləşdirilmiş (FOO_BUILD_DLL) || definition (FOO_STATIC )) #define FOO_IMPORT __declspec (dllimport) #define #define FOO_IMPORT #difen extern FOO_IMPORT int arr []; - foo.c #include "foo.h" void əsas (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

Bu problemdən qaçınmaq üçün dördüncü yol, kütləvi informasiya vasitənizi ( məsələn, set_foo ()get_foo () accessor funksiyaları) təhqir edən dəyişənlər üçün bir məlumat interfeysi deyil, funksional interfeysdən istifadə etmək üçün yenidən kodlaşdırmaqdır .

--Disable-auto-idxal

DLL fayllarından DATAimports üçün "_symbol" in "__imp__symbol" a səciyyəvi birləşdirilməsinə cəhd etməyin.

- Mövcud olan-runtime-pseudo-reloc

Kodunuzda --enable-auto-import bölməsində təsvir edilmiş ifadələr varsa, yəni qeyri-sıfır offset ilə DLL-dən DATAimportları, bu keçid istinadlar düzəltmək üçün iş şəraiti mühitində istifadə oluna bilən 'işləməyinizin pseudo relocations' vektorunu yaradır müştəri kodunuzdakı məlumatlara.

--Disable-runtime-pseudo-reloc

DLL-dən qeyri-sıfır offset DATA idxalı üçün saxta köçürmələr yaratmayın. Bu default.

- ola bilər-əlavə-pe-debug

Avtomatik import simvolu thunking ilə bağlı əlavə debug məlumatını göstərin.

- bölmə-hizalama

Bölmə hizasını təyin edir. Yaddaşdakı bölmələr həmişə həmin nömrənin bir neçə nömrəli ünvanlarında başlayacaqdır. 0x1000 üçün əvəzolunmazlar.

- qoruyucu ehtiyat

- ehtiyat ehtiyatı

Bu proqram üçün yığın kimi istifadə edilmək üçün ehtiyat (və isteğe bağlı olaraq tövbə etmək üçün) olan yaddaşın məbləğini göstərin. Varsayılan 2Mb qorunur, 4K işlənmişdir.

- Şəbəkə sistemi

- Şəbəkə sistemi : böyük

- Şəbəkə sistemi : böyük . kiçik

Proqramınızın icra edəcəyi alt sistemi müəyyən edir. "Doğma", "pəncərələr", "konsol" və "posix" olan hüquqi dəyərlər. İstədiyiniz halda alt sistem versiyasını da təyin edə bilərsiniz.

Mühüm: Şəxsi kompüterinizdə bir komanda necə istifadə edildiyini görmək üçün man komutunu ( % man ) istifadə edin.