Εντολή Linux / Unix: Id

ΟΝΟΜΑ

ld - Χρήση του LD , του συνδέσμου GNU

ΣΥΝΟΨΗ

ld [ επιλογές ] objfile ...

ΠΕΡΙΓΡΑΦΗ

ld συνδυάζει έναν αριθμό αντικειμένων και αρχείων αρχειοθέτησης, μετακινεί τα δεδομένα τους και συνδέει τις αναφορές συμβόλων. Συνήθως το τελευταίο βήμα στη σύνταξη ενός προγράμματος είναι να εκτελέσετε το ld .

ld δέχεται αρχεία γραμμής εντολών Linker γραμμένα σε μια υπερσύνολη της σύνταξης γλώσσας Command Language της AT & T για να παρέχουν σαφή και πλήρη έλεγχο στη διαδικασία σύνδεσης.

Αυτή η σελίδα δεν περιγράφει τη γλώσσα εντολών. δείτε την καταχώρηση ld στο "info" ή το εγχειρίδιο ld: το GNU linker, για περισσότερες λεπτομέρειες σχετικά με τη γλώσσα εντολών και για άλλες πτυχές του συνδέσμου GNU.

Αυτή η έκδοση του ld χρησιμοποιεί τις γενικές βιβλιοθήκες BFD για να λειτουργούν σε αρχεία αντικειμένων. Αυτό επιτρέπει στο ld να διαβάζει, να συνδυάζει και να γράφει αρχεία αντικειμένων σε πολλές διαφορετικές μορφές --- για παράδειγμα, COFF ή "a.out". Διαφορετικές μορφές μπορούν να συνδεθούν μεταξύ τους για να παράγουν οποιοδήποτε διαθέσιμο είδος αρχείου αντικειμένων.

Εκτός από την ευελιξία του, ο σύνδεσμος GNU είναι πιο χρήσιμος από άλλους συνδέσμους για την παροχή διαγνωστικών πληροφοριών. Πολλοί συνδέτες εγκαταλείπουν την εκτέλεση αμέσως μόλις συναντήσουν ένα σφάλμα. Όποτε είναι δυνατόν, το ld συνεχίζει να εκτελεί, επιτρέποντάς σας να εντοπίσετε άλλα σφάλματα (ή, σε ορισμένες περιπτώσεις, να λάβετε ένα αρχείο εξόδου παρά το σφάλμα).

Ο σύνδεσμος GNU ld προορίζεται να καλύψει ένα ευρύ φάσμα καταστάσεων και να είναι όσο το δυνατόν συμβατό με άλλους συνδετήρες. Ως αποτέλεσμα, έχετε πολλές επιλογές για να ελέγξετε τη συμπεριφορά του.

ΕΠΙΛΟΓΕΣ

Ο σύνδεσμος υποστηρίζει μια πληθώρα επιλογών γραμμής εντολών , αλλά στην πραγματικότητα λίγες από αυτές χρησιμοποιούνται σε οποιοδήποτε συγκεκριμένο πλαίσιο. Για παράδειγμα, μια συχνή χρήση του ld είναι η σύνδεση τυπικών αρχείων αντικειμένων Unix σε ένα τυπικό, υποστηριζόμενο σύστημα Unix . Σε ένα τέτοιο σύστημα, για να συνδέσετε ένα αρχείο "hello.o":

ld -o <εξόδου> /lib/crt0.o hello.o -lc

Αυτό λέει στον ld να παράγει ένα αρχείο που ονομάζεται output ως αποτέλεσμα της σύνδεσης του αρχείου "/lib/crt0.o" με το "hello.o" και της βιβλιοθήκης "libc.a", τα οποία θα προέρχονται από τους τυπικούς καταλόγους αναζήτησης. (Δείτε τη συζήτηση για την επιλογή -l παρακάτω.)

Ορισμένες από τις επιλογές γραμμής εντολών για ld μπορούν να οριστούν σε οποιοδήποτε σημείο της γραμμής εντολών. Ωστόσο, οι επιλογές που αφορούν αρχεία, όπως το -l ή -T , προκαλούν ανάγνωση του αρχείου στο σημείο στο οποίο εμφανίζεται η επιλογή στη γραμμή εντολών, σε σχέση με τα αρχεία αντικειμένων και άλλες επιλογές αρχείου. Η επανάληψη των επιλογών μη-αρχείου με διαφορετικό όρισμα δεν θα έχει περαιτέρω επίδραση ούτε θα αντικαταστήσει προηγούμενες εμφανίσεις (εκείνες που βρίσκονται πιο αριστερά στη γραμμή εντολών) αυτής της επιλογής. Επιλογές που μπορούν να προσδιοριστούν με νόημα περισσότερες από μία φορές σημειώνονται στις παρακάτω περιγραφές.

Τα επιχειρήματα μη επιλογής είναι αρχεία αντικειμένων ή αρχεία που πρόκειται να συνδεθούν μεταξύ τους. Μπορούν να ακολουθούν, να προηγούνται ή να αναμειγνύονται με επιλογές γραμμής εντολών, με την εξαίρεση ότι ένα όρισμα αρχείου αντικειμένου δεν μπορεί να τοποθετηθεί μεταξύ μιας επιλογής και του επιχειρήματός της.

Συνήθως ο συνδέτης καλείται με τουλάχιστον ένα αρχείο αντικειμένων, αλλά μπορείτε να καθορίσετε άλλες μορφές δυαδικών αρχείων εισόδου χρησιμοποιώντας τα -l , -R και τη γλώσσα εντολών script. Εάν δεν καθορίζονται καθόλου δυαδικά αρχεία εισόδου, ο σύνδεσμος δεν παράγει καμία έξοδο και εκδίδει το μήνυμα Μη αρχεία εισόδου .

Εάν ο συνδέτης δεν μπορεί να αναγνωρίσει τη μορφή ενός αρχείου αντικειμένου, θα υποθέσει ότι πρόκειται για δέσμη συνδέσμων. Μια δέσμη ενεργειών που καθορίζεται με αυτόν τον τρόπο αυξάνει το κύριο σενάριο συνδέσμου που χρησιμοποιείται για το σύνδεσμο (είτε το προεπιλεγμένο σενάριο συνδέσμου είτε το καθορισμένο χρησιμοποιώντας το -T ). Αυτή η δυνατότητα επιτρέπει στον σύνδεσμο να συνδεθεί με ένα αρχείο που φαίνεται να είναι ένα αντικείμενο ή ένα αρχείο, αλλά στην πραγματικότητα απλώς ορίζει ορισμένες τιμές συμβόλων ή χρησιμοποιεί "INPUT" ή "GROUP" για να φορτώσει άλλα αντικείμενα. Σημειώστε ότι ο προσδιορισμός ενός σεναρίου με αυτόν τον τρόπο απλώς αυξάνει το κύριο σενάριο συνδέσμου. χρησιμοποιήστε την επιλογή -T για να αντικαταστήσετε πλήρως την προεπιλεγμένη δέσμη συνδέσμων.

Για τις επιλογές των οποίων τα ονόματα είναι ένα μόνο γράμμα, τα επιχειρήματα επιλογής πρέπει είτε να ακολουθούν το γράμμα επιλογής χωρίς παρεμβαλλόμενο κενό είτε να δίδονται ως ξεχωριστά επιχειρήματα αμέσως μετά την επιλογή που τους απαιτεί.

Για τις επιλογές των οποίων τα ονόματα είναι πολλαπλά γράμματα, μία ή δύο παύλες μπορούν να προηγηθούν του ονόματος επιλογής. για παράδειγμα, το σύμβολο -trace και το σύμβολο -trace είναι ισοδύναμα. Σημειώστε - υπάρχει μια εξαίρεση στον κανόνα αυτό. Οι επιλογές πολλαπλών γραμμάτων που ξεκινούν με ένα μικρό τετράγωνο 'o' μπορούν να προταθούν μόνο με δύο παύλες. Αυτό θα μειώσει τη σύγχυση με την επιλογή -o . Έτσι, για παράδειγμα, το -μαγικό ρυθμίζει το όνομα του αρχείου εξόδου σε μαγεία, ενώ --omagic ορίζει τη σημαία NMAGIC στην έξοδο.

Τα επιχειρήματα στις επιλογές πολλαπλών γραμμάτων πρέπει είτε να διαχωριστούν από το όνομα της επιλογής με ένα σύμβολο ίσων, είτε να δοθούν ως χωριστά επιχειρήματα αμέσως μετά την επιλογή που τους απαιτεί. Για παράδειγμα, το σύμβολο -trace-foo και το -trace-symbol = foo είναι ισοδύναμα. Οι μοναδικές συντομογραφίες των ονομάτων επιλογών πολλαπλών γραμμάτων γίνονται αποδεκτές.

Σημείωση - εάν ο συνδέτης καλείται έμμεσα, μέσω ενός προγράμματος οδήγησης μεταγλωττιστή (π.χ. gcc ), τότε όλες οι επιλογές γραμμής εντολών linker θα πρέπει να έχουν προκαθοριστεί από το -Wl, (ή ό, τι είναι κατάλληλο για τον συγκεκριμένο οδηγό μεταγλωττιστή) όπως παρακάτω:

gcc -Wl, - ομάδα εκκίνησης foo.o bar.o -Wl, - endgroup

Αυτό είναι σημαντικό, γιατί αλλιώς το πρόγραμμα οδήγησης του μεταγλωττιστή μπορεί να αφήσει σιωπηλά τις επιλογές linker, με αποτέλεσμα μια κακή σύνδεση.

Εδώ είναι ένας πίνακας των γενικών διακοπτών γραμμής εντολών που γίνονται αποδεκτοί από τον GNU linker:

-μια λέξη-κλειδί

Αυτή η επιλογή υποστηρίζεται για συμβατότητα HP / UX. Το όρισμα λέξεων-κλειδιών πρέπει να είναι ένα από τα αρχεία συμβολοσειρών , κοινόχρηστων ή προεπιλεγμένων . -ο διαχωρισμός είναι λειτουργικά ισοδύναμο με το -Bstatic , και οι άλλες δύο λέξεις-κλειδιά είναι λειτουργικά ισοδύναμες με -Bdynamic . Αυτή η επιλογή μπορεί να χρησιμοποιηθεί πολλές φορές.

- Μια αρχιτεκτονική

--architecture = αρχιτεκτονική

Στην τρέχουσα έκδοση του ld , αυτή η επιλογή είναι χρήσιμη μόνο για την αρχιτεκτονική Intel 960. Σε αυτή τη διαμόρφωση ld , το αρχιτεκτονικό όρισμα αναγνωρίζει την ιδιαίτερη αρχιτεκτονική της οικογένειας 960, επιτρέποντας κάποιες διασφαλίσεις και τροποποιώντας τη διαδρομή αναζήτησης αρχείου βιβλιοθήκης.

Οι μελλοντικές εκδόσεις του ld ενδέχεται να υποστηρίζουν παρόμοια λειτουργικότητα για άλλες οικογένειες αρχιτεκτονικής.

-b μορφή εισαγωγής

--format = μορφή εισόδου

Το ld μπορεί να ρυθμιστεί ώστε να υποστηρίζει περισσότερα από ένα είδη αρχείου αντικειμένων. Εάν το ld έχει ρυθμιστεί με αυτό τον τρόπο, μπορείτε να χρησιμοποιήσετε την επιλογή -b για να καθορίσετε τη δυαδική μορφή αρχείων αντικειμένου εισόδου που ακολουθούν αυτήν την επιλογή στη γραμμή εντολών. Ακόμη και όταν το ld έχει ρυθμιστεί ώστε να υποστηρίζει μορφές εναλλακτικών αντικειμένων, συνήθως δεν χρειάζεται να το καθορίσετε, καθώς το ld πρέπει να διαμορφωθεί έτσι ώστε να αναμένει ως προεπιλεγμένη μορφή εισόδου την πιο συνηθισμένη μορφή σε κάθε μηχανή. μορφή εισόδου είναι μια συμβολοσειρά κειμένου, το όνομα μιας συγκεκριμένης μορφής που υποστηρίζεται από τις βιβλιοθήκες BFD. (Μπορείτε να ορίσετε τις διαθέσιμες δυαδικές μορφές με το objdump -i .)

Ενδέχεται να θέλετε να χρησιμοποιήσετε αυτήν την επιλογή εάν συνδέετε αρχεία με ασυνήθιστη δυαδική μορφή. Μπορείτε επίσης να χρησιμοποιήσετε το -b για να αλλάξετε ρητά τις μορφές (όταν συνδέετε αρχεία αντικειμένων διαφορετικών μορφών), συμπεριλαμβάνοντας τη μορφή -b εισόδου πριν από κάθε ομάδα αρχείων αντικειμένων σε μια συγκεκριμένη μορφή.

Η προεπιλεγμένη μορφή λαμβάνεται από τη μεταβλητή περιβάλλοντος "GNUTARGET".

Μπορείτε επίσης να ορίσετε τη μορφή εισόδου από μια δέσμη ενεργειών, χρησιμοποιώντας την εντολή "TARGET".

-c MRI-commandfile

--mri-script = αρχείο εντολών MRI

