Linux / Unix სარდლობის: Id

NAME

ld - გამოყენებით LD , GNU კავშირი

სინოფსისი

ld [ options ] objfile ...

DESCRIPTION

ld აერთიანებს მთელ რიგ ობიექტებს და არქივურ ფაილებს , გადააქვს მათი მონაცემები და კავშირების სიმბოლოები. როგორც წესი, ბოლო ნაბიჯი პროგრამის შედგენაში არის ld- ის გაშვება.

ld იღებს Linker Command Language ფაილებს დაწერილი AT & T- ს ლინკი რედაქტორის სარდლობის ენა სინტაქსის ზედაპირზე, რათა უზრუნველყოს პირდაპირი და სრული კონტროლი დამაკავშირებელ პროცესზე.

ეს კაცი გვერდი არ აღწერს ბრძანების ენაზე; ვხედავ ld შესვლის "info", ან სახელმძღვანელო ld: GNU ლინგერი, სრული დეტალები ბრძანება ენაზე და სხვა ასპექტებს ANU linker.

Ld- ის ეს ვერსია ზოგადი დანიშნულების BFD ბიბლიოთეკებს იყენებს ობიექტის ფაილებზე. ეს საშუალებას იძლევა ld წაკითხვის, კომბინირება და დაწერა ობიექტის ფაილი სხვადასხვა ფორმატში --- მაგალითად, COFF ან "a.out". სხვადასხვა ფორმატის გამოყენება შეიძლება გაერთიანდეს ნებისმიერი სახის ობიექტის ფაილის წარმოებისათვის.

გარდა მისი მოქნილობისა, GNU Linker უფრო სასარგებლოა, ვიდრე სხვა დამხმარეები დიაგნოსტიკური ინფორმაციის მიწოდებისას. ბევრმა დამკვრელმა უარი თქვა შესრულების შეცდომასთან დაკავშირებით; შეძლებისდაგვარად, ld განაგრძობს შესრულებას, რომელიც საშუალებას გაძლევთ სხვა შეცდომების იდენტიფიცირება (ან, ზოგიერთ შემთხვევაში, შეცდომის მიუხედავად, გამომავალი ფაილის მისაღებად).

GNU Linker ld იგულისხმება სიტუაციის ფართო სპექტრის გაშუქება, და რაც შეიძლება სხვაგვარად შეესაბამებოდეს თავს. შედეგად, თქვენ გაქვთ ბევრი არჩევანი, რომ აკონტროლოთ თავისი ქცევა.

პარამეტრები

ბმულები მხარს უჭერენ command-line პარამეტრების plethora, მაგრამ ფაქტობრივად პრაქტიკაში რამდენიმე მათგანი გამოიყენება ნებისმიერ კონკრეტულ კონტექსტში. მაგალითად, ld- ის ხშირი გამოყენება სტანდარტული Unix- ის ობიექტურ ფაილებს უკავშირდება სტანდარტული, მხარდაჭერილი Unix სისტემით . ასეთ სისტემაში, შეავსეთ ფაილი "hello.o":

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

ეს იძლევა ld წარმოადგინოს ფაილი მოუწოდა გამომუშავება შედეგად დამაკავშირებელი ფაილი "/lib/crt0.o" ერთად "hello.o" და ბიბლიოთეკა "libc.a", რომელიც მოდის სტანდარტული ძებნის დირექტორიები. (იხილეთ ქვემოთ მოყვანილი დისკზე განხილვა).

ზოგიერთი command-line პარამეტრების ld შეიძლება მითითებული ნებისმიერ წერტილში ბრძანებათა ზოლში. თუმცა, ვარიანტი, რომელიც ეხება ფაილებს, როგორიცაა -l ან -T , იწვევს ფაილს წაკითხვის მომენტში, სადაც ოფცია გამოჩნდება ბრძანების ხაზით, ობიექტის ფაილებთან და სხვა ფაილებთან შედარებით. სხვა არგუმენტებთან შეუსაბამობის ვარიანტების განმეორება ან რაიმე წინაპირობას არ მოახდენს, ან არჩეული წინაპირობების გადაფარვა (იმ ბრძანებათა სტრიქონზე მარცხნივ). პარამეტრები, რომლებიც შეიძლება უფრო მეტად განსაზღვრულ იქნეს ერთზე მეტჯერ, აღინიშნება ქვემოთ მოცემული აღწერილობაში.

არჩევითი არგუმენტები არის ობიექტის ფაილები ან არქივები, რომლებიც დაკავშირებულია ერთმანეთთან. მათ შეუძლიათ დაიცვას, წინ უძღოდეს, ან შერეული შეესაბამება ბრძანებათა ხაზის პარამეტრებით, გარდა იმ ობიექტის ფაილის არგუმენტი, რომელიც არ უნდა განთავსდეს ვარიანტი და მისი არგუმენტი.

როგორც წესი, ლინკერი ერთ ობიექტურ ფაილთან არის მოყვანილი, მაგრამ შეგიძლიათ მიუთითოთ ორობითი შეტანის ფაილების სხვა ფორმები-ლ, -R და სკრიპტის ბრძანების ენა. თუ ორობითი ფაილები არ არის მითითებული, ბმული არ აწარმოებს რაიმე გამომავალს და გამოსცემს შეტყობინებას შეყვანილი ფაილები .

იმ შემთხვევაში, თუ ბმულს ვერ აღიარებს ობიექტის ფაილის ფორმატი, იგი მიიჩნევს, რომ ეს არის ბმული სკრიპტი. ამ გზით მითითებულია სკრიპტი, რომელიც დაკავშირებულია ბმულზე გამოყენებული ძირითადი ბმული სკრიპტის (ან ნაგულისხმევი ბმული სკრიპტის ან თ-ის გამოყენებით განსაზღვრული). ეს ფუნქცია საშუალებას აძლევს ბმულს შეიტანოს ფაილი, რომელიც, როგორც ჩანს, ობიექტი ან არქივი, მაგრამ რეალურად მხოლოდ განსაზღვრავს სიმბოლოს ღირებულებებს, ან იყენებს "INPUT" ან "GROUP" სხვა ობიექტების დასატვირთად. გაითვალისწინეთ, რომ სკრიპტის მითითება ამ გზით მხოლოდ ძირითად ბმულს სკრიპტს გულისხმობს; გამოიყენეთ -T ოფცია შეცვლის default linker სცენარი მთლიანად.

ვარიანტებისთვის, რომელთა სახელებიც ერთი წერილია, ვარიანტი არგუმენტებმა უნდა დაიცვას ოფციის წერილი, რომელიც არღვევს თეთრ ადგილას, ან მიეკუთვნება ცალკეულ არგუმენტებს მაშინვე, რაც მოითხოვს მათ.

ვარიანტებისთვის, რომელთა სახელები მრავალრიცხოვანი ასოებია, არც ერთი ტირე ან ორი შეიძლება წინა ვარიანტისთვის; მაგალითად, დისტრიბუციის სიმბოლო და სიმბოლოთი სიმბოლოა . შენიშვნა - ამ წესის ერთი გამონაკლისი არსებობს. მრავალრიცხოვანი ასო ვარიანტები, რომლებიც იწყება ქვედა შემთხვევაში "ო" შეიძლება მხოლოდ ორი dashes მიერ preceeded. ეს არის შეამციროს დაბნეულობა ერთად -o ვარიანტი. მაგალითად, მაგალითად - ჯაჭვი გამოიმუშავებს გამომავალი ფაილის სახელს ჯადოსნულს, ხოლო - ოქმს ადგენს NMAGIC დროშა.

მრავალრიცხოვანი წერილობითი პარამეტრების არგუმენტები უნდა შეიცავდეს ვარიანტის სახელიდან თანასწორობის სიმბოლოს ან ცალკე არგუმენტად იქნეს მიჩნეული, მაშინ მათთვის საჭირო ვარიანტი. მაგალითად, - TRACE- სიმბოლო foo და - TRACE- სიმბოლო = foo უდრის. მრავალრიცხოვანი წერილი პარამეტრების სახელების უნიკალური აბრევიატურები მიიღება.

შენიშვნა - თუ ბმულს ირიბად უბიძგებს, შემდგენლის მძღოლის მეშვეობით (მაგ. Gcc ) მაშინ ყველა ბმულის ბრძანების პარამეტრები უნდა შეესაბამებოდეს -Wl- ს (ან კონკრეტული კომპილერის მძღოლისთვის)

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

ეს მნიშვნელოვანია, რადგან სხვაგვარად შემდგენელი მძღოლის პროგრამა შეიძლება ჩუმად ჩამოაგდეს ლინგერის პარამეტრები, რის შედეგადაც ცუდი ბმული.

GNU გინეტერის მიერ მიღებული გენერალური ბრძანების სტრიქონების ცხრილი არის:

- სიტყვით

ეს პარამეტრი მხარს უჭერს HP / UX თავსებადობას. სიტყვის არგუმენტი უნდა იყოს ერთ-ერთი სიმები არქივი , გაზიარებული ან ნაგულისხმევი . -არქივი ფუნქციურად ექცევა -ბასტას , ხოლო მეორე ორი საკვანძო სიტყვები ფუნქციურად იდენტურია -ბიდინამიკა . ეს პარამეტრი შეიძლება გამოყენებულ იქნას ნებისმიერ დროს.

- არქიტექტურა

- არქიტექტურა

მიმდინარე გათავისუფლებას ld , ეს ვარიანტი სასარგებლოა მხოლოდ Intel 960 ოჯახური არქიტექტურა. ამ ld კონფიგურაციაში, არქიტექტურის არგუმენტი განსაზღვრავს 960 არქიტექტურულ არქიტექტურულ არქიტექტურას, რაც საშუალებას აძლევს ზოგიერთ გარანტიას და საარქივო-ბიბლიოთეკის ძიების გზავნილის შეცვლას.

Ld- ის მომავალი რელიზები შესაძლოა სხვა არქიტექტურის ოჯახებისთვის მსგავსი ფუნქციონირების მხარდასაჭერად შეძლონ.

-b შეყვანის ფორმატში

--format = შეყვანის ფორმატში

ld შეიძლება კონფიგურირებული იყოს ერთზე მეტი ობიექტის ფაილის მხარდასაჭერად. თუ თქვენი ld კონფიგურაცია ამ გზით, შეგიძლიათ გამოიყენოთ -b პარამეტრი განსაზღვროს ბინარული ფორმატის შეყვანის ობიექტის ფაილი, რომ დაიცვას ეს ვარიანტი ბრძანების. მაშინაც კი, როდესაც ld არის კონფიგურირებული ალტერნატიული ობიექტის ფორმატების მხარდასაჭერად, ჩვეულებრივ არ უნდა მიუთითოთ ეს, რადგან ld უნდა იყოს კონფიგურირებული, რომ როგორც default input ფორმატში, ჩვეულებრივი ფორმატის თითოეული მანქანა. შეყვანის ფორმა არის ტექსტის სტრიქონი, BFD ბიბლიოთეკების მხარდაჭერილი კონკრეტული ფორმატის სახელი. (შეგიძლიათ ჩამოთვლიოთ არსებული ორობითი ფორმატები objdump -i .)

თქვენ შეგიძლიათ გამოიყენოთ ეს ვარიანტი, თუ თქვენ აკავშირებთ ფაილებს უჩვეულო ორობითი ფორმატით. თქვენ ასევე შეგიძლიათ გამოიყენოთ ბ-ნი ფორმატების გადატანა (სხვადასხვა ფორმატის ობიექტის ფაილების დასაკავშირებლად), მათ შორის- ბ-ის შეყვანის ფორმატში, თითოეული ჯგუფის ობიექტამდე, კონკრეტულ ფორმატში.

ნაგულისხმევი ფორმატი მიიღება გარემოს ცვლადი "GNUTARGET".

თქვენ ასევე შეგიძლიათ განსაზღვროთ შეყვანის ფორმატი სკრიპტიდან ბრძანების "TARGET" - ის გამოყენებით;

-c MRI-commandfile

--mri-script = MRI-commandfile

MRI- ის მიერ წარმოდგენილ ლინკებთან თავსებადობისათვის, LD იღებს სკრიპტის ფაილებს, რომლებიც დაწერილია ალტერნატიული, შეზღუდული ბრძანების ენაზე. დანერგვა MRI სკრიპტის ფაილების ვარიანტი -c ; გამოიყენეთ -T ფუნქცია, რომელიც აწარმოებს ლინკირების სკრიპტებს, რომლებიც დაწერილია ზოგადი დანიშნულების ld სკრიფტინგის ენაზე. თუ MRI-cmdfile არ იარსებებს, ld გამოიყურება მასზე მითითებულ ნებისმიერ- L პარამეტრების მითითებით.