Για συμβατότητα με τους συνδέσμους που παράγονται από τη MRI, το ld δέχεται αρχεία δέσμης ενεργειών γραμμένα σε μια εναλλακτική γλώσσα περιορισμένης εντολής, που περιγράφεται στην ενότητα "Αρχεία συμβατών με δέσμες ενεργειών MRI" της τεκμηρίωσης GNU ld. Εισαγάγετε αρχεία δέσμης ενεργειών MRI με την επιλογή -c ; χρησιμοποιήστε την επιλογή -T για να εκτελέσετε δέσμες ενεργειών συνδέσμων γραμμένα στη γλώσσα προγραμματισμού ld γενικού σκοπού. Εάν το MRI-cmdfile δεν υπάρχει, το ld αναζητά στους καταλόγους που καθορίζονται από οποιεσδήποτε επιλογές -L .

-ρε

-dc

-δρ

Αυτές οι τρεις επιλογές είναι ισοδύναμες. υποστηρίζονται πολλαπλές φόρμες για συμβατότητα με άλλους συνδέσμους. Αναθέτουν χώρο σε κοινά σύμβολα, ακόμη και αν έχει οριστεί ένα αρχείο μετατοπίσιμου εξόδου (με -r ). Η εντολή δέσμης ενεργειών "FORCE_COMMON_ALLOCATION" έχει το ίδιο αποτέλεσμα.

είσοδο

--entry = είσοδος

Χρησιμοποιήστε την καταχώρηση ως ρητό σύμβολο για την έναρξη εκτέλεσης του προγράμματος σας, αντί για το προεπιλεγμένο σημείο εισόδου. Αν δεν υπάρχει κάποιο σύμβολο με την ονομασία καταχώρησης , ο σύνδεσμος θα προσπαθήσει να αναλύσει την καταχώρηση ως αριθμό και θα το χρησιμοποιήσει ως τη διεύθυνση εισόδου (ο αριθμός θα ερμηνευτεί στη βάση 10, μπορείτε να χρησιμοποιήσετε μια κορυφή 0x για τη βάση 16 ή μια κορυφή 0 για τη βάση 8).

-ΜΙ

- εξαγωγική δυναμική

Κατά τη δημιουργία ενός δυναμικά συνδεδεμένου εκτελέσιμου αρχείου, προσθέστε όλα τα σύμβολα στον πίνακα δυναμικών συμβόλων. Ο πίνακας δυναμικών συμβόλων είναι το σύνολο συμβόλων που είναι ορατά από δυναμικά αντικείμενα κατά την εκτέλεση.

Εάν δεν χρησιμοποιήσετε αυτήν την επιλογή, ο πίνακας δυναμικών συμβόλων θα περιέχει κανονικά μόνο εκείνα τα σύμβολα που αναφέρονται από κάποιο δυναμικό αντικείμενο που αναφέρεται στον σύνδεσμο.

Εάν χρησιμοποιείτε το "dlopen" για να φορτώσετε ένα δυναμικό αντικείμενο το οποίο πρέπει να ανατρέξει στα σύμβολα που ορίζονται από το πρόγραμμα, αντί για κάποιο άλλο δυναμικό αντικείμενο, τότε πιθανόν να χρειαστεί να χρησιμοποιήσετε αυτήν την επιλογή όταν συνδέετε το ίδιο το πρόγραμμα.

Μπορείτε επίσης να χρησιμοποιήσετε το σενάριο έκδοσης για να ελέγξετε ποια σύμβολα πρέπει να προστεθούν στον πίνακα δυναμικών συμβόλων, αν το υποστηρίζει η μορφή εξόδου. Δείτε την περιγραφή του σεναρίου -version στο @ ref {VERSION}.

-EB

Συνδέστε αντικείμενα μεγάλου μεγέθους. Αυτό επηρεάζει την προεπιλεγμένη μορφή εξόδου.

-EL

Συνδέστε αντικείμενα μικρού μεγέθους. Αυτό επηρεάζει την προεπιλεγμένη μορφή εξόδου.

-φά

- βοηθητικό όνομα

Κατά τη δημιουργία ενός κοινόχρηστου αντικειμένου ELF, ορίστε το εσωτερικό πεδίο DT_AUXILIARY στο καθορισμένο όνομα. Αυτό δείχνει στον δυναμικό συνδετήρα ότι ο πίνακας συμβόλων του κοινόχρηστου αντικειμένου θα πρέπει να χρησιμοποιηθεί ως βοηθητικό φίλτρο στον πίνακα συμβόλων του ονόματος κοινόχρηστου αντικειμένου.

Αν αργότερα συνδέσετε ένα πρόγραμμα με αυτό το αντικείμενο φίλτρου, τότε, όταν εκτελείτε το πρόγραμμα, ο δυναμικός συνδετήρας θα δει το πεδίο DT_AUXILIARY. Εάν ο δυναμικός σύνδεσμος επιλύσει τυχόν σύμβολα από το αντικείμενο φίλτρου, πρώτα θα ελέγξει αν υπάρχει ορισμός στο κοινό όνομα αντικειμένου. Εάν υπάρχει ένα, θα χρησιμοποιηθεί αντί του ορισμού στο αντικείμενο φίλτρου. Το όνομα κοινόχρηστου αντικειμένου δεν χρειάζεται να υπάρχει. Έτσι, το όνομα κοινόχρηστου αντικειμένου μπορεί να χρησιμοποιηθεί για την παροχή εναλλακτικής υλοποίησης ορισμένων λειτουργιών, ίσως για σφάλμα ή για συγκεκριμένη απόδοση μηχανής.

Αυτή η επιλογή μπορεί να οριστεί περισσότερες από μία φορές. Οι καταχωρήσεις DT_AUXILIARY θα δημιουργηθούν με τη σειρά με την οποία εμφανίζονται στη γραμμή εντολών.

-F όνομα

- όνομα φίλτρου

Όταν δημιουργείτε ένα κοινό αντικείμενο ELF, ορίστε το εσωτερικό πεδίο DT_FILTER στο καθορισμένο όνομα. Αυτό δείχνει στον δυναμικό συνδετήρα ότι ο πίνακας συμβόλων του κοινόχρηστου αντικειμένου που δημιουργείται θα πρέπει να χρησιμοποιείται ως φίλτρο στον πίνακα συμβόλων του ονόματος κοινόχρηστου αντικειμένου.

Αν αργότερα συνδέσετε ένα πρόγραμμα με αυτό το αντικείμενο φίλτρου, τότε, όταν εκτελείτε το πρόγραμμα, ο δυναμικός συνδετήρας θα δει το πεδίο DT_FILTER. Ο δυναμικός σύνδεσμος θα λύσει τα σύμβολα σύμφωνα με τον πίνακα συμβόλων του αντικειμένου φίλτρου, όπως συνήθως, αλλά στην πραγματικότητα θα συνδεθεί με τους ορισμούς που βρέθηκαν στο όνομα κοινόχρηστου αντικειμένου. Έτσι, το αντικείμενο φίλτρου μπορεί να χρησιμοποιηθεί για να επιλέξει ένα υποσύνολο των συμβόλων που παρέχεται από το όνομα του αντικειμένου.

Μερικοί παλαιότεροι συνδέτες χρησιμοποίησαν την επιλογή -F σε μια εργαλειομηχανή σύνταξης για τον καθορισμό μορφής αρχείου αντικειμένων τόσο για αρχεία αντικειμένων εισόδου όσο και για έξοδο. Ο σύνδεσμος GNU χρησιμοποιεί άλλους μηχανισμούς για αυτό το σκοπό: τις επιλογές -b , -format , -format , την εντολή "TARGET" σε δέσμες συνδέσμων και τη μεταβλητή περιβάλλοντος "GNUTARGET". Ο σύνδεσμος GNU θα αγνοήσει την επιλογή -F όταν δεν δημιουργεί κοινό αντικείμενο ELF.

-μετονομα

Κατά τη δημιουργία ενός εκτελέσιμου ή κοινόχρηστου αντικειμένου ELF, καλέστε το NAME όταν εκφορτωθεί το εκτελέσιμο αντικείμενο ή το κοινόχρηστο αντικείμενο, ρυθμίζοντας το DT_FINI στη διεύθυνση της λειτουργίας. Από προεπιλογή, ο συνδέτης χρησιμοποιεί τη λειτουργία "_fini" ως λειτουργία κλήσης.

-σολ

Αγνοείται. Παρέχεται συμβατότητα με άλλα εργαλεία.

-G αξία

--gpsize = αξία

Ορίστε το μέγιστο μέγεθος των αντικειμένων που πρέπει να βελτιστοποιηθούν χρησιμοποιώντας το μητρώο GP για μεγέθυνση . Αυτό έχει νόημα μόνο για μορφές αρχείου αντικειμένων όπως το MIPS ECOFF το οποίο υποστηρίζει την τοποθέτηση μεγάλων και μικρών αντικειμένων σε διαφορετικά τμήματα. Αυτό αγνοείται για άλλες μορφές αρχείου αντικειμένων.

-h όνομα

-soname = όνομα

Όταν δημιουργείτε ένα κοινό αντικείμενο ELF, ορίστε το εσωτερικό πεδίο DT_SONAME στο καθορισμένο όνομα. Όταν ένα εκτελέσιμο αρχείο συνδέεται με ένα κοινό αντικείμενο το οποίο έχει ένα πεδίο DT_SONAME, τότε όταν εκτελείται το εκτελέσιμο, ο δυναμικός σύνδεσμος θα επιχειρήσει να φορτώσει το κοινόχρηστο αντικείμενο που καθορίζεται από το πεδίο DT_SONAME και όχι το όνομα του αρχείου που δίνεται στον σύνδεσμο.

-Εγώ

Εκτελέστε μια διαδοχική σύνδεση (ίδια με την επιλογή -r ).

-το όνομα

Όταν δημιουργείτε ένα εκτελέσιμο ή κοινό αντικείμενο ELF, καλέστε το NAME όταν φορτώνεται το εκτελέσιμο αντικείμενο ή το κοινό αντικείμενο, ρυθμίζοντας το DT_INIT στη διεύθυνση της λειτουργίας. Από προεπιλογή, ο σύνδεσμος χρησιμοποιεί τη λειτουργία "_init" ως λειτουργία κλήσης.

-l αρχείο

--library = αρχείο

Προσθέστε αρχείο αρχειοθέτησης αρχείων στη λίστα αρχείων που θέλετε να συνδέσετε. Αυτή η επιλογή μπορεί να χρησιμοποιηθεί πολλές φορές. Το ld θα αναζητήσει τη λίστα διαδρομών του για τις εμφανίσεις του "libarchive.a" για κάθε συγκεκριμένο αρχείο .

Σε συστήματα που υποστηρίζουν κοινές βιβλιοθήκες, η ld μπορεί επίσης να αναζητήσει βιβλιοθήκες με επεκτάσεις διαφορετικές από ".a". Συγκεκριμένα, στα συστήματα ELF και SunOS, το ld θα αναζητήσει έναν κατάλογο βιβλιοθήκης με επέκταση ".so" πριν ψάξει για ένα με επέκταση ".a". Κατά συνθήκη, μια επέκταση ".so" υποδεικνύει μια κοινόχρηστη βιβλιοθήκη.

Ο σύνδεσμος θα αναζητήσει ένα αρχείο μόνο μία φορά, στη θέση όπου καθορίζεται στη γραμμή εντολών. Εάν το αρχείο ορίζει ένα σύμβολο που δεν έχει οριστεί σε κάποιο αντικείμενο που εμφανίστηκε πριν από το αρχείο στη γραμμή εντολών, ο σύνδεσμος θα περιλαμβάνει τα κατάλληλα αρχεία από το αρχείο. Ωστόσο, ένα απροσδιόριστο σύμβολο σε ένα αντικείμενο που εμφανίζεται αργότερα στη γραμμή εντολών δεν θα αναγκάσει τον συνδέτη να ξαναβάσει το αρχείο.

Δείτε την επιλογή - ( επιλογή για έναν τρόπο να εξαναγκαστεί ο σύνδεσμος να αναζητά αρχεία πολλές φορές.

Μπορείτε να καταχωρίσετε το ίδιο αρχείο πολλές φορές στη γραμμή εντολών.

Αυτός ο τύπος αναζήτησης αρχείων είναι τυπικός για συνδέτες Unix. Ωστόσο, εάν χρησιμοποιείτε το ld onAIX, σημειώστε ότι είναι διαφορετικό από τη συμπεριφορά του συνδέσμου AIX.

-L searchdir

--ηλιθική διαδρομή = searchdir

Προσθέστε το path searchdir στη λίστα των διαδρομών που θα ψάξει για τις βιβλιοθήκες αρχειοθέτησης και τα script ελέγχου ld . Μπορείτε να χρησιμοποιήσετε αυτήν την επιλογή πολλές φορές. Οι κατάλογοι αναζητούνται με τη σειρά που καθορίζονται στη γραμμή εντολών. Οι κατάλογοι που καθορίζονται στη γραμμή εντολών αναζητούνται πριν από τους προεπιλεγμένους καταλόγους. Όλες οι επιλογές -L ισχύουν για όλες τις επιλογές -l , ανεξάρτητα από τη σειρά με την οποία εμφανίζονται οι επιλογές.

Αν το searchdir ξεκινά με "=", τότε το "=" θα αντικατασταθεί από το πρόθεμα sysroot , μια διαδρομή που καθορίζεται όταν έχει ρυθμιστεί ο σύνδεσμος.

Το προεπιλεγμένο σύνολο διαδρομών που αναζητήθηκαν (χωρίς να καθορίζεται με το -L ) εξαρτάται από τον τρόπο εξομοίωσης ld που χρησιμοποιεί και σε μερικές περιπτώσεις και από τον τρόπο με τον οποίο διαμορφώθηκε.

Οι διαδρομές μπορούν επίσης να καθοριστούν σε μια δέσμη ενεργειών σύνδεσης με την εντολή "SEARCH_DIR". Οι κατάλογοι που καθορίζονται με αυτόν τον τρόπο αναζητούνται στο σημείο στο οποίο εμφανίζεται η γραφή συνδέσμου στη γραμμή εντολών.

-m εξομοίωσης

Εξομοίωση του συνδέσμου εξομοίωσης . Μπορείτε να ορίσετε τις διαθέσιμες προσομοιώσεις με τις επιλογές --verbose ή -V .

Εάν η επιλογή -m δεν χρησιμοποιείται, η εξομοίωση λαμβάνεται από τη μεταβλητή περιβάλλοντος "LDEMULATION", αν αυτή έχει οριστεί.

Διαφορετικά, η προεπιλεγμένη εξομοίωση εξαρτάται από τον τρόπο ρύθμισης του συνδέσμου.

- χάρτης εκτύπωσης

Εκτυπώστε ένα χάρτη συνδέσμων στην τυπική έξοδο. Ένας χάρτης συνδέσμων παρέχει πληροφορίες σχετικά με τον σύνδεσμο, συμπεριλαμβανομένων των παρακάτω:

*

Όταν τα αρχεία αντικειμένων και τα σύμβολα χαρτογραφούνται στη μνήμη.

*

Πώς κατανέμονται τα συνήθη σύμβολα.

*

Όλα τα αρχειακά μέλη που περιλαμβάνονται στο σύνδεσμο, με αναφορά του συμβόλου που προκάλεσε την εισαγωγή του αρχείου.

--Nmagic

Απενεργοποιήστε την ευθυγράμμιση σελίδων των τμημάτων και σημειώστε την έξοδο ως "NMAGIC" αν είναι δυνατόν.

--μαγικό

Ορίστε τα τμήματα κειμένου και δεδομένων να είναι ευανάγνωστα και εγγράψιμα. Επίσης, μην ευθυγραμμίζετε το τμήμα δεδομένων με τη σελίδα και απενεργοποιείτε τη σύνδεση με κοινές βιβλιοθήκες. Αν η μορφή εξόδου υποστηρίζει μαγικούς αριθμούς στυλ Unix, σημειώστε την έξοδο ως "OMAGIC".

- μη ομοιογενής

Αυτή η επιλογή αναιρεί τα περισσότερα από τα αποτελέσματα της επιλογής -N . Ορίζει την ενότητα κειμένου να είναι μόνο για ανάγνωση και αναγκάζει το τμήμα δεδομένων να ευθυγραμμιστεί με τη σελίδα. Σημείωση - αυτή η επιλογή δεν επιτρέπει τη σύνδεση με κοινές βιβλιοθήκες. Χρησιμοποιήστε -Bdynamic για αυτό.

-o εξόδου

--output = έξοδος

Χρησιμοποιήστε την έξοδο ως το όνομα του προγράμματος που παράγεται από το ld . εάν αυτή η επιλογή δεν έχει καθοριστεί, το όνομα a.out χρησιμοποιείται από προεπιλογή. Η εντολή δέσμης ενεργειών "OUTPUT" μπορεί επίσης να καθορίσει το όνομα του αρχείου εξόδου.

-O επίπεδο

Εάν το επίπεδο είναι αριθμητικές τιμές μεγαλύτερες από το μηδέν, το ld βελτιστοποιεί την έξοδο. Αυτό μπορεί να διαρκέσει πολύ περισσότερο και κατά πάσα πιθανότητα θα πρέπει να ενεργοποιηθεί μόνο για το τελικό δυαδικό.

-q

- -μετανακλαστικά

Αφήστε τα τμήματα μετεγκατάστασης και τα περιεχόμενα σε πλήρως συνδεδεμένα exececutables. Τα εργαλεία ανάλυσης και βελτιστοποίησης μετά την σύνδεση ενδέχεται να χρειάζονται αυτές τις πληροφορίες για να εκτελέσουν σωστές τροποποιήσεις εκτελέσιμων αρχείων. Αυτό έχει ως αποτέλεσμα μεγαλύτερα εκτελέσιμα αρχεία.

Αυτή η επιλογή υποστηρίζεται αυτήν τη στιγμή μόνο σε πλατφόρμες ELF.

-r

- επανατοποθετήσιμη

Δημιουργήστε μετατοπίσιμη έξοδο --- δηλαδή, δημιουργήστε ένα αρχείο εξόδου το οποίο μπορεί με τη σειρά του να χρησιμεύσει ως είσοδος στην ld . Αυτό συχνά ονομάζεται μερική σύνδεση . Ως παρενέργεια, σε περιβάλλοντα που υποστηρίζουν τυπικούς αριθμούς magic Unix, αυτή η επιλογή ορίζει επίσης τον μαγικό αριθμό του αρχείου εξόδου σε "OMAGIC". Εάν αυτή η επιλογή δεν έχει καθοριστεί, δημιουργείται ένα απόλυτο αρχείο. Όταν συνδέετε προγράμματα C ++, αυτή η επιλογή δεν θα επιλύσει αναφορές σε κατασκευαστές. για να το κάνετε αυτό, χρησιμοποιήστε -Ur .

Όταν ένα αρχείο εισόδου δεν έχει την ίδια μορφή με το αρχείο εξόδου, η μερική σύνδεση υποστηρίζεται μόνο εάν το αρχείο εισόδου δεν περιέχει μετατοπίσεις. Οι διαφορετικές μορφές εξόδου μπορούν να έχουν περαιτέρω περιορισμούς. για παράδειγμα, μερικές μορφές βασισμένες σε "a.out" δεν υποστηρίζουν τη μερική σύνδεση με αρχεία εισόδου σε άλλες μορφές καθόλου.

Αυτή η επιλογή κάνει το ίδιο πράγμα με το -i .

-R όνομα αρχείου

- just-symbols = όνομα αρχείου

Διαβάστε τα ονόματα συμβόλων και τις διευθύνσεις τους από το όνομα αρχείου , αλλά μην τα μεταφέρετε ή τα συμπεριλάβετε στην έξοδο. Αυτό επιτρέπει στο αρχείο εξόδου σας να αναφέρεται συμβολικά σε απόλυτες θέσεις μνήμης που ορίζονται σε άλλα προγράμματα. Μπορείτε να χρησιμοποιήσετε αυτήν την επιλογή περισσότερες από μία φορές.

Για συμβατότητα με άλλους συνδέσμους ELF, εάν η επιλογή -R ακολουθείται από όνομα καταλόγου και όχι από όνομα αρχείου, θεωρείται ως η επιλογή -rpath .

-μικρό

- όλα

Παράλειψη όλων των πληροφοριών συμβόλων από το αρχείο εξόδου.

-ΜΙΚΡΟ

- σφάλμα-σφάλμα

Παράλειψη πληροφοριών συμβόλου debugger (αλλά όχι όλων των συμβόλων) από το αρχείο εξόδου.

-t

--ίχνος

Εκτυπώστε τα ονόματα των αρχείων εισόδου καθώς τα επεξεργάζεται.

-T αρχείο δέσμης ενεργειών

--script = scriptfile

Χρησιμοποιήστε δέσμη ενεργειών ως δέσμη συνδέσμων. Αυτή η δέσμη ενεργειών αντικαθιστά το προεπιλεγμένο script link του ld (αντί να προσθέτει σε αυτό), έτσι το commandfile πρέπει να καθορίζει όλα τα απαραίτητα για την περιγραφή του αρχείου εξόδου. Αν το scriptfile δεν υπάρχει στον τρέχοντα κατάλογο, το "ld" το αναζητά στους καταλόγους που καθορίζονται από τις προηγούμενες επιλογές -L . Πολλαπλές επιλογές συσσωρεύονται.

-u σύμβολο

- undefined = σύμβολο

Το σύμβολο δύναμης θα εισαχθεί στο αρχείο εξόδου ως αόριστο σύμβολο. Κάτι τέτοιο μπορεί, για παράδειγμα, να ενεργοποιήσει τη σύνδεση επιπρόσθετων ενοτήτων από τις τυπικές βιβλιοθήκες. -u μπορεί να επαναληφθεί με διαφορετικά επιχειρήματα επιλογών για να εισαχθούν πρόσθετα απροσδιόριστα σύμβολα. Αυτή η επιλογή είναι ισοδύναμη με την εντολή "EXTERN" συνδετήρα δέσμης ενεργειών.

-Ur

Για οτιδήποτε άλλο από τα προγράμματα C ++, αυτή η επιλογή είναι ισοδύναμη με το -r : παράγει μετατοπίσιμη έξοδο --- δηλαδή ένα αρχείο εξόδου το οποίο μπορεί με τη σειρά του να χρησιμεύσει ως είσοδος στο ld . Όταν συνδέετε προγράμματα C ++, -Ur επιλύει αναφορές σε κατασκευαστές, σε αντίθεση με -r . Δεν λειτουργεί για να χρησιμοποιήσει -Ur σε αρχεία τα οποία συνδέονταν με το UR . μόλις κατασκευαστεί ο κατασκευαστής, δεν μπορεί να προστεθεί. Χρησιμοποιήστε -Ur μόνο για τον τελευταίο μερικό σύνδεσμο και -r για τους άλλους.

--unique [= SECTION ]

Δημιουργεί ξεχωριστή ενότητα εξόδου για κάθε τμήμα εισόδου που ταιριάζει με το SECTION ή αν λείπει το προαιρετικό όρισμα SECTION μπαλαντέρ, για κάθε τμήμα εισόδου ορφανού. Ένα ορφανό τμήμα είναι ένα που δεν αναφέρεται ρητά σε μια δέσμη συνδέσμων. Μπορείτε να χρησιμοποιήσετε αυτήν την επιλογή πολλές φορές στη γραμμή εντολών. Αποτρέπει την κανονική συγχώνευση τμημάτων εισόδου με το ίδιο όνομα, υπερισχύει των αντιστοιχίσεων του τμήματος εξόδου σε μια δέσμη συνδέσμων.

-v

--εκδοχή

-V

Εμφάνιση του αριθμού έκδοσης για το ld . Η επιλογή -V περιλαμβάνει επίσης τις υποστηριζόμενες προσομοιώσεις.

--Discard-όλα

Διαγράψτε όλα τα τοπικά σύμβολα.

- ντόπιοι ντόπιοι

Διαγράψτε όλα τα προσωρινά τοπικά σύμβολα. Για τους περισσότερους στόχους, αυτό είναι όλα τα τοπικά σύμβολα των οποίων τα ονόματα αρχίζουν με το L.

σύμβολο

- σύμβολο σύλληψης = σύμβολο

Εκτυπώστε το όνομα κάθε συνδεδεμένου αρχείου στο οποίο εμφανίζεται το σύμβολο . Αυτή η επιλογή μπορεί να δοθεί πολλές φορές. Σε πολλά συστήματα είναι απαραίτητο να προεξοφλείτε μια υπογράμμιση.

Αυτή η επιλογή είναι χρήσιμη όταν έχετε ένα απροσδιόριστο σύμβολο στη σύνδεσή σας, αλλά δεν γνωρίζετε από πού προέρχεται η αναφορά.

διαδρομή

Προσθήκη διαδρομής στην προεπιλεγμένη πορεία αναζήτησης βιβλιοθήκης. Αυτή η επιλογή υπάρχει για συμβατότητα με το Solaris.

-z λέξη-κλειδί

Οι αναγνωρισμένες λέξεις-κλειδιά είναι "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", " ". Οι άλλες λέξεις-κλειδιά αγνοούνται για τη συμβατότητα του Solaris. Το "initfirst" σηματοδοτεί το αντικείμενο που πρόκειται να αρχίσει αρχικά κατά το χρόνο εκτέλεσης πριν από οποιαδήποτε άλλα αντικείμενα. Το "loadfltr" σηματοδοτεί το αντικείμενο που θα επεξεργαστεί τα φίλτρα του αμέσως κατά το χρόνο εκτέλεσης. "nodefaultlib" σηματοδοτεί το αντικείμενο που θα αγνοήσει η αναζήτηση εξαρτήσεων αυτού του αντικειμένου οποιεσδήποτε προεπιλεγμένες πορείες αναζήτησης βιβλιοθήκης. Το "nodelete" σηματοδοτεί ότι το αντικείμενο δεν πρέπει να εκφορτωθεί κατά το χρόνο εκτέλεσης. Το "nodlopen" σηματοδοτεί το αντικείμενο που δεν είναι διαθέσιμο στο "dlopen". Το "nodump" σηματοδοτεί ότι το αντικείμενο δεν μπορεί να απορριφθεί από το "dldump". "τώρα" σηματοδοτεί το αντικείμενο με την μη τεμπέλητη σύνδεση χρόνου εκτέλεσης. Η "αρχή" σηματοδοτεί ότι το αντικείμενο μπορεί να περιέχει $ ORIGIN. "defs" αποκλείει τα undefined σύμβολα. "muldefs" επιτρέπει πολλαπλούς ορισμούς. Το "combreloc" συνδυάζει πολλαπλά τμήματα μετεγκατάστασης και τα ταξινομεί για να καταστήσει δυνατή τη δυναμική αποθήκευση αναζήτησης δυνατών συμβόλων.

Το "nocombreloc" απενεργοποιεί πολλά τμήματα μετεγκατάστασης που συνδυάζουν. "nocopyreloc" απενεργοποιεί την παραγωγή αντιγράφων αντικατάστασης.

- ( αρχεία -)

- αρχεία ομάδας αρχικών - end-group

Τα αρχεία θα πρέπει να είναι μια λίστα αρχείων αρχειοθέτησης . Μπορεί να είναι είτε ρητά ονόματα αρχείων, είτε -l επιλογές.

Τα συγκεκριμένα αρχεία αναζητούνται επανειλημμένα έως ότου δεν δημιουργηθούν νέες μη καθορισμένες αναφορές. Κανονικά, ένα αρχείο αναζητείται μόνο μία φορά με τη σειρά που καθορίζεται στη γραμμή εντολών. Εάν ένα σύμβολο σε αυτό το αρχείο είναι απαραίτητο για την επίλυση ενός απροσδιόριστου συμβόλου που αναφέρεται από ένα αντικείμενο σε ένα αρχείο που εμφανίζεται αργότερα στη γραμμή εντολών, ο συνδέτης δεν θα μπορούσε να επιλύσει αυτήν την αναφορά. Με την ομαδοποίηση των αρχείων, όλοι θα αναζητηθούν επανειλημμένα μέχρι να επιλυθούν όλες οι πιθανές αναφορές.

Η χρήση αυτής της επιλογής έχει σημαντικό κόστος απόδοσης. Είναι καλύτερο να το χρησιμοποιείτε μόνο όταν υπάρχουν αναπόφευκτες κυκλικές αναφορές μεταξύ δύο ή περισσοτέρων αρχείων.

--accept-unknown-input-arch

--no-accept-unknown-input-arch

Ενημερώνει τον συνδέτη να δεχτεί αρχεία εισόδου των οποίων η αρχιτεκτονική δεν μπορεί να αναγνωριστεί. Η υπόθεση είναι ότι ο χρήστης ξέρει τι κάνουν και σκόπιμα θέλει να συνδέσει αυτά τα άγνωστα αρχεία εισόδου. Αυτή ήταν η προεπιλεγμένη συμπεριφορά του συνδέσμου, πριν την απελευθέρωση 2.14. Η προεπιλεγμένη συμπεριφορά από την έκδοση 2.14 και εξής είναι η απόρριψη τέτοιων αρχείων εισόδου και έτσι προστέθηκε η επιλογή -accept-unknown-input-arch για την επαναφορά της παλιάς συμπεριφοράς.

-αποδεικνύουν λέξη-κλειδί

Αυτή η επιλογή αγνοείται για συμβατότητα SunOS .

-Δικαμίνικα

-δηλαδή

-call_shared

Σύνδεση με δυναμικές βιβλιοθήκες. Αυτό έχει νόημα μόνο σε πλατφόρμες για τις οποίες υποστηρίζονται κοινές βιβλιοθήκες . Αυτή η επιλογή είναι κανονικά η προεπιλογή σε τέτοιες πλατφόρμες. Οι διαφορετικές παραλλαγές αυτής της επιλογής είναι για συμβατότητα με διάφορα συστήματα. Μπορείτε να χρησιμοποιήσετε αυτήν την επιλογή πολλές φορές στη γραμμή εντολών: επηρεάζει τη βιβλιοθήκη που αναζητά τις επιλογές -l που την ακολουθούν.

-Bgroup

Ορίστε τη σημαία "DF_1_GROUP" στην καταχώριση "DT_FLAGS_1" στη δυναμική ενότητα. Αυτό προκαλεί ότι ο σύνδεσμος χρόνου εκτέλεσης θα χειριστεί τις αναζητήσεις σε αυτό το αντικείμενο και οι εξαρτήσεις του θα εκτελεστούν μόνο μέσα στην ομάδα. - δεν είναι απροσδιόριστο . Αυτή η επιλογή έχει νόημα μόνο στις πλατφόρμες ELF που υποστηρίζουν κοινές βιβλιοθήκες .

-Βασικά

-δν

-non_shared

-στατικός

Μην συνδέεστε με κοινές βιβλιοθήκες. Αυτό έχει νόημα μόνο σε πλατφόρμες για τις οποίες υποστηρίζονται κοινές βιβλιοθήκες. Οι διαφορετικές παραλλαγές αυτής της επιλογής είναι για συμβατότητα με διάφορα συστήματα. Μπορείτε να χρησιμοποιήσετε αυτήν την επιλογή πολλές φορές στη γραμμή εντολών: επηρεάζει τη βιβλιοθήκη που αναζητά τις επιλογές -l που την ακολουθούν.

-Bsymbolic

Όταν δημιουργείτε μια κοινόχρηστη βιβλιοθήκη, δεσμεύετε τις αναφορές σε παγκόσμια σύμβολα στον ορισμό μέσα στην κοινόχρηστη βιβλιοθήκη, εάν υπάρχει. Κανονικά, είναι πιθανό ένα πρόγραμμα συνδεδεμένο με μια κοινή βιβλιοθήκη να παρακάμπτει τον ορισμό μέσα στην κοινόχρηστη βιβλιοθήκη. Αυτή η επιλογή έχει νόημα μόνο σε ELFplatforms που υποστηρίζουν κοινές βιβλιοθήκες.

--check-sections

- μη-έλεγχο-τμήματα

Ζητά από το linker να μην ελέγξει τις διευθύνσεις των ενοτήτων μετά την εκχώρησή τους για να δει αν υπάρχουν επικαλύψεις. Κανονικά ο σύνδεσμος θα εκτελέσει αυτόν τον έλεγχο και εάν εντοπίσει οποιεσδήποτε επικαλύψεις θα παράγει κατάλληλα μηνύματα σφάλματος. Ο συνδέτης γνωρίζει και κάνει αποζημιώσεις για τμήματα σε επικαλύψεις. Η προεπιλεγμένη συμπεριφορά μπορεί να αποκατασταθεί χρησιμοποιώντας το διακόπτη γραμμής εντολών -check-sections .

--cref

Εξάγει έναν πίνακα αναφοράς. Εάν δημιουργείται ένα αρχείο χάρτη συνδέσμου, ο πίνακας διασταυρωμένων αναφορών εκτυπώνεται στο αρχείο χάρτη. Διαφορετικά, εκτυπώνεται στην τυπική έξοδο.

Η μορφή του πίνακα είναι σκόπιμα απλή, έτσι ώστε να μπορεί εύκολα να επεξεργαστεί με ένα σενάριο, αν είναι απαραίτητο. Τα σύμβολα εκτυπώνονται, ταξινομημένα κατά όνομα. Για κάθε σύμβολο δίνεται μια λίστα με ονόματα αρχείων. Εάν έχει οριστεί το σύμβολο, το πρώτο αρχείο που αναγράφεται είναι η θέση του ορισμού. Τα υπόλοιπα αρχεία περιέχουν αναφορές στο σύμβολο.

--no-define-common

Αυτή η επιλογή αναστέλλει την εκχώρηση διευθύνσεων σε κοινά σύμβολα. Η εντολή δέσμης ενεργειών "INHIBIT_COMMON_ALLOCATION" έχει το ίδιο αποτέλεσμα.

Η επιλογή -no-define-common επιτρέπει την αποσύνδεση της απόφασης για την εκχώρηση διευθύνσεων στα κοινά σύμβολα από την επιλογή του τύπου αρχείου εξόδου. διαφορετικά ένας τύπος εξόδου που δεν μπορεί να μετακινηθεί αναγκάζει την εκχώρηση διευθύνσεων στα κοινά σύμβολα. Χρησιμοποιώντας το --no-define-common επιτρέπει στα κοινά σύμβολα που αναφέρονται από μια κοινή βιβλιοθήκη να εκχωρούνται διευθύνσεις μόνο στο κύριο πρόγραμμα. Αυτό εξαλείφει τον αχρησιμοποίητο διπλό χώρο στην κοινόχρηστη βιβλιοθήκη και επίσης αποτρέπει τυχόν σύγχυση κατά την επίλυση σε λάθος αντίγραφο όταν υπάρχουν πολλές δυναμικές μονάδες με εξειδικευμένες διαδρομές αναζήτησης για την ανάλυση συμβόλων χρόνου εκτέλεσης.

- σύμβολο αίσθησης = έκφραση

Δημιουργήστε ένα γενικό σύμβολο στο αρχείο εξόδου, που περιέχει την απόλυτη διεύθυνση που δίνεται από την έκφραση . Μπορείτε να χρησιμοποιήσετε αυτήν την επιλογή όσες φορές χρειάζεται για να ορίσετε πολλά σύμβολα στη γραμμή εντολών. Μια περιορισμένη μορφή αριθμητικής υποστηρίζεται για την έκφραση σε αυτό το πλαίσιο: μπορείτε να δώσετε μια δεκαεξαδική σταθερά ή το όνομα ενός υπάρχοντος συμβόλου ή να χρησιμοποιήσετε "+" και "-" για να προσθέσετε ή να αφαιρέσετε δεκαεξαδικές σταθερές ή σύμβολα. Αν χρειάζεστε πιο περίπλοκες εκφράσεις, σκεφτείτε να χρησιμοποιήσετε τη γλώσσα εντολών linker από ένα σενάριο. Σημείωση: δεν πρέπει να υπάρχει λευκός χώρος μεταξύ του συμβόλου , του σημείου ισότητας (`` = '') και της έκφρασης .

--ανακατεύει [= στυλ ]

- μη-παραμερισμό

Αυτές οι επιλογές ελέγχουν αν πρέπει να αλλάξετε τα ονόματα συμβόλων σε μηνύματα σφάλματος και σε άλλες έξοδοι. Όταν ο σύνδεσμος λέγεται να αποπροσανατολίσει, προσπαθεί να παρουσιάσει τα ονόματα συμβόλων με ευανάγνωστο τρόπο: λωρίδες οδηγεί τις υπογράμμισεις εάν χρησιμοποιούνται από τη μορφή αρχείου αντικειμένων και μετατρέπει τα C ++ ονόματα συμβόλων με ματς σε αναγνωρίσιμα από το χρήστη ονόματα. Διαφορετικοί μεταγλωττιστές έχουν διαφορετικά στυλ μαγκλάνγκ. Το προαιρετικό όρισμα στυλ απομυθοποίησης μπορεί να χρησιμοποιηθεί για να επιλέξετε ένα κατάλληλο στυλ demangling για τον μεταγλωττιστή σας. Ο σύνδεσμος θα υποδιαιρεθεί από προεπιλογή εκτός αν έχει οριστεί η μεταβλητή περιβάλλοντος COLLECT_NO_DEMANGLE . Αυτές οι επιλογές μπορούν να χρησιμοποιηθούν για την αντικατάσταση της προεπιλογής.

- αρχείο dynamics-linker

Ορίστε το όνομα του δυναμικού συνδέσμου. Αυτό έχει νόημα μόνο όταν δημιουργείτε δυναμικά συνδεδεμένα εκτελέσιμα αρχεία ELF. Ο προεπιλεγμένος δυναμικός σύνδεσμος είναι κανονικά σωστός. μην το χρησιμοποιείτε αν δεν ξέρετε τι κάνετε.

--μετασχηματισμένα -μετασχηματικά

Αυτή η επιλογή έχει νόημα μόνο όταν συνδέεται ο ενσωματωμένος κώδικας PIC MIPS που δημιουργείται από την επιλογή -membedded-pic στον μεταγλωττιστή GNU και τον assembler. Προκαλεί τον σύνδεσμο να δημιουργήσει έναν πίνακα ο οποίος μπορεί να χρησιμοποιηθεί κατά τη διάρκεια εκτέλεσης για τη μετεγκατάσταση οποιωνδήποτε δεδομένων που έχουν σταδιακά αρχικοποιηθεί σε τιμές δείκτη. Δείτε τον κώδικα στο testsuite / ld-empic για λεπτομέρειες.

- προειδοποιήσεις για το θάνατο

Αντιμετωπίστε όλες τις προειδοποιήσεις ως σφάλματα .

- force-exe-suffix

Βεβαιωθείτε ότι ένα αρχείο εξόδου έχει ένα .exe επίθημα.

Εάν ένα επιτυχώς κατασκευασμένο πλήρως συνδεδεμένο αρχείο εξόδου δεν έχει κατάληξη " .exe " ή " .dll ", αυτή η επιλογή αναγκάζει το linker να αντιγράψει το αρχείο εξόδου σε ένα με το ίδιο όνομα με ένα επίθημα ".exe". Αυτή η επιλογή είναι χρήσιμη όταν χρησιμοποιείτε μη τροποποιημένα makefiles Unix σε έναν κεντρικό υπολογιστή των Microsoft Windows, αφού ορισμένες εκδόσεις των Windows δεν θα εκτελούν μια εικόνα εκτός αν τελειώνει σε ένα ".exe" κατάληξη.

--no-gc-τμήματα

--gc-sections

Ενεργοποιήστε τη συλλογή απορριμμάτων από τμήματα εισόδου που δεν χρησιμοποιήθηκαν. Αγνοείται σε στόχους που δεν υποστηρίζουν αυτήν την επιλογή. Αυτή η επιλογή δεν είναι συμβατή με το -r , ούτε πρέπει να χρησιμοποιείται με δυναμική σύνδεση. Η προεπιλεγμένη συμπεριφορά (μη εκτέλεσης αυτής της συλλογής απορριμμάτων ) μπορεί να αποκατασταθεί καθορίζοντας --no-gc-τμήματα στη γραμμή εντολών.

--βοήθεια

Εκτυπώστε μια σύνοψη των επιλογών γραμμής εντολών στην τυπική έξοδο και έξοδο.

- στόχος-βοήθεια

Εκτυπώστε μια σύνοψη όλων των συγκεκριμένων επιλογών στόχων στην τυπική έξοδο και έξοδο.

-Φύλλο χάρτη χάρτη

Εκτυπώστε ένα χάρτη συνδέσμων στο αρχείο mapfile . Δείτε την περιγραφή της επιλογής -M , παραπάνω.

--no-keep-memory

ld κανονικά βελτιστοποιεί την ταχύτητα κατά τη χρήση της μνήμης , αποθηκεύοντας στο cache τους πίνακες συμβόλων των αρχείων εισόδου στη μνήμη. Αυτή η επιλογή λέει στο ld να βελτιστοποιήσει τη χρήση της μνήμης, επαναδιατυπώνοντας τους πίνακες συμβόλων ανάλογα με τις ανάγκες. Αυτό μπορεί να είναι απαραίτητο αν το ld ξεμείνει από το χώρο μνήμης ενώ συνδέει ένα μεγάλο εκτελέσιμο αρχείο.

- όχι-απροσδιόριστο

-z defs

Κανονικά κατά τη δημιουργία μιας μη συμβολικής κοινόχρηστης βιβλιοθήκης επιτρέπονται απροσδιόριστα σύμβολα και αφήνονται να επιλυθούν από τον φορτωτή χρόνου εκτέλεσης. Αυτές οι επιλογές αποκλείουν τέτοια αόριστα σύμβολα.

--Παραγωγή πολλαπλών ορισμών

-z muldefs

Κανονικά, όταν ένα σύμβολο ορίζεται πολλές φορές, ο σύνδεσμος θα αναφέρει ένα θανατηφόρο σφάλμα. Αυτές οι επιλογές επιτρέπουν πολλαπλούς ορισμούς και θα χρησιμοποιηθεί ο πρώτος ορισμός.

--Παράλληλα - δεν ορίζεται

Να επιτρέπονται τα αόριστα σύμβολα σε κοινόχρηστα αντικείμενα ακόμη και όταν έχει οριστεί --no-undefined. Το καθαρό αποτέλεσμα θα είναι ότι τα απροσδιόριστα σύμβολα στα κανονικά αντικείμενα θα προκαλέσουν ακόμα ένα σφάλμα, αλλά τα ακαθόριστα σύμβολα στα κοινά αντικείμενα θα αγνοηθούν. Η εφαρμογή του no_undefined κάνει την υπόθεση ότι ο συνδετήρας χρόνου εκτέλεσης θα πνίξει σε αόριστα σύμβολα. Ωστόσο, υπάρχει τουλάχιστον ένα σύστημα (BeOS), όπου τα undefined σύμβολα σε κοινές βιβλιοθήκες είναι φυσιολογικά, αφού ο πυρήνας τους διορθώνει κατά το χρόνο φόρτωσης για να επιλέξει ποια λειτουργία είναι η πλέον κατάλληλη για την τρέχουσα αρχιτεκτονική. Το IE επιλέγει δυναμικά μια κατάλληλη συνάρτηση memset. Προφανώς είναι επίσης φυσιολογικό για τις κοινές βιβλιοθήκες της HPPA να έχουν απροσδιόριστα σύμβολα.

--no-undefined-version

Κανονικά, όταν ένα σύμβολο έχει μια απροσδιόριστη έκδοση, ο σύνδεσμος θα το αγνοήσει. Αυτή η επιλογή αποκλείει τα σύμβολα με απροσδιόριστη έκδοση και θα εκδοθεί θανατηφόρο σφάλμα.

- μη-προειδοποίηση-αναντιστοιχία

Κανονικά, το ld θα δώσει ένα σφάλμα αν προσπαθήσετε να συνδέσετε μαζί αρχεία εισόδου που δεν είναι κατάλληλα για κάποιο λόγο, ίσως επειδή έχουν συνταχθεί για διαφορετικούς επεξεργαστές ή για διαφορετικές ευκολίες. Αυτή η επιλογή λέει στον ld ότι πρέπει να επιτρέψει σιωπηρά τέτοια πιθανά σφάλματα. Αυτή η επιλογή θα πρέπει να χρησιμοποιείται μόνο με προσοχή, σε περιπτώσεις που έχετε λάβει κάποια ειδική ενέργεια που να διασφαλίζει ότι τα σφάλματα του συνδέσμου είναι ακατάλληλα.

- όχι-ολόκληρο-αρχείο

Απενεργοποιήστε την επίδραση της επιλογής --whole-archive για τα επόμενα αρχεία αρχειοθέτησης.

--noinhibit-exec

Διατηρήστε το εκτελέσιμο αρχείο εξόδου όποτε χρησιμοποιείται ακόμη. Κανονικά, ο σύνδεσμος δεν θα παράγει ένα αρχείο εξόδου αν συναντήσει σφάλματα κατά τη διαδικασία σύνδεσης. εξέρχεται χωρίς να γράψει ένα αρχείο εξόδου όταν εκδίδει οποιοδήποτε σφάλμα.

-nostdlib

Μόνο διευθύνσεις βιβλιοθήκης αναζήτησης που καθορίζονται ρητά στη γραμμή εντολών. Οι κατάλογοι βιβλιοθήκης που καθορίζονται σε δέσμες ενεργειών συνδέσμου (συμπεριλαμβανομένων των δεσμών εντολών που καθορίζονται στη γραμμή εντολών) αγνοούνται.

- μορφότυπο εξόδου μορφοποίησης

Το ld μπορεί να ρυθμιστεί ώστε να υποστηρίζει περισσότερα από ένα είδη αρχείου αντικειμένων. Εάν το ld έχει διαμορφωθεί με αυτόν τον τρόπο, μπορείτε να χρησιμοποιήσετε την επιλογή --format για να καθορίσετε τη δυαδική μορφή του αρχείου αντικειμένου εξόδου. Ακόμη και όταν το ld είναι ρυθμισμένο να υποστηρίζει μορφές εναλλακτικών αντικειμένων, συνήθως δεν χρειάζεται να το καθορίσετε, καθώς το ld θα πρέπει να ρυθμιστεί ώστε να παράγει ως προεπιλεγμένη μορφή εξόδου την πιο συνηθισμένη μορφή σε κάθε μηχάνημα. η μορφή εξόδου είναι μια συμβολοσειρά κειμένου, το όνομα μιας συγκεκριμένης μορφής που υποστηρίζεται από τις βιβλιοθήκες BFD. (Μπορείτε να αναφέρετε τις διαθέσιμες δυαδικές μορφές με το objdump -i .) Η εντολή script "OUTPUT_FORMAT" μπορεί επίσης να καθορίσει τη μορφή εξόδου, αλλά αυτή η επιλογή αντικαθιστά αυτήν.

-qmagic

Αυτή η επιλογή αγνοείται για τη συμβατότητα του Linux.

-Qy

Αυτή η επιλογή αγνοείται για τη συμβατότητα SVR4.

--χαλαρώστε

Μια επιλογή με εφέ που εξαρτώνται από τη μηχανή. Αυτή η επιλογή υποστηρίζεται μόνο σε μερικούς στόχους.

Σε ορισμένες πλατφόρμες, η επιλογή --relax εκτελεί παγκόσμιες βελτιστοποιήσεις που γίνονται δυνατές όταν ο συνδέτης επιλύει την αντιμετώπιση στο πρόγραμμα, όπως η χαλάρωση των τρόπων διευθύνσεων και η σύνταξη νέων οδηγιών στο αρχείο αντικειμένου εξόδου.

Σε ορισμένες πλατφόρμες, αυτές οι βελτιστοποιήσεις χρόνου σύνδεσης στο διαδίκτυο ενδέχεται να καταστήσουν αδύνατη τη συμβολική σφαλμάτωση του εκτελέσιμου αποτελέσματος. Αυτό είναι γνωστό ότι ισχύει για την οικογένεια επεξεργαστών Matsushita MN10200 και MN10300.

Σε πλατφόρμες όπου αυτό δεν υποστηρίζεται, το - relax γίνεται αποδεκτό, αλλά αγνοείται.

--retain-σύμβολα -αρχείο αρχείου

Διατηρήστε μόνο τα σύμβολα που αναφέρονται στο όνομα αρχείου , απορρίπτοντας όλα τα υπόλοιπα. το όνομα αρχείου είναι απλά ένα επίπεδο αρχείο, με ένα όνομα συμβόλου ανά γραμμή. Αυτή η επιλογή είναι ιδιαίτερα χρήσιμη σε περιβάλλοντα (όπως VxWorks) όπου συγκεντρώνεται βαθμιαία ένας μεγάλος παγκόσμιος πίνακας συμβόλων για τη διατήρηση της μνήμης χρόνου εκτέλεσης.

-retain-symbols-file δεν απομακρύνει τα απροσδιόριστα σύμβολα ή τα σύμβολα που χρειάζονται για τις μετεγκαταστάσεις.

Μπορείτε να καθορίσετε μόνο --retain-symbols-file μία φορά στη γραμμή εντολών. Αντικαθιστά τις -s και -S .

-διεύθυνση διαδρομής

Προσθέστε έναν κατάλογο στη διαδρομή αναζήτησης της βιβλιοθήκης χρόνου εκτέλεσης. Αυτό χρησιμοποιείται όταν συνδέετε ένα ELFexecutable με κοινόχρηστα αντικείμενα. Όλα τα επιχειρήματα αλληλουχίας συνενώνονται και μεταβιβάζονται στον συνδετήρα χρόνου εκτέλεσης, ο οποίος τα χρησιμοποιεί για να εντοπίσει τα κοινά αντικείμενα κατά το χρόνο εκτέλεσης. Η επιλογή -path χρησιμοποιείται επίσης όταν εντοπίζετε κοινά αντικείμενα που απαιτούνται από τα κοινόχρηστα αντικείμενα που περιλαμβάνονται ρητά στη σύνδεση. ανατρέξτε στην περιγραφή της επιλογής -rpath-link . Εάν δεν χρησιμοποιείται η παράμετρος -rath όταν συνδέεται ένα εκτελέσιμο αρχείο ELF, θα χρησιμοποιηθεί το περιεχόμενο της μεταβλητής περιβάλλοντος "LD_RUN_PATH" εάν έχει οριστεί.

Η επιλογή -path μπορεί επίσης να χρησιμοποιηθεί στο SunOS. Από προεπιλογή, στον SunOS, ο σύνδεσμος θα σχηματίσει μια ενημερωμένη έκδοση κώδικα αναζήτησης από όλες τις επιλογές -L που δίδονται. Εάν χρησιμοποιείται μια επιλογή -rath , η διαδρομή αναζήτησης runtime θα διαμορφωθεί αποκλειστικά χρησιμοποιώντας τις επιλογές -rpath , αγνοώντας τις επιλογές -L . Αυτό μπορεί να είναι χρήσιμο όταν χρησιμοποιείτε το gcc, το οποίο προσθέτει πολλές επιλογές -L οι οποίες μπορεί να είναι εγκατεστημένες σε συστήματα αρχείων onNFS.

Για συμβατότητα με άλλους συνδέσμους ELF, εάν η επιλογή -R ακολουθείται από όνομα καταλόγου και όχι από όνομα αρχείου, θεωρείται ως η επιλογή -rpath .

-rpath-link DIR

Όταν χρησιμοποιείτε το ELF ή το SunOS, μια κοινόχρηστη βιβλιοθήκη μπορεί να χρειαστεί άλλη. Αυτό συμβαίνει όταν ένας σύνδεσμος "ld-shared" περιλαμβάνει μια κοινόχρηστη βιβλιοθήκη ως ένα από τα αρχεία εισόδου.

Όταν ο συνδέτης συναντήσει μια τέτοια εξάρτηση όταν κάνει έναν μη κοινόχρηστο, μη μετακινούμενο σύνδεσμο, θα προσπαθήσει αυτόματα να εντοπίσει την απαιτούμενη κοινόχρηστη βιβλιοθήκη και να την συμπεριλάβει στον σύνδεσμο, εάν δεν συμπεριλαμβάνεται ρητά. Σε μια τέτοια περίπτωση, η επιλογή -rpath-link καθορίζει το πρώτο σύνολο καταλόγων για αναζήτηση. Η επιλογή -path-link μπορεί να καθορίσει μια ακολουθία ονομάτων καταλόγων είτε καθορίζοντας μια λίστα ονομάτων που χωρίζονται από τους κόλπους είτε εμφανίζοντας πολλές φορές.

Αυτή η επιλογή θα πρέπει να χρησιμοποιείται με προσοχή δεδομένου ότι υπερισχύει η διαδρομή αναζήτησης που μπορεί να έχει σκληραγωγηθεί σε μια κοινόχρηστη βιβλιοθήκη. Σε μια τέτοια περίπτωση είναι πιθανό να χρησιμοποιηθεί ακούσια μια διαφορετική πορεία αναζήτησης από ό, τι θα έκανε ο συνδέτης χρόνου εκτέλεσης.

Ο σύνδεσμος χρησιμοποιεί τις ακόλουθες διαδρομές αναζήτησης για να εντοπίσει τις απαιτούμενες κοινές βιβλιοθήκες.

1.

Οποιοσδήποτε κατάλογος καθορίζεται από τις επιλογές -rpath-link .

2.

Οποιοσδήποτε κατάλογος καθορίζεται από τις επιλογές -path . Η διαφορά μεταξύ -rpath και -rpath-link είναι ότι οι κατάλογοι που καθορίζονται από τις επιλογές -rpath περιλαμβάνονται στο εκτελέσιμο αρχείο και χρησιμοποιούνται κατά το χρόνο εκτέλεσης, ενώ η επιλογή -rpath-link είναι αποτελεσματική μόνο κατά την ώρα σύνδεσης. Είναι μόνο για το εγγενές linker.

3.

Σε ένα σύστημα ELF, εάν δεν χρησιμοποιήθηκαν οι επιλογές "rpath" και "rpath-link", αναζητήστε τα περιεχόμενα της μεταβλητής περιβάλλοντος "LD_RUN_PATH". Είναι μόνο για το εγγενές linker.

4.

Στο SunOS, εάν δεν χρησιμοποιήθηκε η επιλογή -rath , αναζητήστε οποιονδήποτε κατάλογο καθορίστηκε χρησιμοποιώντας τις επιλογές -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. Στον SunOS, ο σύνδεσμος θα δημιουργήσει αυτόματα μια κοινόχρηστη βιβλιοθήκη αν η επιλογή -e δεν χρησιμοποιείται και υπάρχουν αόριστα σύμβολα στον σύνδεσμο.

--sort-common

Αυτή η επιλογή λέει στο ld να ταξινομήσει τα κοινά σύμβολα κατά μέγεθος όταν τα τοποθετεί στα κατάλληλα τμήματα εξόδου. Πρώτα βγαίνουν όλα τα σύμβολα ενός byte, τότε όλα τα δύο byte, τότε όλα τα τέσσερα byte, και στη συνέχεια όλα τα άλλα. Αυτό είναι για την αποφυγή κενών μεταξύ των συμβόλων λόγω περιορισμών ευθυγράμμισης.

--split-by-file [ μέγεθος ]

Παρόμοια με το -split-by-reloc, αλλά δημιουργεί μια νέα ενότητα εξόδου για κάθε αρχείο εισόδου όταν φτάσει το μέγεθος . το προεπιλεγμένο μέγεθος σε μέγεθος 1 εάν δεν έχει δοθεί.

--split-by-reloc [ count ]

Προσπαθεί να δημιουργήσει επιπλέον τμήματα στο αρχείο εξόδου, έτσι ώστε καμία ενότητα εξόδου στο αρχείο να περιέχει περισσότερες από τις μετεγκαταστάσεις μετρήσεων . Αυτό είναι χρήσιμο κατά τη δημιουργία τεράστιων μετατοπίσιμων αρχείων για τη λήψη σε ορισμένους πυρήνες πραγματικού χρόνου με τη μορφή αρχείου αντικειμένων COFF. δεδομένου ότι το COFFμπορεί να αντιπροσωπεύει περισσότερες από 65535 μετεγκαταστάσεις σε μία μόνο ενότητα. Σημειώστε ότι αυτό δεν θα λειτουργήσει με μορφές αρχείου αντικειμένων που δεν υποστηρίζουν αυθαίρετες ενότητες. Ο σύνδεσμος δεν θα διαιρέσει μεμονωμένες ενότητες εισόδου για αναδιανομή, οπότε αν μια ενότητα εισόδου περιέχει περισσότερες από τις μετεγκαταστάσεις μετρήσεων, μία ενότητα εξόδου θα περιέχει πολλές μετατοπίσεις. μετράει προεπιλογή σε τιμή 32768.

--stats

Υπολογισμός και εμφάνιση στατιστικών στοιχείων σχετικά με τη λειτουργία του συνδέσμου, όπως χρόνος εκτέλεσης και χρήση μνήμης.

- παραδοσιακό σχήμα

Για ορισμένους στόχους, η παραγωγή του ld διαφέρει κατά κάποιο τρόπο από την έξοδο κάποιου υπάρχοντος συνδέτη. Αυτός ο διακόπτης ζητά από το ld να χρησιμοποιήσει την παραδοσιακή μορφή αντί.

Για παράδειγμα, στην SunOS, ld συνδυάζει διπλές καταχωρήσεις στον πίνακα συμβόλων συμβόλων. Αυτό μπορεί να μειώσει το μέγεθος ενός αρχείου εξόδου με πλήρεις πληροφορίες εντοπισμού σφαλμάτων κατά περισσότερο από 30 τοις εκατό. Δυστυχώς, το πρόγραμμα SunOS "dbx" δεν μπορεί να διαβάσει το προκύπτον πρόγραμμα ("gdb" δεν έχει κανένα πρόβλημα). Ο διακόπτης - παραδοσιακής μορφής λέει στο ld να μην συνδυάσει διπλές εγγραφές.

- sectionction start section = org

Εντοπίστε μια ενότητα στο αρχείο εξόδου στην απόλυτη διεύθυνση που δίνεται από org . Μπορείτε να χρησιμοποιήσετε αυτήν την επιλογή όσες φορές χρειάζεται για να εντοπίσετε πολλές ενότητες στη γραμμή εντολών. org πρέπει να είναι ένα ενιαίο δεκαεξαδικό ακέραιο. για συμβατότητα με άλλους συνδέσμους, μπορείτε να παραλείψετε το κύριο 0x που συσχετίζεται συνήθως με δεκαεξαδικές τιμές. Σημείωση: δεν πρέπει να υπάρχει λευκός χώρος μεταξύ του ονόματος τομέα, του σημείου ισότητας (`` = ''), και org .

-Tbss org

-Τατάκια org

-Τοξ org

Χρησιμοποιήστε το org ως την αρχική διεύθυνση για το --- αντίστοιχα το τμήμα "bss", "data" ή το "text" του αρχείου εξόδου. org πρέπει να είναι ένα ενιαίο δεκαεξαδικό ακέραιο. για συμβατότητα με άλλους συνδέσμους, μπορείτε να παραλείψετε το κύριο 0x που συσχετίζεται συνήθως με δεκαεξαδικές τιμές.

- Δελτίο-verbose

--πολύλογος

Εμφανίστε τον αριθμό έκδοσης για το ld και καταχωρίστε τις υποστηριζόμενες προσομοιώσεις συνδέσμου. Εμφάνιση των αρχείων εισόδου που μπορούν και δεν μπορούν να ανοίξουν. Εμφανίστε τη δέσμη συνδέσμων που χρησιμοποιείται από τον σύνδεσμο.

--version-script = version-scriptfile

Καθορίστε το όνομα ενός σεναρίου έκδοσης στον σύνδεσμο. Αυτό χρησιμοποιείται συνήθως κατά τη δημιουργία κοινών βιβλιοθηκών για τον προσδιορισμό πρόσθετων πληροφοριών σχετικά με την κληρονομιά της έκδοσης για τη βιβλιοθήκη που δημιουργείται. Αυτή η επιλογή έχει νόημα μόνο στις πλατφόρμες ELF που υποστηρίζουν κοινές βιβλιοθήκες.

- συνηθισμένο

Προειδοποιήστε όταν ένα κοινό σύμβολο συνδυάζεται με ένα άλλο κοινό σύμβολο ή με έναν ορισμό συμβόλων. Οι συνδετήρες Unix επιτρέπουν αυτή την κάπως αβάσιμη πρακτική, αλλά οι συνδετήρες σε κάποια άλλα λειτουργικά συστήματα δεν το κάνουν. Αυτή η επιλογή σάς επιτρέπει να εντοπίσετε πιθανά προβλήματα από το συνδυασμό παγκόσμιων συμβόλων. Δυστυχώς, μερικές βιβλιοθήκες Γ χρησιμοποιούν αυτήν την πρακτική, οπότε μπορείτε να λάβετε ορισμένες προειδοποιήσεις σχετικά με τα σύμβολα τόσο στις βιβλιοθήκες όσο και στα προγράμματά σας.

Υπάρχουν τρία είδη παγκόσμιων συμβόλων, που απεικονίζονται εδώ με παραδείγματα C:

int i = 1;

Ένας ορισμός, ο οποίος πηγαίνει στην ενότητα προετοιμασμένων δεδομένων του αρχείου εξόδου.

external int i;

Μια απροσδιόριστη αναφορά, η οποία δεν διαθέτει χώρο. Πρέπει να υπάρχει κάποιος ορισμός ή κοινό σύμβολο για τη μεταβλητή κάπου.

int i;

Ένα κοινό σύμβολο. Εάν υπάρχουν μόνο (ένα ή περισσότερα) κοινά σύμβολα για μια μεταβλητή, πηγαίνει στην περιοχή μη εξουσιοδοτημένων δεδομένων του αρχείου εξόδου. Ο σύνδεσμος συγχωνεύει πολλαπλά κοινά σύμβολα για την ίδια μεταβλητή σε ένα μόνο σύμβολο. Αν έχουν διαφορετικά μεγέθη, επιλέγουν το μεγαλύτερο μέγεθος. Ο σύνδεσμος μετατρέπει ένα κοινό σύμβολο σε μια δήλωση, εάν υπάρχει ένας ορισμός της ίδιας μεταβλητής.

Η επιλογή --warn-common μπορεί να παράγει πέντε είδη προειδοποιήσεων. Κάθε προειδοποίηση αποτελείται από ένα ζεύγος γραμμών: το πρώτο περιγράφει το σύμβολο που μόλις συναντήθηκε και το δεύτερο περιγράφει το προηγούμενο σύμβολο που συναντήθηκε με το ίδιο όνομα. Ένα ή και τα δύο σύμβολα θα είναι ένα κοινό σύμβολο.

1.

Μετατρέποντας ένα κοινό σύμβολο σε μια αναφορά, επειδή υπάρχει ήδη ένας ορισμός για το σύμβολο.

(
): προειδοποίηση: συνηθισμένο του < παρακάμπτεται εξ ορισμού (
):

2.

Μετατρέποντας ένα κοινό σύμβολο σε μια αναφορά, επειδή συναντάμε έναν μεταγενέστερο ορισμό για το σύμβολο. Αυτό είναι το ίδιο με την προηγούμενη περίπτωση, εκτός από το ότι τα σύμβολα συναντώνται με διαφορετική σειρά.

(
): προειδοποίηση: ο ορισμός του < αντικαθιστά κοινό <αρχείο> (
): προειδοποίηση:

3.

Συγχώνευση κοινού σύμβολο με προηγούμενο κοινό σύμβολο ίδιου μεγέθους.

(
): προειδοποίηση: πολλαπλά κοινά για το < (
): προειδοποίηση:

4.

Συγχώνευση κοινού σύμβολο με προηγούμενο μεγαλύτερο κοινό σύμβολο.

(
): προειδοποίηση: συνηθισμένο του < που υπερισχύει από το μεγαλύτερο κοινό <αρχείο> (
):

5.

Συγχώνευση κοινού σύμβολο με προηγούμενο μικρότερο κοινό σύμβολο. Αυτό είναι το ίδιο με την προηγούμενη περίπτωση, εκτός από το ότι τα σύμβολα συναντώνται με διαφορετική σειρά.

(
): προειδοποίηση: σύνηθες του < που υπερισχύει του μικρότερου κοινού (
):

- κατασκευαστές βλημάτων

Προειδοποιήστε εάν χρησιμοποιούνται γενικοί κατασκευαστές. Αυτό είναι χρήσιμο μόνο για μερικές μορφές αρχείου αντικειμένων. Για μορφές όπως COFF ή ELF, ο σύνδεσμος δεν μπορεί να ανιχνεύσει τη χρήση των παγκόσμιων κατασκευαστών.

--warn-multiple-gp

Προειδοποιήστε εάν απαιτούνται πολλαπλές τιμές παγκόσμιου δείκτη στο αρχείο εξόδου . Αυτό έχει νόημα μόνο για ορισμένους επεξεργαστές, όπως το Alpha. Συγκεκριμένα, ορισμένοι επεξεργαστές τοποθετούν σταθερές μεγάλης αξίας σε ένα ειδικό τμήμα. Ένας ειδικός καταχωρητής (ο παγκόσμιος δείκτης) δείχνει στη μέση αυτής της ενότητας, έτσι ώστε οι σταθερές να μπορούν να φορτωθούν αποτελεσματικά μέσω μιας σχετικής λειτουργίας διευθυνσιοδότησης βασικού μητρώου. Δεδομένου ότι η μετατόπιση στη σχετική κατάσταση βασικού καταλόγου είναι σταθερή και σχετικά μικρή (π.χ. 16 bits), αυτό περιορίζει το μέγιστο μέγεθος της σταθερής ομάδας. Έτσι, σε μεγάλα προγράμματα, είναι συχνά απαραίτητο να χρησιμοποιούμε πολλαπλές τιμές παγκόσμιου δείκτη για να μπορούμε να αντιμετωπίσουμε όλες τις πιθανές σταθερές. Αυτή η επιλογή προκαλεί την έκδοση προειδοποίησης όποτε συμβαίνει αυτή η περίπτωση.

- προειδοποίηση-μία φορά

Προειδοποιείστε μόνο μία φορά για κάθε απροσδιόριστο σύμβολο, αντί για μία φορά ανά ενότητα που αναφέρεται σε αυτό.

- ευθυγράμμιση διατομής

Προειδοποιήστε εάν η διεύθυνση ενός τμήματος εξόδου αλλάζει λόγω ευθυγράμμισης. Τυπικά, η ευθυγράμμιση θα ρυθμιστεί από ένα τμήμα εισόδου. Η διεύθυνση θα αλλάξει μόνο εάν δεν καθορίζεται ρητά. δηλαδή εάν η εντολή "SECTIONS" δεν καθορίζει μια διεύθυνση εκκίνησης για την ενότητα.

- όλο το αρχείο

Για κάθε αρχείο που αναφέρεται στη γραμμή εντολών μετά από την επιλογή -whole-archive , συμπεριλάβετε κάθε αρχείο αντικειμένου στο αρχείο στη σύνδεση, αντί να αναζητήσετε το αρχείο για τα απαιτούμενα αρχεία αντικειμένων. Αυτό χρησιμοποιείται συνήθως για να μετατρέψει ένα αρχείο αρχειοθέτησης σε μια κοινόχρηστη βιβλιοθήκη, αναγκάζοντας κάθε αντικείμενο να συμπεριληφθεί στην προκύπτουσα κοινόχρηστη βιβλιοθήκη. Αυτή η επιλογή μπορεί να χρησιμοποιηθεί περισσότερες από μία φορές.

Δύο σημειώσεις κατά τη χρήση αυτής της επιλογής από το gcc: Πρώτον, η gcc δεν γνωρίζει αυτήν την επιλογή, οπότε πρέπει να χρησιμοποιήσετε το -Wl, -whole-archive . Δεύτερον, μην ξεχάσετε να χρησιμοποιήσετε την -Wl, -not-whole-archive μετά τη λίστα των αρχείων σας, επειδή η gcc θα προσθέσει τη δική της λίστα αρχείων στο σύνδεσμό σας και ίσως να μην θέλετε αυτή η σημαία να επηρεάσει και αυτές.

- σύμβολο περιτύλιξης

Χρησιμοποιήστε τη λειτουργία περιτυλίγματος για σύμβολο . Οποιαδήποτε απροσδιόριστη αναφορά στο σύμβολο θα επιλυθεί σε "__ wrap_symbol". Οποιαδήποτε μη προσδιορισμένη αναφορά στο "__real_symbol" θα επιλυθεί ως σύμβολο .

Αυτό μπορεί να χρησιμοποιηθεί για την παροχή περιτυλίγματος για μια λειτουργία συστήματος. Η λειτουργία wrap θα πρέπει να ονομάζεται "__wrap_symbol". Εάν επιθυμεί να καλέσει τη λειτουργία του συστήματος, πρέπει να καλέσει "__ real_symbol".

Εδώ είναι ένα ασήμαντο παράδειγμα:

void * __wrap_malloc (int c) {printf ("malloc ονομάζεται με% ld \ n", γ); επιστροφή __real_malloc (c); }}