-d

-dc

-dp

ეს სამი ვარიანტი ეკვივალენტია; მრავალჯერადი ფორმები მხარს უჭერენ თავსებადობას სხვა ბმულებთან. ისინი საერთო სიმბოლოების სივრცეს მიანიჭებენ მაშინაც კი, თუ გადაადგილებული გამომავალი ფაილი მითითებულია ( -რ ). სკრიპტის ბრძანება "FORCE_COMMON_ALLOCATION" აქვს იგივე ეფექტს.

-e შესვლისას

--entry = შესვლის

გამოიყენეთ ჩანაწერი, როგორც გამოხატული სიმბოლო თქვენი პროგრამის დაწყების მიზნით, ვიდრე ნაგულისხმევი შესვლის წერტილი. თუ არ არსებობს სიმბოლო დაასახელა ჩანაწერი , ბმერი შეეცდება შევიდეს შესვლის რიცხვით და გამოიყენოს, როგორც შესვლის მისამართი (რიცხვი 10 ინტერპრეტაციით იქნება გამოყენებული, შეგიძლიათ გამოიყენოთ წამყვანი 0x ბაზის 16 ან წამყვანი 0 ბაზისთვის 8).

-E

- ექსპორტის დინამიკა

დინამიურად დაკავშირებული შესრულებისას შექმნისას ყველა სიმბოლოს დინამიური სიმბოლო მაგიდის დამატება. დინამიური სიმბოლო მაგიდა სიმბოლოების სიმრავლეა, რომელიც დინამიურ ობიექტებს ხედავენ დროს.

თუ არ გამოიყენებთ ამ პარამეტრს, დინამიური სიმბოლო მაგიდა ჩვეულებრივ შეიცავს მხოლოდ იმ სიმბოლოებს, რომლებიც მითითებულია ბმულით დინამიურ ობიექტზე.

თუ "დლოპენს" იყენებთ დინამიური ობიექტის ჩასატვირთად, რომელიც საჭიროებს პროგრამის მიერ განსაზღვრულ სიმბოლოებს, ვიდრე სხვა დინამიკურ ობიექტს, მაშინ, ალბათ, საჭიროა ამ პარამეტრის გამოყენება პროგრამის ჩართვისას.

ასევე შეგიძლიათ გამოიყენოთ ვერსია სკრიპტი, თუ რა სიმბოლოებს უნდა დაემატოს დინამიური სიმბოლო მაგიდა, თუ გამომავალი ფორმატი მხარს უჭერს მას. იხილეთ ვერსია -ვერსიის სკრიპტის აღწერა {VERSION}.

-EB

ბმული დიდი ენდრიანი ობიექტები. ეს გავლენას ახდენს default output ფორმატში.

-EL

ბმული პატარა- endian ობიექტები. ეს გავლენას ახდენს default output ფორმატში.

-f

- დამხმარე სახელი

ELF- ის გაზიარების ობიექტის შექმნისას, განსაზღვრავს შიდა DT_AUXILIARY ველს მითითებულ სახელს. ეს ეუბნება დინამიურ ბმულს, რომ საერთო ობიექტის სიმბოლო მაგიდა გამოყენებული უნდა იქნას დამხმარე ფილტრის სახით, რომელიც გაიზიარა ობიექტის სახელის სიმბოლო მაგიდაზე.

თუ მოგვიანებით ამ ფილტრის ობიექტის წინააღმდეგ პროგრამას უკავშირებთ, მაშინ, როდესაც პროგრამას აწარმოებთ, დინამიური ლინკი იხილავს DT_AUXILIARY ველს. თუ დინამიური ლინკი წყვეტს ფილტრის ობიექტის ნებისმიერი სიმბოლოს, ის პირველად შეამოწმებს თუ არა განსაზღვრება ობიექტურ ობიექტში. თუ არსებობს ერთი, ის გამოყენებული იქნება ფილტრის ობიექტის განსაზღვრის ნაცვლად. გაზიარებული ობიექტის სახელი არ არსებობს. ამდენად, ობიექტის ობიექტის სახელი შეიძლება გამოყენებულ იქნას გარკვეული ფუნქციების ალტერნატიული განხორციელების უზრუნველსაყოფად, ალბათ, გამართვისთვის ან მანქანების კონკრეტული შესრულებისთვის.

ეს პარამეტრი შეიძლება არაერთხელ იყოს მითითებული. DT_AUXILIARY- ის ჩანაწერები შეიქმნება იმ ბრძანებით, სადაც ისინი გამოჩნდება ბრძანებათა სიაში.

-F სახელი

- ფიფერის სახელი

ELF- ის გაზიარების ობიექტის შექმნისას, განსაზღვრავს შიდა DT_FILTER ველს მითითებულ სახელს. ეს ეუბნება დინამიურ ბმულს, რომ იქმნება საერთო ობიექტის სიმბოლო მაგიდა, რომელიც უნდა იქნეს გამოყენებული როგორც ობიექტის სახელითა სიმბოლოთა ცხრილის სახით.

თუ მოგვიანებით ამ ფილტრის ობიექტის წინააღმდეგ პროგრამას უკავშირებთ, მაშინ, როდესაც პროგრამას აწარმოებთ, დინამიური ლინკი იხილავს DT_FILTER ველს. დინამიური ლინკი, სიმბოლოების გადასაწყვეტად, ფილტრის ობიექტის სიმბოლოთა ცხრილის მიხედვით, ჩვეულებრივია, მაგრამ ის ფაქტობრივად უკავშირდება საერთო ობიექტის სახელით განსაზღვრულ განმარტებებს. ამდენად, ფილტრის ობიექტი შეიძლება გამოყენებულ იქნას ობიექტის სახელის სიმბოლოების შერჩევისთვის.

ზოგიერთი ხანდაზმული დამკვრელი გამოყენებული იქნა -F პარამეტრი მთელი შედგენილ ხელსაწყოს მთლიანი შეყვანისა და გამომავალი ობიექტის ფაილების ობიექტის ფაილის ფორმატის დასადგენად. GNU ბმულს იყენებს სხვა მექანიზმები ამ მიზნით: the -b , --format , --oformat პარამეტრები, "TARGET" ბრძანება ბმულების სკრიპტებში და "GNUTARGET" გარემოს ცვლადი. GNU- ის ლინკი იგნორირებას მოახდენს -F პარამეტრიდან, როდესაც არ შეიქმნება ELF- ის საერთო ობიექტი.

სახელი

ELF- ის დამონტაჟების ან გაზიარებული ობიექტის შექმნისას, დარეკეთ NAME- ის შესრულებისას ან გაზიარებულ ობიექტს, როდესაც DT_FINI- ის ფუნქციის მისამართს ადგენს. ჩვეულებრივ, ბმული იყენებს "_ფინი" ფუნქციას, როგორც დარეკვა.

-გ

იგნორირებულია. გათვალისწინებული სხვა მოწყობილობებთან თავსებადობა.

-G ღირებულება

--gpsize = მნიშვნელობა

დააყენეთ მაქსიმალური ზომის ობიექტი ოპტიმიზირებულია GP- ის რეესტრის გამოყენებით. ეს არის მხოლოდ ობიექტური ფაილის ფორმატი, როგორიცაა MIPS ECOFF, რომელიც მხარს უჭერს მსხვილ და პატარა ობიექტებს სხვადასხვა სექციებში. ეს იგნორირებულია სხვა ობიექტის ფაილის ფორმატებში.

-ჰ სახელი

-სახელი = სახელი

ELF- ის გაზიარების ობიექტის შექმნისას, განსაზღვრავს შიდა DT_SONAME სფეროს მითითებულ სახელს. როდესაც შესრულება უკავშირდება საერთო ობიექტს, რომელსაც აქვს DT_SONAME ველი, მაშინ როდესაც შესრულების დინამიკური ლინკი იცვლება DT_SONAME- ის მიერ განსაზღვრული საერთო ობიექტის დატვირთვის ნაცვლად, ვიდრე ბმულს გადაეცემა ფაილის სახელი.

-მე

შეასრულეთ დამატებითი ლინკი (იგივე როგორც ვარიანტი- R ).

სახელი

ELF- ის დამონტაჟებული ან გაზიარებული ობიექტის შექმნისას, დარეკეთ NAME- ზე შესრულებისას ან გაზიარებული ობიექტის დატვირთვისას, DT_INIT- ის ფუნქციის მისამართის დადგენისას. ჩვეულებრივ, ბმული იყენებს "_ინით" ფუნქციას, როგორც დარეკვა.

-l არქივი

- ლიბერია = არქივი

დაამატეთ არქივში ფაილის არქივი ფაილების სიას ლინკთან. ეს პარამეტრი შეიძლება გამოყენებულ იქნას ნებისმიერ დროს. ld მოძებნის ყველა გზავნილს "libarchive.a" - ის ყველა სტატიისთვის.

სისტემებზე, რომლებიც მხარს უჭერენ საერთო ბიბლიოთეკებს, ld- ს შეუძლია აგრეთვე მოძებნოს ბიბლიოთეკები გაფართოებით, გარდა "ა". კერძოდ, ELF- ს და SunOS სისტემებში, ld შეისწავლის ბიბლიოთეკას ბიბლიოთეკის გაფართოებით ". ასე რომ, სანამ ეძებენ ერთი" გაფართოებით ". კონვენციით, ". ასე" გაფართოება მიუთითებს საერთო ბიბლიოთეკაში.

ბმულები დაკვირვებას მხოლოდ არქივში ეძებენ, იმ ადგილას, სადაც მითითებულია ბრძანებათა სტრიქონი. თუ არქივი განსაზღვრავს სიმბოლოს, რომელიც გარკვეულ ობიექტში არ არის განსაზღვრული, რომელიც არხის არქივამდე გამოჩნდა, ბმული შეიცავს არქივში არსებულ ფაილებს. თუმცა, ბრძანების ქვედანაყოფში გამოტანილი ობიექტის ცალკეული სიმბოლო არ გამოიწვევს ბმულს არქივის მოძიებაზე.