Εάν συνδέσετε άλλο κώδικα με αυτό το αρχείο χρησιμοποιώντας το - wrap malloc , τότε όλες οι κλήσεις στο "malloc" θα καλούν τη λειτουργία "__wrap_malloc". Η κλήση στο "__real_malloc" στο "__wrap_malloc" θα καλέσει την πραγματική λειτουργία "malloc".

Ίσως θελήσετε να δώσετε και μια λειτουργία "__real_malloc", έτσι ώστε οι συνδέσεις χωρίς την επιλογή -wrap να επιτύχουν. Εάν το κάνετε αυτό, δεν πρέπει να βάλετε τον ορισμό του "__ real_malloc" στο ίδιο αρχείο με το "__wrap_malloc". αν το κάνετε, ο συνθέτης μπορεί να επιλύσει την κλήση πριν ο σύνδεσμος έχει την ευκαιρία να το τυλίξει σε "malloc".

--ableable-new-dtags

--disable-new-dtags

Αυτός ο σύνδεσμος μπορεί να δημιουργήσει τις νέες δυναμικές ετικέτες στο ELF. Αλλά τα παλαιότερα συστήματα ELF μπορεί να μην τα κατανοούν. Εάν καθορίσετε --ableable-new-dtags , οι δυναμικές ετικέτες θα δημιουργηθούν όπως απαιτείται. Εάν καθορίσετε --disable-new-dtags , δεν θα δημιουργηθούν νέες δυναμικές ετικέτες. Από προεπιλογή, οι νέες δυναμικές ετικέτες δεν δημιουργούνται. Σημειώστε ότι αυτές οι επιλογές είναι διαθέσιμες μόνο για τα συστήματα SELF.