იხილეთ - ( ვარიანტი, რათა აიძულოს დამაკავშირებელი არქივები რამდენჯერმე.

თქვენ შეგიძლიათ იგივე არქივის სიაში შევა ბრძანებათა სტრიქონიდან.

ამ ტიპის არქივი ძიება სტანდარტულია Unix- ის ბმულებისთვის. თუმცა, თუ თქვენ იყენებთ ld oniIX- ს, აღვნიშნეთ, რომ ეს განსხვავდება AIX- ის ბმულიდან.

-L ძიება

- library-path = searchdir

დაამატეთ გზავნილს ბილიკების სიას, რომელიც ld არქივში ბიბლიოთეკებს და ld კონტროლის სკრიპტებს მოძებნის. თქვენ შეგიძლიათ გამოიყენოთ ეს პარამეტრი არაერთხელ. კატალოგები ეძებენ ბრძანებას, სადაც მითითებულია ბრძანებათა სტრიქონით. ბრძანების ხაზში მითითებული დირექტივები ჩხრეკის დაწყებამდე იძებნება. All -L პარამეტრები ვრცელდება ყველა -l პარამეტრებზე, მიუხედავად იმისა, თუ რა პარამეტრების გამოჩნდება.

თუ searchdir იწყება "=", მაშინ "=" შეიცვლება sysroot prefix- ით , რომელიც მითითებულია ბმული კონფიგურაციის დროს.

ჩანაცვლებული ბილიკების ნაგულისხმევი კომპლექტი ( -თუ მითითებულია გარეშე) დამოკიდებულია იმაზე, თუ რომელი ემულაციის რეჟიმი ld იყენებს და ზოგიერთ შემთხვევაში, როგორ იყო კონფიგურირებული.

ბილიკები შეიძლება მითითებულ იქნეს ბმულზე სკრიპტში "SEARCH_DIR" ბრძანებით. აღნიშნულია, რომ ამ მიმართულებით მითითებულ დირექტივებს ეძებენ იმ პუნქტში, სადაც ბმულის სკრიპტი გამოჩნდება ბრძანების რეჟიმში.

-m ემულაცია

ემულაცია ემულაციის ბმულით. შეგიძლიათ მიუთითოთ ხელმისაწვდომი ემბლემები --verbose ან -V ვარიანტებით.

თუ მ-ის ვარიანტი არ არის გამოყენებული, ემულაცია აღებულია "LDEMULATION" გარემოს ცვლადიდან, თუ ეს განსაზღვრულია.

წინააღმდეგ შემთხვევაში, ნაგულისხმევი ემულაცია დამოკიდებულია იმაზე, თუ როგორ არის კონფიგურაცია.

-მ

--print- რუკა

ამობეჭდე ბმული რუკა სტანდარტული გამომავალი. ბმული რუკა უზრუნველყოფს ინფორმაციას ბმულზე, მათ შორის:

*

სადაც ობიექტი ფაილები და სიმბოლოები შედის მეხსიერებაში.

*

რა სიმბოლოები გამოყოფილია.

*

ყველა არქივი, რომელიც შედის ბმულში, აღინიშნება სიმბოლოების შესახებ, რამაც გამოიწვია არქივის წევრი.

-ნ

--nmagic

განყოფილებების გვერდის განლაგება გამორთეთ და გამოაგზავნეთ გამომავალი როგორც "NMAGIC".

-N

- ომი

წაიკითხეთ ტექსტი და მონაცემები სექციების წაკითხვისა და ჩაწერადი. გარდა ამისა, არ გაააქტიუროთ მონაცემთა სეგმენტი და გათიშეთ საერთო ბიბლიოთეკების წინააღმდეგ. თუ გამომავალი ფორმატი მხარს უჭერს Unix სტილის ჯადოსნურ რიცხვებს, გამოაქვეყნეთ გამომავალი როგორც "OMAGIC".

- არა- omagic

ეს პარამეტრი უარყოფს -N პარამეტრის ეფექტებს. იგი ადგენს ტექსტის მონაკვეთს, რომ წაიკითხოს მხოლოდ და გააკონტროლოს მონაცემთა სეგმენტი გვერდზე შეესაბამება. შენიშვნა - ეს პარამეტრი არ იძლევა დაკავშირებას საერთო ბიბლიოთეკების წინააღმდეგ. გამოიყენეთ -ბინამიკა ამისათვის.

-o გამომავალი

--output = გამომავალი

გამოვიყენოთ გამომავალი როგორც LD- ის მიერ წარმოებული პროგრამის დასახელება; თუ ეს ვარიანტი არ არის მითითებული, სახელი a.out გამოიყენება default. სკრიპტის ბრძანება "OUTPUT" ასევე შეუძლია გამოაგზავნოს გამომავალი ფაილის სახელი.

-O დონე

თუ დონე არის რიცხვითი მნიშვნელობები, რომელიც უფრო მაღალია, ვიდრე ნულოვანი ld ოპტიმიზაცია გამომავალი. ამან შეიძლება მნიშვნელოვნად გაიზარდოს და, შესაბამისად, სავარაუდოდ, მხოლოდ საბოლოო ორობითი.

-q

- მიმდევარი

დატოვეთ გადაადგილების სექციები და შინაარსი სრულად დაკავშირებულ exececutables. ბმული ანალიზისა და ოპტიმიზაციის მექანიზმებს შეიძლება ეს ინფორმაცია ესაჭიროებოდეს, რათა შეასრულოს შესრულების სწორი მოდიფიკაცია. ეს დიდ შედეგებს იძლევა.

ეს ვარიანტი ამჟამად მხოლოდ ELF პლატფორმებზეა მხარდაჭერილი.

-რ

- სამშვიდობო

გენერირება relocatable გამომავალი --- ანუ, გამოიმუშავებს გამომავალი ფაილი, რომელიც თავის მხრივ ემსახურება როგორც შეყვანის to ld . ეს ხშირად ნაწილობრივ აკავშირებს . როგორც გვერდითი ეფექტი, გარემოში, რომელიც მხარს უჭერს სტანდარტული Unix ჯადოსნური ნომრები, ეს ვარიანტი ასევე ადგენს გამომავალი ფაილის ჯადოსნური ნომერი "OMAGIC". თუ ეს ვარიანტი არ არის მითითებული, აბსოლუტური ფაილი დამზადებულია. C ++ პროგრამების კავშირით, ეს პარამეტრი კონსტრუქტორებს არ მოხსნის მითითებებს; ამის გაკეთება, გამოიყენეთ -Ur .

როდესაც შეყვანის ფაილს არ გააჩნია იგივე ფორმატის გამომავალი ფაილი, ნაწილობრივი კავშირი მხოლოდ მხარს უჭერს თუ შეყვანის ფაილი არ შეიცავს რაიმე გადატანას. განსხვავებული გამომავალი ფორმატები შეიძლება ჰქონდეს შემდგომი შეზღუდვები; მაგალითად, ზოგიერთი "a.out" -ზე დაფუძნებული ფორმატები მხარს არ უჭერს ნაწილობრივ შეყვანის ფაილებს სხვა ფორმატებში.

ეს ვარიანტი იგივეა, რაც -i .

-R ფაილის სახელი

--just- სიმბოლოები = ფაილის სახელი

წაიკითხეთ სიმბოლო სახელები და მათი მისამართები ფაილის სახელიდან, მაგრამ არ გადააქციე მას ან შედის მასში გამოტანაში. ეს საშუალებას აძლევს გამომავალ ფაილს სიმბოლურად მიუთითონ სხვა პროგრამებში განსაზღვრული მეხსიერების აბსოლუტური ადგილები. თქვენ შეგიძლიათ გამოიყენოთ ეს ვარიანტი არაერთხელ.

სხვა ELF- ის ლინკებთან თავსებადობის შემთხვევაში, თუ -R პარამეტრი მოჰყვება დირექტორია სახელს, ვიდრე ფაილის სახელი, იგი განიხილება -ფილტის პარამეტრი.

-გ

--strip- ყველა

გამოტოვეთ ყველა სიმბოლო ინფორმაცია გამომავალი ფაილისგან.

-S

- დისპლეი

დაბლოკვის სიმბოლო ინფორმაციის (მაგრამ არა ყველა სიმბოლოს) გამოტოვება გამომავალი ფაილისგან.

-t

- TRACE

ბეჭდვის სახელები შეყვანის ფაილი, როგორც ld პროცესების მათ.

-T Scriptfile

--script = scriptfile

გამოიყენეთ scriptfile როგორც ბმული სკრიპტი. ეს სკრიპტი შეცვლის ld- ის default linker script (დაამატეთ მას), ამიტომ commandfile- მა უნდა მიუთითოს ყველაფერი, რაც აუცილებელია გამომავალი ფაილის აღსაწერად. თუ scriptfile არ იარსებებს მიმდინარე დირექტორიაში, "ld" გამოიყურება ის წინამორბედი- L პარამეტრების მითითებით. Multiple -T პარამეტრების დაგროვება.

-u სიმბოლო

--undefined = სიმბოლო

Force სიმბოლო უნდა შევიდნენ გამომავალი ფაილში, როგორც განუსაზღვრელი სიმბოლო. ამის გაკეთება შეიძლება, მაგალითად, გამოიწვიოს დამატებითი მოდულების დამაკავშირებელი სტანდარტული ბიბლიოთეკებისგან. -უ შეიძლება განმეორდეს სხვადასხვა ვარიანტის არგუმენტებთან დამატებითი undefined სიმბოლოების შესასვლელად. ეს ვარიანტია "EXTERN" ბმული სკრიპტის ბრძანების ექვივალენტურია.

-

C ++ პროგრამების გარდა, ეს ვარიანტი უდრის: R- ის გადაქცევადი გამომავალი --- ანუ გამომავალი ფაილი, რომელიც თავის მხრივ შეესაბამება შეყვანისას ld- ს . C + + პროგრამების აკრეფისას, - არ ახდენს კონსტრუქციების მითითებას, განსხვავებით - R. ეს არ მუშაობს იმისათვის, რომ გამოიყენოთ ფაილები, რომლებიც თავად იყვნენ დაკავშირებულნი- მას შემდეგ, რაც მშენებლობის მაგიდა აშენდა, ვერ დაემატება. გამოიყენეთ -მხოლოდ უკანასკნელი ნაწილობრივი ბმული, და- ს სხვებისთვის.

- = [ სექცია ]

ქმნის ცალკე გამომავალ მონაკვეთს თითოეული შეყვანის განყოფილების SECTION შესაბამისი ან, თუ სურვილისამებრ wildcard SECTION არგუმენტი აკლია, ყველა ობოლი შეყვანის განყოფილებაში. ობოლი სექცია ერთი კონკრეტულად არ არის მითითებული ბმული სკრიპტში. თქვენ შეგიძლიათ გამოიყენოთ ეს ოფცია მრავალჯერ ბრძანებათა სტრიქონით; იგი ხელს უშლის შეყვანის განყოფილებების ნორმალურ შერწყმას ამავე სახელწოდების გამოყენებით, რომელიც გამოიმუშავებს გამომავალი განყოფილების ამოცანებს ბმული სკრიპტში.

-ვ

--ვერსია

-V

აჩვენე ვერსია ნომერი ld- ს . -V ვარიანტი ასევე ჩამოთვლილია მხარდაჭერილ ემოციებს.

-x

- დისკო - ყველა

წაშალეთ ყველა ადგილობრივი სიმბოლო.

-X

- დისკო-ადგილობრივები

ყველა დროებითი ადგილობრივი სიმბოლოების წაშლა. უმეტეს სამიზნეებისთვის, ეს არის ადგილობრივი სიმბოლოები, რომელთა სახელებიც დაიწყება .

- სიმბოლო

- სიმბოლო = სიმბოლო

ბეჭდვის სახელი თითოეული დაკავშირებული ფაილი, რომელშიც სიმბოლო ჩანს. ეს პარამეტრი შეიძლება არაერთხელ მიეცეს. ბევრ სისტემებში აუცილებელია ხაზგასმის მომზადება.

ეს პარამეტრი სასარგებლოა, როდესაც თქვენ გაქვთ დაუსაბუთებელი სიმბოლო თქვენი ბმულით, მაგრამ არ იცი, სად არის მითითება.

- გზა

დაამატეთ გზა ბიბლიოთეკის ძიების გზაზე. ეს ვარიანტი არსებობს Solaris თავსებადობისთვის.

-z სიტყვით

აღიარებული საკვანძო სიტყვები "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "ახლა", "წარმოშობის", "combreloc", "nocombreloc" და "nocomreloc" ". სხვა საკვანძო სიტყვები იგნორირებულია Solaris თავსებადობისთვის. "initfirst" აღნიშნავს ობიექტს, რომელიც პირველად დაიწყება runtime ნებისმიერ სხვა ობიექტამდე. "შემოთავაზება" აღნიშნავს, რომ მისი სიმბოლო მაგიდა ყველა სიმბოლოზე ადრე ჩნდება, მაგრამ პირველადი შემსრულებელია. "loadfltr" აღნიშნავს ობიექტს, რომლის ფილტრებიც დაუყოვნებლივ დამუშავდება runtime. "nodefaultlib" აღნიშნავს ობიექტს, რომ ამ ობიექტის დამოკიდებულების ძიება იგნორირება იქნება ნებისმიერი ბიბლიოთეკის ძებნის ბილიკები. "nodelete" აღნიშნავს ობიექტი არ უნდა ჩაიტვირთოს Runtime. "nodlopen" აღნიშნავს ობიექტი არ არის ხელმისაწვდომი "dlopen". "nodump" ნიშნებს ობიექტი არ შეიძლება dumped მიერ "dldump". "ახლა" აღნიშნავს ობიექტს, რომელიც არარეზომიერად მოქმედებს. "წარმოშობის" ნიშნები შეიძლება შეიცავდეს ORIGIN- ს. "დეფექტები" არ გამოუცნობი სიმბოლოებს. "muldefs" იძლევა მრავალჯერადი განსაზღვრებებს. "combreloc" აერთიანებს მრავალჯერადი გადანაწილების სექციებს და ქმნის მათ დინამიური სიმბოლოების ძიების ქეშირების შესაძლებლობას.

"nocombreloc" გამარტივებულ რამოდენიმე გადანაწილებას აერთიანებს. "nocopyreloc" ხელს უშლის ასლის გადაადგილების წარმოებას.

- ( არქივები -)

--start- ჯგუფის არქივები --end-group

არქივები უნდა იყოს არქივების ფაილების ჩამონათვალი . ისინი შეიძლება იყოს აშკარა ფაილის სახელები, ან -l პარამეტრები.

მითითებულ არქივში არაერთხელ ჩხრეკა ხდება, სანამ ახალი არგუმენტირებული ცნობები არ შეიქმნება. ჩვეულებრივ, არქივი მხოლოდ ერთხელ იძებნება იმისათვის, რომ იგი მითითებულია ბრძანებათა სტრიქონით. იმ შემთხვევაში, თუ ამ არქივში სიმბოლოა აუცილებელი, რათა არ მოხდეს იმ ობიექტის მიერ განსაზღვრული განუსაზღვრელი სიმბოლო, რომელიც მოგვიანებით ბრძანებათა სტრიქონში გამოჩნდება, ლინკი ვერ შეძლებს ამ მითითების გადასაჭრელად. არქივების დაჯგუფებით, ისინი ყველაფერს ეძებენ არაერთხელ, სანამ ყველა შესაძლო მითითება არ მოგვარდება.

ამ პარამეტრის გამოყენება მნიშვნელოვანი შესრულების ღირებულებაა. უმჯობესია გამოვიყენოთ ეს მხოლოდ მაშინ, როდესაც ორი ან მეტი არქივიდან გარდაუვალი მრგვალი სარწმუნოა.

- Accept-unknown-input-arch

- არ-მიღება-უცნობი- input-arch

ეუბნება ლინკერს, შეყვანის ფაილების მიღება, რომლის არქიტექტურა ვერ იქნება აღიარებული. ვარაუდი ისაა, რომ მომხმარებელი იცის, რას აკეთებს და განზრახ სურს ამ უკავშირდება უცნობ ფაილებში. ეს იყო კონფიგურაციის ნაგულისხმევი ქცევა, გათავისუფლების დაწყებამდე 2.14. ნაგულისხმევი ქცევის გათავისუფლება 2.14 წლიდან არის უარყოფა ასეთი შეყვანის ფაილები და ა.შ. - მიღება-უცნობი შეყვანის-თაღოტის ვარიანტი დაემატა აღდგენას ძველი ქცევის.

-საკუთარი სიტყვა

ეს ვარიანტი იგნორირებულია SunOS თავსებადობისთვის .

-ბიდინამიკური

-დი

-call_shared

ბმული დინამიური ბიბლიოთეკების წინააღმდეგ. ეს არის მხოლოდ მნიშვნელოვანი პლატფორმაზე, რომლისთვისაც გაზიარებულია ბიბლიოთეკები . ეს პარამეტრი ჩვეულებრივ ნაგულისხმევია ასეთი პლატფორმებით. ამ ვარიანტის სხვადასხვა ვარიანტები სხვადასხვა სისტემებთან თავსებადობაა. თქვენ შეგიძლიათ გამოიყენოთ ეს ვარიანტი მრავალჯერადი ჯერ ბრძანებათა სტრიქონით: ის გავლენას ახდენს ბიბლიოთეკის მოძიება -l- ის ვარიანტები, რომლებიც მიჰყვება მას.

-ბგუტი

დინამიური განყოფილებაში "DT_FLAGS_1" შესვლისას "DF_1_GROUP" დროშა დააყენეთ. ეს იწვევს Runtime Linker გაუმკლავდეს lookups ამ ობიექტს და მისი dependencies უნდა შესრულდეს მხოლოდ შიგნით ჯგუფი. - არ არის განსაზღვრული. ეს ვარიანტი მხოლოდ მნიშვნელოვანია ELF პლატფორმებზე, რომლებიც მხარს უჭერენ საერთო ბიბლიოთეკებს .

-ბასკ

-dn

-non_shared

- სტიკ

არ უკავშირდება საერთო ბიბლიოთეკებს. ეს არის მხოლოდ მნიშვნელოვანი პლატფორმაზე, რომლისთვისაც გაზიარებულია ბიბლიოთეკები. ამ ვარიანტის სხვადასხვა ვარიანტები სხვადასხვა სისტემებთან თავსებადობაა. თქვენ შეგიძლიათ გამოიყენოთ ეს ვარიანტი მრავალჯერადი ჯერ ბრძანებათა სტრიქონით: ის გავლენას ახდენს ბიბლიოთეკის მოძიება -l- ის ვარიანტები, რომლებიც მიჰყვება მას.

-ბიბლიური

საერთო ბიბლიოთეკის შექმნისას, გლობალური სიმბოლოების მითითება შეესაბამება განსაზღვრულ ბიბლიოთეკაში განსაზღვრულ განმარტებას. ჩვეულებრივ, შესაძლებელი იქნება საერთო ბიბლიოთეკის წინააღმდეგ დაკავშირებული პროგრამა, რომელიც დაკავშირებულია განსაზღვრულ ბიბლიოთეკაში განსაზღვრულ განმარტებაში. ეს ვარიანტი არის მხოლოდ მნიშვნელოვანი ELFplatforms- ზე, რომელიც მხარს უჭერს საერთო ბიბლიოთეკებს.

- შემოწმების სექციები

- არა-შემოწმების სექციები

სთხოვს ბმულს, არ გადაამოწმოთ განყოფილების მისამართები მას შემდეგ, რაც ისინი დანიშნულნი არიან დაინახონ, თუ არსებობს რაიმე გადახურვა. ჩვეულებრივ, ბმულები შეასრულებენ ამ შემოწმებას, და თუ იგი აღმოაჩენს რაიმე გადახურებას, ის სათანადო შეცდომის შეტყობინებებს შეიტანს. ბმულის შესახებ იცის, და განათავსებს თანხებს შეფუთვაზე. ნაგულისხმევი ქცევის აღდგენა შესაძლებელია ბრძანების სტრიქონით - check-sections- ის გამოყენებით .

--cref

გამოყვანის ჯვარი მინიშნება მაგიდა. იმ შემთხვევაში, თუ ბმული რუკის ფაილი იწარმოება, ჯვარედინი მინიშნება მაგიდასთან იბეჭდება რუკაზე. წინააღმდეგ შემთხვევაში, დაბეჭდილია სტანდარტული გამომავალი.

მაგიდის ფორმატი განზრახ მარტივია, რომ საჭიროა სკრიპტით დამუშავება. სიმბოლოები იბეჭდება, სახელით დალაგებულია. თითოეული სიმბოლოზე მოცემულია ფაილის სახელები. თუ სიმბოლო განისაზღვრება, პირველი ფაილი ჩამოთვლილი არის განსაზღვრის მდებარეობა. დარჩენილი ფაილი შეიცავს სიმბოლოს მითითებას.

- არ- define- საერთო

ეს პარამეტრი ხელს უშლის საერთო სიმბოლოების მისამართების გადაცემას. სკრიპტის ბრძანება "INHIBIT_COMMON_ALLOCATION" აქვს იგივე ეფექტს.

არა-განსაზღვრა-საერთო ვარიანტი საშუალებას იძლევა decoupling გადაწყვეტილება მივანიჭოთ მისამართები საერთო სიმბოლოების არჩევანი გამომავალი ფაილის ტიპი; სხვაგვარად არა-გადაადგილებადი გამომავალი ტიპის ძალები საერთო სიმბოლოებისადმი მიმართვის მისამართები. გამოყენება არ-განსაზღვრა-საერთო საშუალებას იძლევა საერთო სიმბოლოები, რომლებიც მითითებულია საერთო ბიბლიოთეკისგან, რომელიც მხოლოდ ძირითად პროგრამებში მიუთითებს. ეს გამორიცხავს გამოუყენებელ დუბლიკატს სივრცეში საერთო ბიბლიოთეკაში, ასევე ხელს უშლის ნებისმიერ შესაძლო დაბნეულობას არასწორი დუბლიკატის გადასაჭრელად, როდესაც არსებობს დინამიური მოდულები, რომლებიც იყენებენ სპეციალური ძიების ბილიკებს Runtime სიმბოლოთა რეზოლუციისთვის.

--defsym სიმბოლო = გამოხატვა

შექმენით გლობალური სიმბოლო გამომავალ ფაილში, რომელიც შეიცავს გამოხატვის აბსოლუტურ მისამართზე. თქვენ შეგიძლიათ გამოიყენოთ ეს პარამეტრი რამდენჯერმე საჭიროა ბრძანების სიაში მრავალ სიმბოლოების განსაზღვრა. ამ კონტექსტში გამოხატული გამოხატვისათვის შეზღუდული ფორმა არითმეტიკაა: შეგიძლიათ ჰექსიდეციმური მუდმივი ან არსებულ სიმბოლოს მიანიჭოთ ან გამოიყენოთ "+" და "-" ჰექსადციმული მუდმივები ან სიმბოლოების დამატება ან გამოკლება. თუ საჭიროა უფრო დახვეწილი გამონათქვამები, განიხილეთ ბმული ბრძანების ენა სკრიპტის გამოყენებით. შენიშვნა: არ უნდა იყოს თეთრი სივრცე სიმბოლოს შორის , ტოლობის ნიშანი (`` = = ") და გამოხატულება .

- = [ სტილის ]

- არ- demangle

ეს პარამეტრები აკონტროლებს თუ არა სიმბოლოთა სახელების დეზინფორმაციის შეცდომების შეტყობინებები და სხვა გამომავალი. როდესაც ბმულით ითხოვს დეიმპილს, იგი ცდილობს იბეჭდება სიმბოლოთა სახელები იკითხება: ის ფრჩხილების წამყვანი ხაზების სახით გამოიყენება, თუ ისინი იყენებენ ობიექტის ფაილურ ფორმატს და გადააქვთ C ++ mangled სიმბოლოთა სახელები მომხმარებლის წაკითხულ სახელებში. განსხვავებული კომპილირებით განსხვავებული სტილის სტილები აქვთ. სურვილისამებრ demangling სტილის არგუმენტი შეიძლება გამოყენებულ იქნას აირჩიოს შესაბამისი demangling სტილი თქვენი შემდგენელი. ბმულები შეცვლიან დემიგლამდს, თუ არ შეიქმნება გარემოს ცვლადი COLLECT_NO_DEMANGLE . ეს პარამეტრები შეიძლება გამოყენებულ იქნას ნაგულისხმევებისთვის.

- დინამიური- Linker ფაილი

დააყენეთ დინამიური ბმული სახელწოდება. ეს მხოლოდ მნიშვნელოვანია, როდესაც დინამიურად დაკავშირებულია ELF executables- თან. ჩვეულებრივი დინამიური ლინკი ჩვეულებრივ სწორია; არ გამოიყენოთ ეს, თუ არ იცით, რას აკეთებ

- განაწილებული- relocs

ეს პარამეტრი მხოლოდ მნიშვნელოვანია, როდესაც MIPS- ის ჩადგმული PIC კოდი, რომელიც GNU-შემდგენლისა და შემსრულებლისთვის -membedded-pic ვარიანტით არის გამოყოფილი. ეს იწვევს ბმულს შექმნას მაგიდა, რომელიც შეიძლება გამოყენებულ იქნას Runtime- ში გადატანა ნებისმიერი მონაცემების გადათვლაში, რომელიც სტატისტიკურად ინიციალიზებულია მაჩვენებლის მნიშვნელობებზე. იხილეთ კოდი testsuite / ld-empic დეტალები.

- ფატალური გაფრთხილება

გაითვალისწინეთ ყველა გაფრთხილება, როგორც შეცდომები .

-force-exe-suffix

დარწმუნდით, რომ გამომავალი ფაილის აქვს .exe suffix.

თუ წარმატებით ჩაშენებული სრულად უკავშირდება გამომავალი ფაილი არ აქვს ". Exe " ან " .dll " suffix, ეს ვარიანტი აიძულებს ბმულს კოპირება გამომავალი ფაილის ერთი იგივე სახელით ". Exe" სუფიქსი. ეს პარამეტრი სასარგებლოა როდესაც Unmodified Unix- ის გამოყენება Microsoft Windows- ის მასპინძელია, რადგან Windows- ის ზოგიერთი ვერსია არ აწარმოებს სურათს, თუ არ დასრულდება ". Exe" სუფიქსიში.

--no-gc- სექციები

- გგ-სექციები

გამოიყენეთ გამოუყენებელი შეყვანის განყოფილებების ნაგვის შეგროვება. ის იგნორირებულია ობიექტებზე, რომლებიც არ ემხრობიან ამ პარამეტრს. ეს ვარიანტი არ არის თავსებადი -გ , და არ უნდა იყოს გამოყენებული დინამიური კავშირი. ნაგულისხმევი ქცევა (არ ასრულებს ამ ნაგვის კოლექციას ) შეიძლება აღდგეს ბრძანების ხაზის შესახებ --no-gc- სექციების მითითებით.

--help

ბეჭდვის შემაჯამებელი ბრძანების ხაზი პარამეტრები სტანდარტული გამომავალი და გასასვლელი.

- მიზნობრივი დახმარება

ბეჭდვის შემაჯამებელი ყველა სამიზნე კონკრეტული პარამეტრების სტანდარტული გამომავალი და გასასვლელი.

-Map mapfile

ამობეჭდვა ბმული რუკაზე ფაილის mapfile . იხილეთ M- ს პარამეტრის აღწერა, ზემოთ.

- არ-შენახვა-მეხსიერება

ld ნორმალურად ოპტიმიზირებულია მეხსიერების გამოყენების სიჩქარეზე მეხსიერებაში შეყვანის ფაილების სიმბოლო ცხრილების ქეშირებით. ეს პარამეტრი მოგვითხრობს მეხსიერების გამოყენების ოპტიმიზაციისთვის, საჭიროების შემთხვევაში სიმბოლოთა ცხრილების გადაწერას. ეს შეიძლება იყოს საჭირო, თუ ld ამოიწურება მეხსიერების სივრცეში, როდესაც აკავშირებს დიდი შესრულებადი.

- არ-განუსაზღვრელი

-z defs

ჩვეულებრივ, როდესაც არამატერიალური საერთო ბიბლიოთეკის შექმნა ხდება, undefined სიმბოლოები დაშვებულია და მარცხნივ გადაწყდება Runtime loader- ით. ეს პარამეტრები არ იძლევა ასეთ გაუთვალისწინებელ სიმბოლოებს.

- მრავალჯერადი-განმარტება

-z muldefs

ჩვეულებრივ, როდესაც სიმბოლო განისაზღვრება რამდენჯერმე, ბმული მოხსნის ფატალურ შეცდომას. ეს პარამეტრები საშუალებას იძლევა მრავალჯერადი განმარტებები და პირველი დეფინიცია გამოყენებული იქნება.

--allow-shlib-undefined

ნებადართული სიმბოლოები გაიზიარა ობიექტებშიც კი, როდესაც არ არის განსაზღვრული. წმინდა შედეგი იქნება ის, რომ რეგულარული ობიექტების განუსაზღვრელი სიმბოლოები კვლავ გამოიწვევს შეცდომას, მაგრამ გაურკვეველი ნიშნები გაზიარებულ ობიექტებში. არაფუნქციური შესრულების განხორციელება იძლევა იმის საშუალებას, რომ Runtime Linker- ი გაურკვეველი სიმბოლოების კლებულობს. თუმცა მაინც არსებობს ერთი სისტემა (BeOS), სადაც გაზიარებული ბიბლიოთეკების განუსაზღვრელი სიმბოლოები ნორმალურია, რადგან ბირთვის კავშირი იტვირთება დროულად, რათა შეარჩიოთ რომელი ფუნქცია ყველაზე შესაფერისი დღევანდელი არქიტექტურისთვის. IE დინამიურად შერჩევა შესაბამისი memset ფუნქცია. როგორც ჩანს, HPPA- ს საერთო ბიბლიოთეკებს აქვთ განუსაზღვრელი სიმბოლოები.

- არ- undefined- ვერსია

ჩვეულებრივ, როდესაც სიმბოლოს განუსაზღვრელი ვერსია აქვს, ეს ბმულები იგნორირებას უკეთებენ. ეს პარამეტრი არ იძლევა სიმბოლოებს განუსაზღვრელი ვერსიით და ფატალური შეცდომა გაიცემა ნაცვლად.

- არ გაფრთხილება- mismatch

ჩვეულებრივ ld- ი შეცდომას მოგცემთ, თუ თქვენ ცდილობთ უკავშირებენ შეყვანის ფაილებს, რომლებიც შეუსაბამოდ გამოირჩევიან, ალბათ იმიტომ, რომ ისინი შედგენილია სხვადასხვა პროცესორებისთვის ან სხვადასხვა ენდრიანობით. ეს ვარიანტი ეუბნება ld, რომ ის მდუმარედ უნდა დაუშვას ასეთი შესაძლო შეცდომები. ეს ვარიანტი უნდა იყოს გამოყენებული მხოლოდ ზრუნვით, იმ შემთხვევებში, როდესაც თქვენ გაქვთ გარკვეული სპეციალური ქმედება, რომელიც უზრუნველყოფს იმას, რომ ბმული შეცდომები შეუსაბამოა.

- არ-მთელი არქივი

გამორთული ეფექტი --whole- არქივი ვარიანტი შემდგომი არქივი ფაილი.

- ნინობიბიტი

შეინარჩუნეთ შესრულებადი გამომავალი ფაილი, როდესაც ის ჯერ კიდევ გამოსადეგია. ჩვეულებრივ, ბმული არ აწარმოებს გამომავალ ფაილებს, თუ ეს დაკავშირებულია შეცდომებს ბმულის პროცესში; იგი გამოსვლის გარეშე გამომავალი ფაილი, როდესაც იგი გამოსცემს ნებისმიერი შეცდომა განაწილებაზე.

- ნოსტ

მხოლოდ ბრძანებათა სტრიქონის სპეციალურ მითითება იგნორირებულია ბმული სკრიპტების მითითებით ბიბლიოთეკის დირექტორიები (ბრძანებათა სტრიქონის მითითებით).

- ფორმატის გამომავალი ფორმატი

ld შეიძლება კონფიგურირებული იყოს ერთზე მეტი ობიექტის ფაილის მხარდასაჭერად. თუ თქვენი ld კონფიგურაცია ამ გზით, შეგიძლიათ გამოიყენოთ --oformat ვარიანტი განსაზღვროს ორობითი ფორმატის გამომავალი ობიექტის ფაილი. მაშინაც კი, როდესაც ld კონფიგურირებულია ალტერნატიული ობიექტის ფორმატების მხარდაჭერისთვის, ჩვეულებრივ არ უნდა მიუთითოთ ეს, რადგან ld უნდა იყოს კონფიგურირებული იმისათვის, რომ გამოვიყენოთ სტანდარტული გამომავალი ფორმატის ფორმატის ყველაზე ჩვეულებრივი ფორმატის თითოეული მანქანა. გამომავალი ფორმატი არის ტექსტის სტრიქონი, BFD ბიბლიოთეკების მიერ მხარდაჭერილი კონკრეტული ფორმატის სახელი. (შეგიძლიათ ოლიმპიური ფაილების შესაძენად objdump -i .) სკრიპტის ბრძანება "OUTPUT_FORMAT" ასევე შეგიძლიათ დააკონკრეტოს გამოტანის ფორმატი, მაგრამ ეს პარამეტრი გადალახავს მას.

-კამაგიკური

ეს პარამეტრი იგნორირებულია Linux თავსებადობისთვის.

-

ეს ვარიანტი იგნორირებულია SVR4 თავსებადობისთვის.

--relax

პარამეტრი მანქანა დამოკიდებული ეფექტი. ეს ვარიანტი მხოლოდ რამდენიმე სამიზნეზეა მხარდაჭერილი.

ზოგიერთ პლატფორმაზე, --relax ვარიანტი ასრულებს გლობალურ ოპტიმიზაციას, რაც შეიძლება მოხდეს, როდესაც ბმული წყვეტს პროგრამას, როგორიცაა დამამშვიდებელი მისამართი რეჟიმები და ახალი ინსტრუქციების სინტაზირება ობიექტის ობიექტში.

ზოგიერთ პლატფორმაზე ეს ბმული გლობალურ ოპტიმიზაციებს შეუძლიათ მიიღონ სიმბოლური გაუქმება , რომლის შედეგადაც შესრულება შეუძლებელია. ეს ცნობილია, რომ საქმე Matsushita MN10200and MN10300 ოჯახი პროცესორები.

პლატფორმებზე, სადაც ეს არ არის მხარდაჭერილი, - დაშორება მიღებულია, მაგრამ იგნორირებულია.

- ფარული სიმბოლოები - ფაილის ფაილის სახელი

შეინარჩუნეთ მხოლოდ სიმბოლოები, რომლებიც ჩამოთვლილია ფაილის ფაილის სახით , დაუშვებელია სხვებისგან. ფაილის სახელი არის მხოლოდ ბინის ფაილი, ერთი სიმბოლოთა სახელი თითო ხაზით. ეს ვარიანტი განსაკუთრებით სასარგებლოა გარემოში (მაგალითად, VxWorks), სადაც დიდი გლობალური სიმბოლო მაგიდა თანდათან დაგროვდება, დროის მეხსიერებაში.

- ფარული სიმბოლოები-ფაილი არ გათიშავს განუსაზღვრელი სიმბოლოებს ან სიმბოლოებს გადაადგილებისთვის საჭირო.

თქვენ შეგიძლიათ მხოლოდ განსაზღვროთ - ფარული სიმბოლოები - ფაილის ერთხელ ბრძანებათა ზოლში. ეს overrides -s და -S .

რეჟიმი დრ

დააინსტალირეთ დირექტორიის ბიბლიოთეკის საძიებო ველში. ეს გამოიყენება მაშინ, როდესაც დაკავშირებულია ELFexecutable- თან საერთო ობიექტებთან. All -rpath არგუმენტები არის concatenated და გადაეცემა Runtime linker, რომელიც იყენებს მათ განთავსდება საერთო ობიექტების Runtime. ასევე გამოყენებულია ისეთ ობიექტებზე, რომლებიც საჭიროა ბმულისთვის მკაფიოდ შეტანილი საერთო ობიექტების მიერ; იხილეთ რუბრიკა-ბმული პარამეტრის აღწერა. იმ შემთხვევაში, თუ -rpath არ არის გამოყენებული ELF- ის შესრულების დროს, გამოყენებული იქნება გარემოს ცვლადი "LD_RUN_PATH" -ს შინაარსი.

SunSOS- ზე შეიძლება გამოყენებული იქნას -პრაპტის ვარიანტი. By default, on SunOS, linker ჩამოყალიბდება runtime ძებნის patch გარეთ ყველა -L ვარიანტი მას ეძლევა. თუ a -rpath ვარიანტი გამოიყენება, runtime search path შეიქმნება ექსკლუზიურად გამოყენებით -rpath პარამეტრები, იგნორირება -L პარამეტრები. ეს შეიძლება სასარგებლო იყოს GC- ის გამოყენებისას, რომელიც დასძენს ბევრ- L პარამეტრს, რომელიც შეიძლება onNFS- ის დამონტაჟებული ფაილური სისტემისთვის.

სხვა ELF- ის ლინკებთან თავსებადობის შემთხვევაში, თუ -R პარამეტრი მოჰყვება დირექტორია სახელს, ვიდრე ფაილის სახელი, იგი განიხილება -ფილტის პარამეტრი.

-რეპატ-ბმული DIR

ELF ან SunOS- ის გამოყენებისას, ბიბლიოთეკას შეიძლება ჰქონდეს სხვაობა. ეს მოხდება, როდესაც "ld-shared" ბმული შეიცავს საერთო ბიბლიოთეკას, როგორც ერთ-ერთ შემავალი ფაილს.

როდესაც კავშირი აკავშირებს ამგვარი დამოკიდებულებას, როდესაც არ იზიარებს გაზიარებულ, გადაადგილებულ ბმულს, ის ავტომატურად შეეცდება საჭირო გაზიარებულ ბიბლიოთეკას და შეავსოს იგი ბმულს, თუ მას არ შედის მკაფიოდ. ასეთ შემთხვევებში, -rpath-link პარამეტრი განსაზღვრავს პირველი კომპლექტი დირექტორიები ძიებაში. The -rpath-link option- ს შეუძლია განსაზღვროს დირექტორიების სახელები და განსაზღვრავს კოლონების მიერ გამოყოფილი სახელები, ან რამდენჯერმე გამოჩნდება.

ეს პარამეტრი სიფრთხილით უნდა იქნას გამოყენებული, რადგან ის გადალახავს ძიების გზას, რომელიც შეიძლება რთული იყოს შედგენილი ბიბლიოთეკაში. ასეთ შემთხვევაში შესაძლებელია შემთხვევითი გამოყენება სხვა ძიების გზაზე, ვიდრე Runtime Linker- ი.

ბმულს იყენებს შემდეგი ძიების ბილიკები საჭირო გაზიარებული ბიბლიოთეკების განთავსებისათვის.

1.

ნებისმიერი დირექტორიის მიერ მითითებულ -ფრამ-ბმული პარამეტრები.

2.

ნებისმიერი დირექტორიის მიერ მითითებულ -ფილტის პარამეტრები. განსხვავება -რეფატსა და -პპატ-ბმული შორის არის ის, რომ მითითებულია -პატარის პარამეტრების მითითება , რომელიც შედის შესრულების დროს და გამოიყენება Runtime- ში , ხოლო -rpath- ბმული ვარიანტი მხოლოდ ეფექტურია ლინკის დროს. ეს მხოლოდ ადგილობრივი ლინკირებისთვისაა განკუთვნილი.

3.

ELF სისტემაში, თუ არ არის გამოყენებული - rpath და "rpath-link" პარამეტრები, მოძებნეთ გარემოს ცვლადი "LD_RUN_PATH" შინაარსი. ეს მხოლოდ ადგილობრივი ლინკირებისთვისაა განკუთვნილი.

4.

On 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 არსებობს, ამ ფაილში ნაპოვნი დასტა სია.

თუ საჭიროა გაზიარებული ბიბლიოთეკა არ არის ნაპოვნი, ბმული გაფრთხილებას გასცემს და გააგრძელებს ბმულს.

გაზიარებული

- სავალდებულო

შექმნა საერთო ბიბლიოთეკა. ამჟამად ეს მხოლოდ ELF, XCOFF და SunOS პლატფორმების მხარდაჭერაა. On SunOS, ბმული ავტომატურად ქმნის საერთო ბიბლიოთეკა თუ -e ვარიანტი არ გამოიყენება და არსებობს undefined სიმბოლოები ბმული.

--sort- საერთო

ეს ვარიანტი იძლევა ld- ს საერთო სიმბოლოების დასალაგებლად ზომაში, როდესაც იგი ათავსებს მათ შესაბამის გამომავალ სექციებს. პირველი მოვიდა ყველა ერთი ბაიტი სიმბოლო, მაშინ ყველა ორი ბაიტი, მაშინ ყველა ოთხი ბაიტი, და შემდეგ ყველაფერი. ეს არის თავიდან ასაცილებლად ხარვეზები სიმბოლოების გამო, რათა შეფერხებების შეზღუდვა.

- ზომის ფაილი [ ზომა ]

მსგავსია - splpl-by-reloc მაგრამ ქმნის ახალ გამომავალი მონაკვეთის თითოეული შეყვანის ფაილი, როდესაც ზომა მიიღწევა. ზომა დეფოლტის ზომა 1 თუ არ მიეცა.

--split-by-reloc [ რაოდენობა ]

ცდილობს შექმნას დამატებითი სექციები გამომავალ ფაილში ისე, რომ ფაილიდან ერთი გამომავალი განყოფილება არ აღემატება გადათვლას . ეს არის სასარგებლო, როდესაც ქმნის უზარმაზარ გადაადგილებულ ფაილებს გარკვეული რეალური დროის კერნებში ჩამოტვირთვისთვის COFF ობიექტის ფაილის ფორმატით; რადგან COFFCannot წარმოადგენს 65535-ზე მეტ მონაკვეთს გადანაწილებას ერთ სექციაში. გაითვალისწინეთ, რომ ეს ვერ იმუშავებს ობიექტის ფაილის ფორმატებში, რომლებიც არ უჭერენ მხარს თვითნებურ სექციებს. ბმული არ გადანაწილდება ინდივიდუალური შეყვანის განყოფილებების გადანაწილებაზე, ასე რომ, თუ ერთი შეყვანის განყოფილება უფრო მეტია, ვიდრე ითვლიან გადანაწილება, ერთი გამომავალი სექცია შეიცავს ბევრ გადატანას. ითვალისწინებდეს უპირობოდ 32768 ღირებულებას.

- ვარსკვლავები

გამოთვალეთ და აჩვენე სტატისტიკური მონაცემები ბმულის ოპერაციის შესახებ, როგორიცაა აღსრულების დრო და მეხსიერების გამოყენება.

- ტრადიციული ფორმატი

ზოგიერთი სამიზნეებისთვის, ld- ის გამონაკლისი განსხვავდება ზოგიერთ გზავნილზე არსებული ზოგიერთი ბმულიდან. ეს switch მოითხოვს ld გამოიყენოს ტრადიციული ფორმატი ნაცვლად.

მაგალითად, SunOS, ld აერთიანებს დუბლიკატი ჩანაწერების სიმბოლოთა სიმებიანი მაგიდა. ეს შეიძლება შეამციროს ზომა გამომავალი ფაილის სრული გამართვის ინფორმაცია მეტი 30 პროცენტით. სამწუხაროდ, SunOS "dbx" პროგრამა არ იძლევა წაკითხულ პროგრამას ("gdb" არ აქვს პრობლემები). ტრადიციული ფორმატის შეცვლა იძლევა ld არ დააკავშიროთ დუბლიკატების ჩანაწერებს.

- ცვლა-დაწყების სექცია = org

განთავსდება სექცია გამომავალ ფაილში შევსებული აბსურდის მისამართზე . თქვენ შეგიძლიათ გამოიყენოთ ეს პარამეტრი რამდენჯერმე საჭიროა ბრძანების ხაზში მრავალრიცხოვანი სექციების განთავსება. org უნდა იყოს ერთი ჰექსექსიმალური რიცხვი; სხვა ბმულებთან თავსებადობის შემთხვევაში შეიძლება გამოიწვიოს წამყვან 0x- ს, როგორც წესი, დაკავშირებულია თექვსმეტობითი ღირებულებებით. შენიშვნა: სექციის სახელი არ უნდა იყოს თეთრი სივრცე, ტოლობის ნიშანი (`` = = ") და ორგანიზაცია .

ორგანოები

-თამათა org

-ტეტექსტი

გამოვიყენოთ როგორც საწყისი მისამართი - - - - "bss", "data", ან "text" სეგმენტი გამომავალი ფაილი. org უნდა იყოს ერთი ჰექსექსიმალური რიცხვი; სხვა ბმულებთან თავსებადობის შემთხვევაში შეიძლება გამოიწვიოს წამყვან 0x- ს, როგორც წესი, დაკავშირებულია თექვსმეტობითი ღირებულებებით.

- დელ-ვირუსი

- ბერკეტი

აჩვენე ვერსია ld- ს და ჩამოთვალეთ ბმული emulations მხარდაჭერილი. ჩვენება, რომელიც შეყვანის ფაილს შეუძლია და არ გახსნა. მიუთითეთ ლინკერის სკრიპტი, რომელიც გამოიყენება ბმულით.

- ვერსიის სკრიპტი = ვერსია- scriptfile

მიუთითეთ ვერსია სკრიპტის სახელი ლინკერთან. ეს ჩვეულებრივ გამოიყენება საერთო ბიბლიოთეკების შექმნისას, რათა შეიმუშავონ დამატებითი ინფორმაცია ჰეარარქიაზე შექმნილი ბიბლიოთეკის შესახებ. ეს ვარიანტი მხოლოდ მნიშვნელოვანია ELF პლატფორმებზე, რომლებიც მხარს უჭერენ საერთო ბიბლიოთეკებს.

--warn- საერთო

გაითვალისწინეთ, რომ საერთო სიმბოლო სხვა საერთო სიმბოლოსთან ან სიმბოლოთა განმარტებასთან ერთად აერთიანებს. Unix- ის ბმულები საშუალებას იძლევა გარკვეულწილად sloppy პრაქტიკა, მაგრამ ლინკერები სხვა ოპერაციულ სისტემებზე არ. ეს პარამეტრი საშუალებას გაძლევთ იპოვოთ პოტენციური პრობლემები გლობალური სიმბოლოების შერწყმით. სამწუხაროდ, ზოგიერთი C ბიბლიოთეკა გამოიყენებს ამ პრაქტიკას, ასე რომ შეიძლება მიიღოთ გარკვეული გაფრთხილებები სიმბოლოებზე ბიბლიოთეკებში, ისევე როგორც თქვენს პროგრამებში.

არსებობს სამი სახის გლობალური სიმბოლოები, რომლებიც ილუსტრირებულია C მაგალითებით:

int i = 1;

დეფინიცია, რომელიც გადის გამომავალი ფაილის მონაცემიდან.

extern int i;

განუსაზღვრელი მითითება, რომელიც არ გამოყოფს სივრცეს. უნდა არსებობდეს ცვლადი სადღაც განსაზღვრის ან საერთო სიმბოლო.

int i;

საერთო სიმბოლო. თუ არსებობს მხოლოდ ერთი (ერთი ან მეტი) საერთო სიმბოლოები ცვლადი, იგი გადის გამომავალი ფაილის არამიზნობრივი მონაცემების არეალში. ბმული უერთდება მრავალ საერთო სიმბოლოს იმავე ცვლადის ერთ სიმბოლოდ. თუ ისინი სხვადასხვა ზომის, იგი მწვერვალებით ყველაზე დიდი ზომა. ბმული მიმართავს საერთო სიმბოლოს დეკლარაციაში, თუ არსებობს იგივე ცვლადის განმარტება.

--warn საერთო ვარიანტი შეიძლება ხუთი სახის გაფრთხილება. თითოეული გაფრთხილება შედგება წყვილი ხაზებისგან: პირველი აღწერს სიმბოლოს, რომელიც გვხვდება და მეორე აღნიშნავს წინა სიმბოლოს იგივე სახელით. ერთი ან ორი სიმბოლო იქნება საერთო სიმბოლო.

1.

სიმბოლოში საერთო სიმბოლოზე გადაქცევა, რადგან სიმბოლო უკვე განსაზღვრავს.

(
): გაფრთხილება: (
) განსაზღვრულია `>"

2.

სიმბოლოში საერთო სიმბოლოს ჩართვა, რადგან სიმბოლოს მოგვიანებით განსაზღვრა. ეს იგივეა, რაც წინა შემთხვევაა, გარდა იმისა, რომ სიმბოლოები სხვადასხვა წესრიგშია.

(
): გაფრთხილება: <<სიმბოლო> "განსაზღვრა საერთო (
): გაფრთხილება: საერთო აქ არის

3.

საერთო სიმბოლოს შერწყმა წინა იგივე ზომის საერთო სიმბოლოთი.

(
): გაფრთხილება: `<სიმბოლო>" (
) მრავლობითი საერთო: გაფრთხილება: წინა საერთო აქ არის

4.

საერთო სიმბოლოს შერწყმა წინა უფრო დიდი სიმბოლოთი.

(
): გაფრთხილება: საერთო (
) მიერ გადატვირთული `" საერთო: გაფრთხილება: აქ არის უფრო დიდი საერთო

5.

საერთო სიმბოლოს შერწყმა წინა პატარა სიმბოლოთი. ეს იგივეა, რაც წინა შემთხვევაა, გარდა იმისა, რომ სიმბოლოები სხვადასხვა წესრიგშია.

(
): გაფრთხილება: "<<სიმბოლო>" საერთო საერთო (
) გადალახვა: გაფრთხილება: აქ არის პატარა საერთო

- შემსრულებლები

გააფრთხილეთ, თუ გლობალური კონსტრუქტორები გამოიყენება. ეს მხოლოდ რამდენიმე ობიექტის ფორმატისთვის სასარგებლოა. ფორმატებში, როგორიცაა COFF ან ELF, ბმული არ შეუძლია აღმოაჩინოს გლობალური კონსტრუქტორების გამოყენება.

- warn-multiple-gp

გაფრთხილება, თუ გლობალური მაჩვენებლის მნიშვნელობები საჭიროა გამომავალი ფაილში . ეს არის მხოლოდ მნიშვნელოვანი პროცესორი, როგორიცაა Alpha. კერძოდ, ზოგიერთ პროცესორი განსაკუთრებულ ნაწილში დიდ ღირებულებას უტოლდება. სპეციალურ რეესტრში (გლობალური მაჩვენებელი) ამ ნაწილის შუა რიცხვებში მიუთითებს, რომ მუდმივად შეიძლება დატვირთული იყოს ბაზისურ-სარეგისტრაციო შედარებით მიმართვის რეჟიმში. მას შემდეგ, რაც ბაზის რეესტრში შევსება შედარებით და შედარებით მცირეა (მაგალითად, 16 ბიტი), ეს ზღუდავს მუდმივი აუზის მაქსიმალურ ზომას. ამდენად, დიდ პროგრამებში, ხშირად საჭიროა მრავალი გლობალური მაჩვენებლის გამოყენება, რათა შესაძლებელი იყოს ყველა შესაძლო კონცენტრაციის გასაკეთებლად. ეს ვარიანტი იწვევს გაფრთხილებას გაფრთხილების შემთხვევაში, როდესაც ეს შემთხვევა ხდება.

- ხარკი - ერთხელ

მხოლოდ გააფრთხილოთ ერთხელ ყოველი განსაზღვრული სიმბოლო, არა ერთხელ, ვიდრე თითო მოდული, რომელიც ეხება მას.

- გაფრთხილება

გააფრთხილეთ, თუ გამომავალი განყოფილების მისამართი შეიცვალა განვიხილეთ. როგორც წესი, განლაგება იქნება მითითებული შეყვანის განყოფილებაში. მისამართი შეიცვლება მხოლოდ იმ შემთხვევაში, თუ ეს არ არის მკაფიოდ მითითებული; ანუ, თუ "SECTIONS" ბრძანება არ არის მითითებული განყოფილების დასაწყისის მისამართი.

- არქივი

ბრძანებათა სტრიქონის შემდეგ მითითებულ თითოეულ არქივში , რომელიც შეიცავს არქივში ყველა ობიექტის ფაილის ბმულს, ვიდრე არჩეული ობიექტის ფაილების არქივი. ეს ჩვეულებრივ გამოიყენება არქივი ფაილის გაზიარებული ბიბლიოთეკაში, რის შედეგადაც ყველა ობიექტი ჩართული იქნება საერთო ბიბლიოთეკაში. ეს ვარიანტი შეიძლება გამოყენებულ იქნეს არაერთხელ.

ამ პარამეტრის გამოყენებით gcc- ის ორი შენიშვნა: პირველი, gcc არ იცის ამ პარამეტრის შესახებ, ასე რომ თქვენ უნდა გამოიყენოთ -WL, -Whole- არქივი . მეორე, არ უნდა დაგვავიწყდეს, გამოიყენოთ -WL, არა-მთელი არქივი არქივების სიის შემდეგ, რადგან gcc დაამატებთ არქივების საკუთარ სიას თქვენს ბმულს და თქვენ არ გინდა, რომ ეს დროშა გავლენა იქონიოს მათზეც.

- სიმბოლო სიმბოლო

გამოიყენეთ სიმბოლოების გასაშლელი ფუნქცია. სიმბოლოს ნებისმიერი დაუზუსტებელი მინიშნება გადაწყდება "__ wrap_symbol". "__real_symbol" - ს ნებისმიერი განუსაზღვრელი მინიშნება სიმბოლოზე გადაწყდება.

ეს შეიძლება გამოყენებულ იქნას, რათა უზრუნველყოს გადატანა სისტემის ფუნქცია. შეფუთვის ფუნქცია უნდა დაერქვას "__რეფა". თუ მას სურს ფუნქცია დარეკეთ, მას უნდა უწოდოს "__ real_symbol".

აქ არის ტრივიალური მაგალითი:

ბათილია * __wrap_malloc (int c) {printf ("malloc,% ld \ n", გ); დაბრუნება __real_malloc (გ); }

თუ ამ ფაილთან სხვა კოდის დამაკავშირებლად --wrap malloc- ის გამოყენებით, მაშინ ყველა ზარი "malloc" - ს უწოდებს ფუნქციას "__wrap_malloc". "__real_malloc" - ში "__wrap_malloc" - ში დარეკა რეალური "malloc" ფუნქციას.

შეგიძლიათ "__real_malloc" ფუნქციაც მოგცეთ, ისე, რომ ბმულების გარეშე კავშირები წარმატებას მიაღწევს. თუ ამის გაკეთება, თქვენ არ უნდა დააყენოთ "__ real_malloc" - ის განსაზღვრება იგივე ფაილიდან, როგორც "__wrap_malloc"; თუ თქვენ აკეთებთ, აისბერგს შეუძლია მოაგვაროს ზარი, სანამ კავშირი აქვს "malloc" - ს გადაცემის შანსი.

- ახალი- dtags

- გამორთული-ახალი dtags

ამ ბმულს შეუძლია შექმნას ახალი დინამიური ტეგები ELF- ში. მაგრამ ხანდაზმული ELF სისტემები შეიძლება არ ესმით მათ. თუ განსაზღვრავენ - ახალი- dtags , დინამიური tags შეიქმნება საჭიროებისამებრ. თუ დააკონკრეტებთ - გამორთვა-ახალ დტაგებს , შეიქმნება ახალი დინამიური tags. ჩვეულებრივ, ახალი დინამიური tags არ არის შექმნილი. გაითვალისწინეთ, რომ ეს პარამეტრები ხელმისაწვდომია მხოლოდ ELF სისტემებისთვის.

I386 PE ლინკერი მხარს უჭერს -შავი ვარიანტი, რომელიც გამოიმუშავებს დინამიურად დაკავშირებულ ბიბლიოთეკას (DLL) ნაცვლად ჩვეულებრივი შესრულებით. თქვენ უნდა დაასახელოთ გამომავალი "*. Dll" როდესაც გამოიყენებთ ამ პარამეტრს. გარდა ამისა, ბმული მთლიანად მხარს უჭერს სტანდარტული "*. DEF" ფაილებს, რომლებიც შეიძლება მითითებულ იქნეს ბმული ბრძანების ხაზით, როგორიცაა ობიექტის ფაილი (სინამდვილეში, მან უნდა წარმოადგინოს არქივები ის ექსპორტის სიმბოლოებს, რათა უზრუნველყოს, ნორმალური ობიექტის ფაილის მსგავსად).

გარდა ამისა, ყველა ობიექტთან დაკავშირებული ვარიანტების გარდა, i386 PE- ის ლინკი მხარს უჭერს დამატებით სარდლობის ხაზის პარამეტრებს, რომლებიც სპეციფიკურია i386 PE- ის მიზნებისთვის. პარამეტრები, რომლებიც ფასეულობებს აიღებენ, შეიძლება გამოყოს მათი მნიშვნელობები ან სივრცე ან თანასწორი ნიშნით.

--add-stdcall-alias

თუ მოცემული, სიმბოლოები ერთად stdcall suffix (@ nn ) იქნება ექსპორტირებული როგორც არის და ასევე სუფიქსიანი stripped.

- ფაილების ფაილი

გამოიყენეთ ფაილი, როგორც ფაილის სახელი, რომლის დროსაც გადარჩენა ძირითადი მისამართები ყველა გადანაწილების საჭირო DLPs ერთად dlltool .

-

შექმნა DLL ნაცვლად რეგულარული შესრულებადი. თქვენ ასევე შეგიძლიათ გამოიყენოთ- Shared ან მიუთითოთ "LIBRARY" მოცემული ".def" ფაილი.

-enable-stdcall-fixup

- გამორთული- stdcall-fixup

თუ ბმული იპოვის სიმბოლოს, რომ ვერ გადაწყდება, ის შეეცდება გააკეთოს "საეჭვო კავშირი", რომელიც ეძებს სხვა განსაზღვრულ სიმბოლოს, რომელიც განსხვავდება მხოლოდ სიმბოლოების ფორმატში (cdecl vs stdcall) და გადაწყვეტს ამ სიმბოლოს აკავშირებს მატჩისთვის. მაგალითად, undefined სიმბოლო "_foo" შეიძლება დაკავშირებული იყოს ფუნქციაზე "_foo @ 12", ან განუსაზღვრელი სიმბოლო "_bar @ 16" შეიძლება უკავშირდებოდეს ფუნქციას "_ბარი". როდესაც ბმულს ეს აკეთებს, ის აფრთხილებს გაფრთხილებას, რადგან ჩვეულებრივ უნდა შეეძლოთ დაკავშირება, მაგრამ ზოგჯერ იმპორტირება მესამე მხარის dlls- ის გენერირებული ბიბლიოთეკები შეიძლება ეს ფუნქცია გამოსადეგი იყოს. თუ დააკონკრეტებთ -enable-stdcall- სარეზერვო , ეს ფუნქცია სრულად არის ჩართული და გაფრთხილებები არ არის დაბეჭდილი. თუ თქვენ დააკონკრეტებთ - გამორთვა-სტკალ-რემონტი , ეს ფუნქცია გამორთულია და ასეთი მიმაჩნია შეცდომებად.

- ექსპორტის ყველა სიმბოლო

თუ მოცემული, გლობალური სიმბოლოები, რომლებიც გამოიყენება DLL- ის აშენებისთვის გამოყენებული ობიექტების ექსპორტირდება DLL. გაითვალისწინეთ, რომ ეს არის ნაგულისხმევი თუ სხვაგვარად არ იქნება ექსპორტირებული სიმბოლოები. როდესაც სიმბოლოები პირდაპირ ექსპორტირდება DEF ფაილების საშუალებით ან ფუნქციურად ატვირთული ფუნქციის ატრიბუტით, ნაგულისხმევი არ არის ექსპორტის სხვა არაფერი, თუ ეს არ არის მოცემული. გაითვალისწინეთ, რომ სიმბოლოები "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12" და "impure_ptr" ავტომატურად არ გაიყიდება. გარდა ამისა, სხვა DLL- ების მიერ შემოტანილი სიმბოლოები არ იქნება ექსპორტირებული და არც სიმბოლოები განსაზღვრავს DLL- ის შიდა განლაგებას, როგორიცაა "_head_" ან "__" ერთად დამთავრებული. გარდა ამისა, "libgcc", "libstd ++", "libmingw32" ან "crtX.o" სიმბოლოები ექსპორტირებული არ იქნება. სიმბოლოები, რომელთა სახელებიც იწყება "__rtti_" ან "__builtin_" არ იქნება ექსპორტირებული, რათა დაეხმაროს C ++ DLL- ებს. და ბოლოს, არსებობს ციგვინულ-კერძო სიმბოლოების ვრცელი სია, რომლებიც არ არის ექსპორტირებული (აშკარად, ეს ეხება DLL- ების შექმნას cygwin- ის მიზნებისთვის).

ეს cygwin გამორიცხავს: "_cygwin_dll_entry @ 12", "_cygwin_noncygwin_dll_entry @ 12", "_fmode", "_impure_ptr", "cygwin_attach_dll", "cygwin_premain0", "cygwin_premain1", "cygwin_premain2", "cygwin_premain2", "cygwin_premain3 "და" გარემო ".

- სიმბოლოების სიმბოლო , სიმბოლო , ...

განსაზღვრავს სიმბოლოების სიას, რომელიც არ უნდა იყოს ავტომატურად ექსპორტირებული. სიმბოლოთა სახელები შესაძლოა განზოგადებული იყოს მძიმე ან კოლონიით.

- გამონათქვამები libs lib , lib ...

განსაზღვრავს საარქივო ბიბლიოთეკების სიას, საიდანაც სიმბოლოები არ უნდა იყოს ექსპორტირებული. ბიბლიოთეკის სახელები შესაძლოა განისაზღვროს მძიმე ან კოლონიით. "ყველა გამონათქვამს" განსაზღვრავს სიმბოლოებს ავტომატური ექსპორტიდან ყველა არქივი ბიბლიოთეკაში. .def ფაილში მოყვანილი სიმბოლოები კვლავ ექსპორტირებულია, მიუხედავად ამ პარამეტრისა.

--file- განლაგება

მიუთითეთ ფაილის განლაგება. ამ სექციაში განყოფილებები ყოველთვის დაიწყება ფაილების ოფციებში, რომლებიც ამ ნომრის ჯაჭვებშია. ეს შეუსაბამობა 512.

- სარეზერვო

- სარეზერვო რეზერვი , ჩაიდინოს

მიუთითეთ მეხსიერების ოდენობა რეზერვი (და სურვილისამებრ), რომელიც გამოიყენება ამ პროგრამისთვის. ნაგულისხმევი არის 1 მბ დაცულია, 4K ჩაიდინა.

- ძირითადი ბაზის ღირებულება

გამოიყენეთ ღირებულება, როგორც თქვენი პროგრამის ან DLL- ის ბაზის მისამართი. ეს არის ყველაზე დაბალი მეხსიერების ადგილმდებარეობა, რომელიც გამოყენებული იქნება თქვენი პროგრამის ან DLL. იმისათვის, რომ შეამცირონ და გადააჭარბოთ თქვენი დელუსების შესრულება, თითოეულს უნდა ჰქონდეს უნიკალური ბაზის მისამართი და არ გადააჭარბოს ნებისმიერ სხვა ნალექებს. Default არის 0x400000 for executables და 0x10000000 ამისთვის dlls.

- კილო-ზე

თუ მოცემული, stdcall suffixes (@ nn ) იქნება ამოღებული სიმბოლოები სანამ ისინი ექსპორტი.

- ძირითადი გამოსახულება-ვერსია ღირებულება

ადგენს `` გამოსახულების ვერსიას ''. უპირობოდ 1.

- ძირითადი- os- ვერსია ღირებულება

ადგენს `` ოსის ვერსიის '' მნიშვნელოვან რაოდენობას. უცვლელად 4.

- მაიორ-სუბსიდიუმ-ვერსიის ღირებულება

ადგენს `` ქვესისტემის ვერსიას ''. უცვლელად 4.

- მინიმალური გამოსახულება-ვერსია ღირებულება

ადგენს უმნიშვნელო რაოდენობას `` გამოსახულების ვერსიას ''. მარცხნივ 0.

- Minor-os- ვერსია ღირებულება

ადგენს უმნიშვნელო რაოდენობას `` os version ''. მარცხნივ 0.

- მინიმუმ-ქვესისტემის ვერსია ღირებულება

ადგენს უმნიშვნელო რაოდენობას `` ქვესისტემების ვერსია ~. მარცხნივ 0.

- output-def ფაილი

ბმული შეიქმნება ფაილური ფაილი , რომელიც შეიცავს DEF ფაილს, რომელიც შეესაბამება DLL- ს ბმულით. ეს DEF ფაილი (რომელსაც უნდა ეწოდოს "* .def") შეიძლება გამოყენებულ იქნას იმპორტის ბიბლიოთეკის შექმნა "dlltool" ან შეიძლება გამოყენებულ იქნას როგორც ავტომატურად ან მინიშნებულად ექსპორტირებული სიმბოლოების მითითებით.

-out-implib ფაილი

ბმული შეიქმნება ფაილური ფაილი , რომელიც შეიცავს იმპორტ-ლიბს, რომელიც შეესაბამება DLL- ს ბმულს. ამ იმპორტის lib (რომელიც "dd.a" ან "*. A" - ს უნდა გამოეყენებინათ, რათა კლიენტებს დაამყაროს გამომუშავებული DLL- ის წინააღმდეგ, ეს ქცევას საშუალებას აძლევს გამოვიდეს ცალკე "dlltool" იმპორტის ბიბლიოთეკის შექმნის ნაბიჯი.

- ავტომატური გამოსახულების ბაზა

ავტომატური აირჩიოს გამოსახულების ბაზა DLLs, თუ ერთი მითითებულია გამოყენებით "--image-base" არგუმენტი. გამოყენებით hash გენერირებული dllname შექმნათ უნიკალური იმიჯი ბაზების თითოეული DLL, in- მეხსიერების შეჯახება და გადაადგილება, რომელიც შეიძლება გადადება პროგრამის შესრულების თავიდან აცილება.

- გამორთვა-ავტომატური გამოსახულების ბაზა

არ ავტომატურად გენერირება უნიკალური გამოსახულების ბაზა. თუ არ არსებობს მომხმარებლის მითითებულ სურათის ბაზა ("--image-base"), გამოიყენეთ პლატფორმის ნაგულისხმები.

--dll- ძიების- prefix სიმებიანი

იმპორტის ბიბლიოთეკის გარეშე დინამიურად დაკავშირებისას " .dll" - ის ძიებისას "lib .dll" ეს ქცევა საშუალებას იძლევა განსხვავებული დისფლეიმებს შორის სხვადასხვა `` ქვეპლეფტებში '' შექმნილია: მშობლიური, ციგვინები, უვინები, pw და ა.შ. მაგალითად, cygwin DLLs ჩვეულებრივ იყენებენ "--dll-search-prefix = cyg".

- ავტომატური იმპორტი

გააკეთეთ "_symbol" - დან "__imp__symbol" - ის DATA- ის იმპორტის დახვეწა და შექმენით აუცილებელი thumbs სიმბოლოები იმპორტის ბიბლიოთეკების მშენებლობაში იმ DATAexports- ით. ეს ზოგადად "მხოლოდ იმუშავებს" --- მაგრამ ზოგჯერ შეგიძლიათ იხილოთ ეს შეტყობინება:

"ცვლადი" '' ვერ იქნება ავტომატურად იმპორტირებული, გთხოვთ, წაიკითხოთ დოკუმენტაცია ld- ისთვის "- ავტომატური იმპორტისთვის" დეტალებისთვის. "

ეს შეტყობინება ხდება მაშინ, როდესაც ზოგიერთი (ქვე) გამოხატვა მიდის იმ მისამართზე, რომელსაც საბოლოო ჯამში ორი მუდმივი თანხა (Win32 იმპორტის მაგიდები მხოლოდ ერთი საშუალებას იძლევა). იმ შემთხვევებში, როდესაც ეს შეიძლება მოხდეს, შედის DLL- ს იმპორტირებული სტრუქტურული ცვლადების წევრი დარგებში, აგრეთვე მუდმივი ინდექსით, რომელიც გამოიყენება DLL- ის იმპორტირებული მასივის ცვლადში. ნებისმიერი მრავალფუნქციური ცვლადი (მასივები, structs, ხანგრძლივი და ა.შ.) შეიძლება გამოიწვიოს ამ შეცდომის მდგომარეობა. თუმცა, მიუხედავად იმისა, რომ ექსპორტირებული ცვალებადობის ზუსტი მონაცემები არ არის, ld ყოველთვის გამოვლენილია, გააფრთხილოს გაფრთხილება და გასვლა.

ამ პრობლემის მოგვარების რამდენიმე გზა არსებობს, მიუხედავად ექსპორტირებული ცვლადის მონაცემთა ტიპებისა:

ერთი გზა გამოვიყენოთ - ქმედუნარიანი Runtime- ფსევდო-გადაადგილების შეცვლა. ეს გულისხმობს თქვენი კლიენტის კოდის შეცვლის ფუნქციას runtime გარემოში, ასე რომ ეს მეთოდი მუშაობს მხოლოდ მაშინ, როდესაც Runtime environtment მხარს უჭერს ამ ფუნქციას.

მეორე გამოსავალი არის აიძულოს ერთი "მუდმივები" იყოს ცვლადი - ეს არის უცნობი და un-optimizable შედგენის დროს. მასივებისთვის არსებობს ორი შესაძლებლობა: ა) ინდექსის (მასივის მისამართი) ცვლადი, ან ბ) "მუდმივი" ინდექსი ცვლადს ქმნის. ამდენად:

გარე extern_array []; extern_array [1] -> {არასტაბილური ტიპი * t = extern_array; ტ [1]}

ან

გარე extern_array []; extern_array [1] -> {არასტაბილური int t = 1; extern_array [t]}

Structs (და სხვა მრავალდონიანი მონაცემთა ტიპები) ერთადერთი ვარიანტია, რომ თავად სტრუქტურა (ან ხანგრძლივი გრძელი, ან ...) ცვლადი:

extern სტრუქტურა extern_struct; extern_struct.field -> {არასტაბილური სტრუქტურები s * t = და extern_struct; t-> სფერო}

ან

extern long long extern_ll; extern_ll -> {არასტაბილური ხანგრძლივი ხანგრძლივი * local_ll = & extern_ll; * local_ll}

ამ მეთოდთან დაკავშირებული მესამე მეთოდი არის "ავტომატური იმპორტის" შეჩერება დამნაშავე სიმბოლოსათვის და "__ დეკლსპექსი" (dllimport). თუმცა, პრაქტიკაში, რომელიც საჭიროებს კომპილაციის დროს # განსაზღვრავს, მიუთითებს თუ არა თქვენ DLL აშენება, კლიენტის კოდის შექმნა, რომელიც დაკავშირებულია DLL- თან, ან უბრალოდ სტაბილური ბიბლიოთეკის მშენებლობას. "არჩევანის მუდმივი ოფსეტური პრობლემის მოგვარების" სხვადასხვა მეთოდების არჩევისას თქვენ უნდა განიხილონ ტიპიური რეალურ სამყაროში გამოყენება:

ორიგინალური:

- foo.h extern int arr []; - foo.c # შეიცავდეს "foo.h" ბათილად მთავარ (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

Solution 1:

- foo.h extern int arr []; - foo.c # შეიცავდეს "foo.h" ბათილად მთავარ (int argc, char ** argv) {/ * ეს სამუშაო არის win32 და cygwin; არ "ოპტიმიზაცია" * / არასტაბილური int * parr = arr; printf ("% d \ n", parr [1]); }

Solution 2:

- Foo.h / * შენიშვნა: ავტომატური ექსპორტის მიღება (არ __დეკლსპექსი (დელქსპორტის)) * / # ც (განსაზღვრული (_WIN32) || განისაზღვრება (__ CYGWIN__)) && \! (განსაზღვრული (FOO_BUILD_DLL) || განსაზღვრული (FOO_STATIC )) # განსაზღვრავს FOO_IMPORT __declspec (dllimport) # ქვემოთ # განსაზღვრულ FOO_IMPORT #endif extern FOO_IMPORT int arr []; - foo.c # შეიცავდეს "foo.h" ბათილად მთავარ (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

ამ პრობლემის თავიდან აცილების მეოთხე გზა არის თქვენი ბიბლიოთეკის ხელახლა კოდის გამოყენება ფუნქციონალური ინტერფეისისთვის, ვიდრე შეურაცხყოფის ცვლადების მონაცემთა ინტერფეისი (მაგალითად set_foo () და get_foo () accessor ფუნქციები).

- გამორთვა-ავტომატური იმპორტი

არ შეეცადოთ, რომ "_symbol" - დან "__imp__symbol" - ის DATAimports - დან DLL - ებისთვის sophisticalted კავშირი.

- ხერხდება- runtime- ფსევდო-გადატვირთვა

თუ თქვენი კოდი შეიცავს აგენტი-ავტომატური იმპორტის განყოფილებაში აღწერილ გამოხატულებებს, ანუ DATAimports DLL- სგან ნულოვანი ოფსეტურით, ეს შეცვლა შექმნის ვექტორს 'runtime pseudo relocations', რომელიც შეიძლება გამოყენებულ იქნას runtime გარემოს შეცვლის მითითება ასეთ მონაცემებს თქვენი კლიენტის კოდი.

- გამორთული- runtime- ფსევდო-გადატვირთვა

არ შეიქმნას ფსევდო გადაადგილება DLL- ებისგან ნულოვანი ოფსეტური DATA იმპორტისთვის. ეს არის ნაგულისხმევი.

- არასასურველი ზედმეტი დებიუტი

ავტომატური იმპორტის სიმბოლოსთან დაკავშირებული დამატებითი სადისპეტჩერო ინფორმაციის ჩვენება.

- ცვლა-განლაგება

განლაგებულია სექციის განლაგება. მეხსიერების განყოფილებები ყოველთვის დაიწყება იმ მისამართებზე, რომლებიც ამ ნომრის მრავალჯერადიაა. უპირობოდ 0x1000.

- დაბრკოლება

- სარეზერვო სარეზერვო , ჩაიდინოს

მიუთითეთ მეხსიერების ოდენობა რეზერვი (და სურვილისამებრ), რომელიც გამოიყენება ამ პროგრამისთვის დასტისთვის. ნაგულისხმევი 2Mb დაცულია, 4K ჩაიდინა.

- სისტემა, რომელიც

- სისტემა, რომელიც : ძირითადი

- სისტემა, რომელიც : ძირითადი . უმნიშვნელო

განსაზღვრავს ქვესისტემას, რომლის მიხედვითაც თქვენი პროგრამა შესრულდება. სამართლებრივი ღირებულებებია, რომლებიც "მშობლიურ", "ფანჯრები", "კონსოლი" და "პოსტიქსი" არიან. თქვენ შეგიძლიათ სურვილისამებრ დააყენოთ ქვესისტემის ვერსიაც.

მნიშვნელოვანია: გამოიყენეთ კაცი ბრძანება ( % man ), რათა ნახოთ თუ როგორ ბრძანება გამოიყენება თქვენს კომპიუტერში.