Ο σύνδεσμος i386 PE υποστηρίζει την επιλογή -shared , η οποία προκαλεί την έξοδο ως μια δυναμικά συνδεδεμένη βιβλιοθήκη (DLL) αντί για ένα κανονικό εκτελέσιμο αρχείο. Θα πρέπει να ονομάσετε την έξοδο "* .dll" όταν χρησιμοποιείτε αυτήν την επιλογή. Επιπλέον, ο σύνδεσμος υποστηρίζει πλήρως τα τυπικά αρχεία "* .def", τα οποία μπορούν να προσδιοριστούν στη γραμμή εντολών του linker σαν ένα αρχείο αντικειμένων (στην πραγματικότητα, πρέπει να προηγείται αρχείων που εξάγει σύμβολα από, ακριβώς όπως ένα κανονικό αρχείο αντικειμένων).

Εκτός από τις επιλογές που είναι κοινές σε όλους τους στόχους, ο σύνδεσμος i386 PE υποστηρίζει πρόσθετες επιλογές γραμμής εντολών που είναι συγκεκριμένες για το στόχο i386 PE. Οι επιλογές που λαμβάνουν τιμές μπορούν να διαχωριστούν από τις τιμές τους είτε με ένα διάστημα είτε με μια ισοτιμία.

--add-stdcall-ψευδώνυμο

Αν δοθεί, τα σύμβολα με ένα επίθεμα stdcall (@ nn ) θα εξάγονται όπως είναι και με την κατάληξη απογυμνωμένη.

- αρχείο αρχείου βάσης

Χρησιμοποιήστε το αρχείο ως το όνομα ενός αρχείου στο οποίο θέλετε να αποθηκεύσετε τις βασικές διευθύνσεις όλων των μετατοπίσεων που απαιτούνται για τη δημιουργία αρχείων DLL με dlltool .

--dll

Δημιουργήστε ένα αρχείο DLL αντί για ένα κανονικό εκτελέσιμο αρχείο. Μπορείτε επίσης να χρησιμοποιήσετε το " shared" ή να ορίσετε μια "LIBRARY" σε ένα δεδομένο αρχείο ".def".

--enable-stdcall-fixup

--disable-stdcall-fixup

Εάν ο σύνδεσμος βρίσκει ένα σύμβολο που δεν μπορεί να επιλύσει, θα επιχειρήσει να κάνει `` ασαφή σύνδεση '' αναζητώντας ένα άλλο καθορισμένο σύμβολο που διαφέρει μόνο με τη μορφή του ονόματος συμβόλου (cdecl vs stdcall) και θα λύσει αυτό το σύμβολο συνδέοντας στον αγώνα. Για παράδειγμα, το απροσδιόριστο σύμβολο "_foo" μπορεί να συνδεθεί με τη συνάρτηση "_foo @ 12" ή το αόριστο σύμβολο "_bar @ 16" μπορεί να συνδεθεί με τη συνάρτηση "_bar". Όταν ο σύνδεσμος το κάνει αυτό, εκτυπώνει μια προειδοποίηση, δεδομένου ότι κανονικά θα έπρεπε να αποτύχει να συνδεθεί, αλλά μερικές φορές η εισαγωγή βιβλιοθηκών που δημιουργούνται από dlls τρίτων κατασκευαστών μπορεί να χρειαστεί να χρησιμοποιηθεί αυτή η δυνατότητα. Εάν καθορίσετε το --enable-stdcall-fixup , αυτή η δυνατότητα είναι πλήρως ενεργοποιημένη και οι προειδοποιήσεις δεν εκτυπώνονται. Εάν καθορίσετε το --disable-stdcall-fixup , αυτή η δυνατότητα είναι απενεργοποιημένη και αυτές οι αναντιστοιχίες θεωρούνται σφάλματα.

- εξαγωγή-όλα-σύμβολα

Εάν δοθεί, όλα τα παγκόσμια σύμβολα στα αντικείμενα που χρησιμοποιούνται για την κατασκευή ενός DLL θα εξαχθούν από το αρχείο DLL. Σημειώστε ότι αυτή είναι η προεπιλογή αν δεν υπήρχαν διαφορετικά εξαγόμενα σύμβολα. Όταν τα σύμβολα εξάγονται ρητά μέσω αρχείων DEF ή εξάγονται σιωπηρά μέσω χαρακτηριστικών συνάρτησης, η προεπιλογή είναι να μην εξάγετε τίποτα άλλο εκτός αν δοθεί αυτή η επιλογή. Σημειώστε ότι τα σύμβολα "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12" και "impure_ptr" δεν θα εξαχθούν αυτόματα. Επίσης, τα σύμβολα που εισάγονται από άλλα DLL δεν θα επανεξαχθούν ούτε θα συμβολίζουν τα εσωτερικά χαρακτηριστικά του DLL, όπως εκείνα που αρχίζουν με "_head_" ή τελειώνουν με "_iname". Επιπλέον, δεν θα εξάγονται σύμβολα από τα "libgcc", "libstd ++", "libmingw32" ή "crtX.o". Τα σύμβολα των οποίων τα ονόματα αρχίζουν με "__rtti_" ή "__builtin_" δεν θα εξαχθούν, για να βοηθήσουν με τα C ++ DLLs. Τέλος, υπάρχει ένας εκτενής κατάλογος των cygwin-ιδιωτικών συμβόλων που δεν εξάγονται (προφανώς, αυτό ισχύει για την κατασκευή DLL για στόχους cygwin).

Αυτά τα εξαιρούμενα cygwin είναι: "_cygwin_dll_entry @ 12", "_cygwin_crt0_common @ 8", "cygwin_premiin1", "cygwin_premain2", "cygwin_premain3", "_fmode" "και" περιβάλλον ".

--exclude-σύμβολα σύμβολο , σύμβολο , ...

Καθορίζει μια λίστα συμβόλων που δεν θα πρέπει να εξάγονται αυτόματα. Τα ονόματα των συμβόλων μπορούν να οριοθετηθούν με κόμματα ή δίχωρα.

--exclude-libs lib , lib , ...

Καθορίζει μια λίστα βιβλιοθηκών αρχειοθέτησης από τις οποίες τα σύμβολα δεν θα πρέπει να εξάγονται αυτόματα. Τα ονόματα των βιβλιοθηκών μπορούν να οριοθετηθούν με κόμματα ή δίχωρα. Ο ορισμός του "--exclude-libs ALL" εξαιρεί τα σύμβολα σε όλες τις βιβλιοθήκες αρχείων από την αυτόματη εξαγωγή. Τα σύμβολα που αναφέρονται ρητά σε ένα αρχείο .def εξακολουθούν να εξάγονται, ανεξάρτητα από αυτήν την επιλογή.

- ευθυγράμμιση φακέλου

Καθορίστε την ευθυγράμμιση αρχείων. Τα τμήματα του αρχείου θα ξεκινούν πάντοτε με μετατοπίσεις αρχείων, που είναι πολλαπλάσια αυτού του αριθμού. Αυτή η προεπιλογή είναι 512.

- εφεδρικό

- εφεδρικό , δεσμεύστε

Καθορίστε την ποσότητα της μνήμης που θέλετε να διατηρήσετε (και προαιρετικά δεσμεύστε) για να χρησιμοποιηθεί ως σωρός για αυτό το πρόγραμμα. Η προεπιλογή είναι 1Mb δεσμευμένη, δεσμευμένη 4K.

- τιμή βάσης εικόνας

Χρησιμοποιήστε την τιμή ως τη βασική διεύθυνση του προγράμματος ή του dll σας. Αυτή είναι η χαμηλότερη θέση μνήμης που θα χρησιμοποιηθεί όταν φορτώνεται το πρόγραμμα ή το dll. Για να μειώσετε την ανάγκη να μεταφέρετε και να βελτιώσετε την απόδοση των DLL σας, κάθε ένας πρέπει να έχει μια μοναδική διεύθυνση βάσης και να μην επικαλύπτει οποιαδήποτε άλλα dlls. Η προεπιλογή είναι 0x400000 για εκτελέσιμα και 0x10000000 για τα dll.

--κις

Αν δοθεί, τα επιθήματα stdcall ( @nn ) θα αφαιρεθούν από τα σύμβολα πριν αυτά εξάγονται.

--maxor-image-version αξία

Ορίζει τον κύριο αριθμό της έκδοσης `` εικόνας ''. Προεπιλογή στο 1.

- μέγιστη τιμή έκδοσης

Ορίζει τον σημαντικότερο αριθμό της έκδοσης `` os ''. Προεπιλογή στο 4.

--περισσότερη έκδοση του υποσυστήματος

Ορίζει τον κύριο αριθμό της έκδοσης υποσυστήματος ``. Προεπιλογή στο 4.

- αξία εκδοχής minor-εικόνας

Ορίζει τον δευτερεύοντα αριθμό της έκδοσης `` εικόνας ''. Προεπιλογή στο 0.

-minor-os-έκδοση

Ορίζει τον δευτερεύοντα αριθμό της έκδοσης `` os ''. Προεπιλογή στο 0.

- τιμή έκδοσης minor-υποσυστήματος

Ορίζει τον δευτερεύοντα αριθμό της έκδοσης υποσυστήματος. Προεπιλογή στο 0.

- αρχείο -out-def

Ο σύνδεσμος θα δημιουργήσει το αρχείο αρχείου που θα περιέχει ένα αρχείο DEF που αντιστοιχεί στο DLL που δημιουργεί το linker. Αυτό το αρχείο DEF (το οποίο θα πρέπει να ονομάζεται ".def") μπορεί να χρησιμοποιηθεί για τη δημιουργία βιβλιοθήκης εισαγωγής με "dlltool" ή μπορεί να χρησιμοποιηθεί ως αναφορά στα αυτόματα ή έμμεσα εξαγόμενα σύμβολα.

- αρχείο χωρίς προειδοποίηση

Ο σύνδεσμος θα δημιουργήσει το αρχείο αρχείου το οποίο θα περιέχει μια lib lib για το DLL που δημιουργεί το linker. Αυτό το αρχείο εισαγωγής lib (το οποίο θα πρέπει να ονομάζεται "* .dll.a" ή "* .a") μπορεί να χρησιμοποιηθεί για τη σύνδεση των υπολογιστών με το παραγόμενο DLL · αυτή η συμπεριφορά καθιστά δυνατή την παράλειψη ενός ξεχωριστού βήματος δημιουργίας βιβλιοθήκης εισαγωγής "dlltool".

--ενισχυόμενη-βάση αυτόματης εικόνας

Επιλέξτε αυτόματα τη βάση εικόνων για DLL, εκτός εάν έχει οριστεί κάποιο από το όρισμα "-image-base". Με τη χρήση ενός hash που δημιουργείται από το dllname για τη δημιουργία μοναδικών βάσεων εικόνων για κάθε DLL, αποφεύγονται οι συγκρούσεις και οι μετεγκαταστάσεις εντός μνήμης, οι οποίες μπορούν να καθυστερήσουν την εκτέλεση του προγράμματος.

--απελευθερωτική βάση αυτόματης εικόνας

Μην δημιουργείτε αυτόματα μια μοναδική βάση εικόνας. Εάν δεν υπάρχει βάση εικόνας που καθορίζεται από το χρήστη ("-image-base"), χρησιμοποιήστε την προεπιλεγμένη πλατφόρμα.

--dll-αναζήτηση-πρόθεμα συμβολοσειρά

Όταν συνδέετε δυναμικά μια DLL χωρίς βιβλιοθήκη εισαγωγής, αναζητήστε " .dll" κατά προτίμηση σε "lib .dll". Αυτή η συμπεριφορά επιτρέπει την εύκολη διάκριση μεταξύ των DLL που έχουν δημιουργηθεί για τις διάφορες υποπεριοχές: "native", "cygwin", "uwin", "pw" κλπ. Για παράδειγμα, τα DLLs cygwin συνήθως χρησιμοποιούν "-dll-search-prefix = cyg".

- δυνατότητα-αυτόματη εισαγωγή

Προχωρήστε σε σύνθετη σύνδεση του "_symbol" με το "__imp__symbol" για τις εισαγωγές DATA από τα DLL και δημιουργήστε τα απαραίτητα σύμβολα thunking κατά την κατασκευή των βιβλιοθηκών εισαγωγής με αυτές τις DATAexports. Αυτό γενικά θα «λειτουργήσει» - αλλά μερικές φορές μπορεί να δείτε αυτό το μήνυμα:

"μεταβλητή" "δεν μπορεί να εισαχθεί αυτόματα. Για περισσότερες πληροφορίες, διαβάστε την τεκμηρίωση για την" --ableable-auto-import "της ld."

Αυτό το μήνυμα εμφανίζεται όταν κάποια (υπο) έκφραση προσεγγίζει μια διεύθυνση που τελικά δίνεται από το άθροισμα δύο σταθερών (οι πίνακες εισαγωγής Win32 επιτρέπουν μόνο μία). Οι περιπτώσεις όπου αυτό μπορεί να συμβεί περιλαμβάνουν πρόσβαση στα πεδία μελών των μεταβλητών δομής που εισάγονται από ένα αρχείο DLL, καθώς επίσης και χρησιμοποιώντας ένα σταθερό δείκτη σε μια μεταβλητή πίνακα που εισάγεται από ένα αρχείο DLL. Οποιαδήποτε μεταβλητή πολλαπλών λέξεων (συστοιχίες, δομές, μακρύς μήκους κλπ.) Μπορεί να ενεργοποιήσει αυτήν την κατάσταση σφάλματος. Ωστόσο, ανεξάρτητα από τον ακριβή τύπο δεδομένων της παραβρισμένης εξαγόμενης μεταβλητής, το ld θα εντοπίζει πάντοτε, θα εκδίδει την προειδοποίηση και θα βγαίνει.

Υπάρχουν διάφοροι τρόποι αντιμετώπισης αυτής της δυσκολίας, ανεξάρτητα από τον τύπο δεδομένων της εξαγόμενης μεταβλητής:

Ένας τρόπος είναι να χρησιμοποιήσετε το διακόπτη -enable-runtime-pseudo-reloc. Αυτό αφήνει το έργο της προσαρμογής των παραπομπών στον κώδικα πελάτη σας για περιβάλλον χρόνου εκτέλεσης, οπότε αυτή η μέθοδος λειτουργεί μόνο όταν το περιβάλλον εκτέλεσης υποστηρίζει αυτή τη λειτουργία.

Μια δεύτερη λύση είναι να αναγκαστεί μια από τις «σταθερές» να είναι μια μεταβλητή --- δηλαδή, άγνωστη και μη-βελτιστοποιήσιμη κατά το χρόνο σύνταξης. Για τους πίνακες, υπάρχουν δύο δυνατότητες: α) να καταστήσει την indexee (τη διεύθυνση του πίνακα) μια μεταβλητή, ή β) να καταστήσει τον δείκτη "σταθερή" μια μεταβλητή. Ετσι:

εξωτερικός τύπος extern_array []; external_array [1] -> {πτητικός τύπος * t = εξωτερικό_άρθρο; t [1]}

ή

εξωτερικός τύπος extern_array []; external_array [1] -> {volatile int t = 1; external_array [t]}

Για τις δομές (και τους περισσότερους άλλους τύπους δεδομένων πολλών λέξεων), η μόνη επιλογή είναι να μεταβληθεί η ίδια η δομή (ή η μακρά μακρά ή η ...)

εξωτερική δομή εξωτερική_struct; external_struct.field -> {volatile struct s * t = & external_struct; t-> πεδίο}

ή

εξωτερική μακρά long external_ll; external_ll -> {volatile long long * local_ll = & extern_ll; * local_ll}

Μια τρίτη μέθοδος αντιμετώπισης αυτής της δυσκολίας είναι να εγκαταλείψουμε την "αυτόματη εισαγωγή" για το σύμβολο που προσβάλλει και να την επισημάνουμε με "__declspec (dllimport)". Ωστόσο, στην πράξη αυτό απαιτεί τη χρήση #defines χρόνου μεταγλώττισης για να δηλώσετε εάν δημιουργείτε ένα αρχείο DLL, δημιουργείτε κώδικα πελάτη που θα συνδέεται με το DLL ή απλώς δημιουργεί / συνδέει με μια στατική βιβλιοθήκη. Κατά την επιλογή μεταξύ των διαφόρων μεθόδων επίλυσης του προβλήματος «άμεσης διεύθυνσης με σταθερή αντιστάθμιση», θα πρέπει να εξετάσετε την τυπική πραγματική χρήση:

Πρωτότυπο:

--foo.h εξωτερικό int arr []; --foo.c #include "foo.h" κενό κύρια (int argc, char ** argv) {printf ("% d \ n", arr [1]); }}

Λύση 1:

--foo.h εξωτερικό int arr []; --foo.c #include "foo.h" κενό main (int argc, char ** argv) {/ * Αυτή η λύση είναι για win32 και cygwin. δεν "βελτιστοποιείτε" * / μεταβλητή int * parr = arr; printf ("% d \ n", parr [1]); }}

Λύση 2:

--foo.h / * Σημείωση: Υπολογίζεται η αυτόματη εξαγωγή (όχι __declspec (dllexport)) * / #if (οριστεί (_WIN32) || ορίζεται (__ CYGWIN__)) && \! (οριστεί (FOO_BUILD_DLL) )) #define FOO_IMPORT __declspec (dllimport) #else #define Η FOO_IMPORT #endif εξωτερική FOO_IMPORT int arr []; --foo.c #include "foo.h" κενό κύρια (int argc, char ** argv) {printf ("% d \ n", arr [1]); }}

Ένας τέταρτος τρόπος για να αποφύγετε αυτό το πρόβλημα είναι να επανα-κωδικοποιήσετε τη βιβλιοθήκη σας για να χρησιμοποιήσετε μια λειτουργική διεπαφή παρά μια διεπαφή δεδομένων για τις παραβιάζουσες μεταβλητές (π.χ. set_foo () και get_foo () λειτουργίες accessor).

--disable-auto-import

Μην επιχειρήσετε να κάνετε υπερσύγχρονη σύνδεση "_symbol" με "__imp__symbol" για DATAimports από DLL.

- δυνατότητα εκτέλεσης-ψευδο-μετεγκατάσταση

Εάν ο κώδικας σας περιέχει εκφράσεις που περιγράφονται στην ενότητα --ableable-auto-import, δηλαδή DATAimports από DLL με μη μηδενική μετατόπιση, ο μετασχηματισμός αυτός θα δημιουργήσει ένα διάνυσμα "pseudo relocations runtime" το οποίο μπορεί να χρησιμοποιηθεί από το περιβάλλον χρόνου εκτέλεσης για να προσαρμόσει τις αναφορές σε αυτά τα δεδομένα στον κωδικό πελάτη σας.

--disable-runtime-pseudo-reloc

Μη δημιουργείτε ψευδομετακινήσεις για μη-μηδενικές μετατοπίσεις δεδομένων DATA από DLL. Αυτή είναι η προεπιλογή.

- δυνατότητα-extra-pe-debug

Εμφάνιση πρόσθετων πληροφοριών αποσφαλμάτωσης που σχετίζονται με την αυτόματη εισαγωγή συμβόλων thunking.

- ευθυγράμμιση τομής

Ορίζει την ευθυγράμμιση τμήματος. Τα τμήματα στη μνήμη αρχίζουν πάντα σε διευθύνσεις που είναι πολλαπλές του αριθμού. Προεπιλογή στο 0x1000.

- αποθεματικό αποθήκευσης

- αποθεματικό , δεσμεύστε

Καθορίστε την ποσότητα της μνήμης που θέλετε να αποθηκεύσετε (και προαιρετικά να δεσμεύσετε) για να χρησιμοποιηθεί ως στοίβα για αυτό το πρόγραμμα. Η προεπιλογή είναι 2Mb δεσμευμένη, δεσμευμένη 4Κ.

- υποσύστημα το οποίο

- υποσύστημα το οποίο : σημαντικό

- υποσύστημα το οποίο : σημαντικό . ανήλικος

Καθορίζει το υποσύστημα στο οποίο εκτελείται το πρόγραμμά σας. Οι νομικές αξίες για τις οποίες είναι "μητρική", "παράθυρα", "κονσόλα" και "posix". Μπορείτε επίσης να ορίσετε την έκδοση του υποσυστήματος επίσης.

Σημαντικό: Χρησιμοποιήστε την εντολή man ( % man ) για να δείτε πώς χρησιμοποιείται μια εντολή στον υπολογιστή σας.