Εγχειρίδια για τη γραμμή εντολών

Man » ld Manual online - λεπτομερής διαδικτυακή τεκμηρίωση για τη σελίδα man του ld

🌍
ld - Ο συνδετήρας GNU

ΣΥΝΤΑΞΗ

ld [επιλογές] αντικείμενο_αρχείου ...

ΠΕΡΙΓΡΑΦΗ

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

Το ld δέχεται αρχεία Γλώσσας Εντολών Συνδέσμου (Linker Command Language) γραμμένα σε ένα υπερσύνολο της σύνταξης της Γλώσσας Επεξεργασίας Συνδέσμου AT&T, για να παρέχει ρητό και πλήρη έλεγχο της διαδικασίας σύνδεσης.

Αυτή η σελίδα man δεν περιγράφει τη γλώσσα εντολών. δείτε την καταχώρηση ld στο "info" για πλήρεις λεπτομέρειες σχετικά με τη γλώσσα εντολών και για άλλες πτυχές του συνδέσμου 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 να δημιουργήσει ένα αρχείο με το όνομα "έξοδος" ως αποτέλεσμα της σύνδεσης του αρχείου "/lib/crt0.o" με το "hello.o" και τη βιβλιοθήκη "libc.a", η οποία θα προέρχεται από τους τυπικούς καταλόγους αναζήτησης. (Δείτε τη συζήτηση σχετικά με την επιλογή -l παρακάτω.)

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

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


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

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

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

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

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

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

gcc -Wl,--start-group foo.o bar.o -Wl,--end-group

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


gcc foo.o bar.o -Wl,-eENTRY -Wl,-Map=a.map

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

@file

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

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

-a keyword

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

--audit AUDITLIB

Προσθέτει το AUDITLIB στην καταχώρηση "DT_AUDIT" της δυναμικής ενότητας. Το AUDITLIB δεν ελέγχεται για την ύπαρξή του, ούτε θα χρησιμοποιήσει το DT_SONAME που καθορίζεται στη βιβλιοθήκη. Εάν καθοριστεί πολλές φορές, το "DT_AUDIT" θα περιέχει μια λίστα διεπαφών ελέγχου που διαχωρίζονται με άνω και κάτω τελεία. Εάν ο συνδετήρας βρει ένα αντικείμενο με μια καταχώρηση ελέγχου κατά την αναζήτηση δυναμικών βιβλιοθηκών, θα προσθέσει μια αντίστοιχη καταχώρηση "DT_DEPAUDIT" στο αρχείο εξόδου. Αυτή η επιλογή έχει νόημα μόνο σε πλατφόρμες ELF που υποστηρίζουν τη διεπαφή rtld-audit.

-b input-format
--format=input-format

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

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

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

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

-c MRI-commandfile
--mri-script=MRI-commandfile

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


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

--depaudit AUDITLIB
-P AUDITLIB
Προσθέτει το AUDITLIB στην καταχώρηση "DT\_DEPAUDIT" της δυναμικής ενότητας. Το AUDITLIB δεν ελέγχεται για την ύπαρξή του, ούτε θα χρησιμοποιήσει το DT_SONAME που καθορίζεται στη βιβλιοθήκη. Εάν καθοριστεί πολλές φορές, το "DT_DEPAUDIT" θα περιέχει μια λίστα διεπαφών ελέγχου χωρισμένη με άνω και κάτω τελεία. Αυτή η επιλογή έχει νόημα μόνο σε πλατφόρμες ELF που υποστηρίζουν τη διεπαφή rtld-audit. Η επιλογή -P παρέχεται για λόγους συμβατότητας με το Solaris.

--enable-linker-version
Ενεργοποιεί την οδηγία συνδέσμου "LINKER_VERSION", όπως περιγράφεται στην ενότητα Δεδομένα Ενότητας Εξόδου. Εάν αυτή η οδηγία χρησιμοποιείται σε ένα σενάριο συνδέσμου και αυτή η επιλογή έχει ενεργοποιηθεί, τότε μια συμβολοσειρά που περιέχει την έκδοση του συνδέσμου θα εισαχθεί στην τρέχουσα θέση.

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

--disable-linker-version
Απενεργοποιεί την οδηγία συνδέσμου "LINKER_VERSION", έτσι ώστε να μην εισάγει μια συμβολοσειρά έκδοσης. Αυτό είναι η προεπιλογή.

--enable-non-contiguous-regions
Αυτή η επιλογή αποτρέπει τη δημιουργία σφάλματος εάν μια ενότητα εισόδου δεν χωρά σε μια αντίστοιχη ενότητα εξόδου. Ο σύνδεσμος προσπαθεί να εκχωρήσει την ενότητα εισόδου σε μεταγενέστερες αντίστοιχες ενότητες εξόδου και δημιουργεί σφάλμα μόνο εάν καμία ενότητα εξόδου δεν είναι αρκετά μεγάλη. Αυτό είναι χρήσιμο όταν είναι διαθέσιμες πολλές μη συνεχόμενες περιοχές μνήμης και η ενότητα εισόδου δεν απαιτεί μια συγκεκριμένη. Η σειρά με την οποία αξιολογούνται οι ενότητες εισόδου δεν αλλάζει, για παράδειγμα:

MEMORY {
MEM1 (rwx) : ORIGIN = 0x1000, LENGTH = 0x14
MEM2 (rwx) : ORIGIN = 0x1000, LENGTH = 0x40
MEM3 (rwx) : ORIGIN = 0x2000, LENGTH = 0x40
}
SECTIONS {
mem1 : { *(.data.*); } > MEM1
mem2 : { *(.data.*); } > MEM2
mem3 : { *(.data.*); } > MEM3
}

με ενότητες εισόδου:
.data.1: μέγεθος 8
.data.2: μέγεθος 0x10
.data.3: μέγεθος 4

αποτέλεσμα: .data.1 αντιστοιχίζεται στο mem1 και .data.2 και .data.3
αντιστοιχίζονται στο mem2, ακόμη και αν το .data.3 θα χωρούσε στο mem3.

Αυτή η επιλογή είναι ασυμβίβαστη με τις δηλώσεις INSERT επειδή αλλάζει τον τρόπο με τον οποίο οι ενότητες εισόδου αντιστοιχίζονται στις ενότητες εξόδου.

--enable-non-contiguous-regions-warnings
Αυτή η επιλογή ενεργοποιεί προειδοποιήσεις όταν το "--enable-non-contiguous-regions" επιτρέπει πιθανές απροσδόκητες αντιστοιχίες στην αντιστοίχιση των ενοτήτων, γεγονός που μπορεί να οδηγήσει στη σιωπηλή απόρριψη μιας ενότητας αντί να αποτύχει επειδή δεν χωρά σε καμία ενότητα εξόδου.

-e entry
--entry=entry
Χρησιμοποιεί το `entry` ως το όνομα του συμβόλου με το οποίο ξεκινά η εκτέλεση του προγράμματός σας, αντί για το προεπιλεγμένο σημείο εισόδου. Εάν δεν υπάρχει σύμβολο με το όνομα `entry`, ο συνδετήρας θα προσπαθήσει να αναλύσει το `entry` ως αριθμό και θα το χρησιμοποιήσει ως διεύθυνση εισόδου (ο αριθμός θα ερμηνευτεί σε δεκαδική βάση. Μπορείτε να χρησιμοποιήσετε το `0x` στην αρχή για δεκαεξαδική βάση ή το `0` στην αρχή για οκταδική βάση). Για i386 PE, το `entry` μπορεί επίσης να είναι το αρχικό όνομα της συνάρτησης (χωρίς την αρχική υπογράμμιση και/ή τον τελικό αριθμό `stdcall @number` όταν είναι εφαρμόσιμο).

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

--exclude-modules-for-implib module,module,...
Καθορίζει μια λίστα αρχείων αντικειμένων ή μελών αρχείων, από τα οποία δεν θα πρέπει να εξάγονται αυτόματα τα σύμβολα, αλλά τα οποία θα πρέπει να αντιγράφονται αυτούσια στην βιβλιοθήκη εισαγωγής που δημιουργείται κατά την σύνδεση. Τα ονόματα των modules μπορούν να ορίζονται με κόμματα ή άνω και κάτω τελείες και πρέπει να ταιριάζουν ακριβώς με τα ονόματα αρχείων που χρησιμοποιούνται από τον `ld` για να ανοίξει τα αρχεία. Για τα μέλη αρχείων, αυτό είναι απλώς το όνομα του μέλους, αλλά για τα αρχεία αντικειμένων, το όνομα που αναφέρεται πρέπει να περιλαμβάνει και να ταιριάζει ακριβώς με οποιαδήποτε διαδρομή που χρησιμοποιείται για τον καθορισμό του αρχείου εισόδου στην γραμμή εντολών του συνδετήρα. Αυτή η επιλογή είναι διαθέσιμη μόνο για τη στοχευμένη έκδοση i386 PE του συνδετήρα. Τα σύμβολα που αναφέρονται ρητά σε ένα αρχείο `.def` εξακολουθούν να εξάγονται, ανεξάρτητα από αυτήν την επιλογή.

-E
--export-dynamic
--no-export-dynamic
Όταν δημιουργείτε ένα δυναμικά συνδεδεμένο εκτελέσιμο αρχείο, η χρήση της επιλογής `-E` ή της επιλογής `--export-dynamic` προκαλεί την προσθήκη όλων των συμβόλων στον δυναμικό πίνακα συμβόλων. Ο δυναμικός πίνακας συμβόλων είναι το σύνολο των συμβόλων που είναι ορατά από τα δυναμικά αντικείμενα κατά την εκτέλεση.

Εάν δεν χρησιμοποιήσετε καμία από αυτές τις επιλογές (ή χρησιμοποιήσετε την επιλογή `--no-export-dynamic` για να επαναφέρετε την προεπιλεγμένη συμπεριφορά), ο δυναμικός πίνακας συμβόλων θα περιέχει συνήθως μόνο τα σύμβολα στα οποία γίνεται αναφορά από κάποιο δυναμικό αντικείμενο που αναφέρεται στη σύνδεση.

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

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

Σημείωση ότι αυτή η επιλογή είναι συγκεκριμένη για τις θύρες που στοχεύουν στο ELF. Οι στόχοι PE υποστηρίζουν μια παρόμοια λειτουργία για την εξαγωγή όλων των συμβόλων από ένα DLL ή EXE· δείτε την περιγραφή της επιλογής --export-all-symbols παρακάτω.

--export-dynamic-symbol=glob

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

--export-dynamic-symbol-list=file

Καθορίστε ένα --export-dynamic-symbol για κάθε μοτίβο στο αρχείο. Η μορφή του αρχείου είναι η ίδια με τον κόμβο έκδοσης χωρίς πεδίο και όνομα κόμβου. Δείτε την ενότητα VERSION για περισσότερες πληροφορίες.

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

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

-f όνομα
--auxiliary=όνομα

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

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

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

-F όνομα
--filter=όνομα

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

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

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


-fini=name
Όταν δημιουργείται ένα εκτελέσιμο αρχείο ELF ή μια κοινόχρηστη βιβλιοθήκη, καλεί τη συνάρτηση NAME όταν το εκτελέσιμο αρχείο ή η κοινόχρηστη βιβλιοθήκη καταργείται, ορίζοντας το DT_FINI στη διεύθυνση της συνάρτησης. Από προεπιλογή, ο συνδετήρας χρησιμοποιεί τη συνάρτηση "_fini".

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

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

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

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

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

-l namespec
--library=namespec
Προσθέτει το αρχείο ή την κοινόχρηστη βιβλιοθήκη που καθορίζεται από το namespec στη λίστα των αρχείων προς σύνδεση. Αυτή η επιλογή μπορεί να χρησιμοποιηθεί πολλές φορές. Εάν το namespec έχει τη μορφή :filename, το ld θα αναζητήσει στο path των βιβλιοθηκών ένα αρχείο που ονομάζεται filename, διαφορετικά θα αναζητήσει στο path των βιβλιοθηκών ένα αρχείο που ονομάζεται libnamespec.a.

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

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

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

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

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

-L searchdir
--library-path=searchdir

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

Εάν το searchdir ξεκινά με "=" ή $SYSROOT, τότε αυτό το πρόθεμα θα αντικατασταθεί από το πρόθεμα sysroot, το οποίο ελέγχεται από την επιλογή --sysroot ή καθορίζεται όταν ρυθμίζεται ο συνδετήρας.

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

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

-m emulation

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

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

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

--remap-inputs=pattern=filename
--remap-inputs-file=file

Αυτές οι επιλογές επιτρέπουν την αλλαγή των ονομάτων των αρχείων εισόδου πριν ο συνδετήρας επιχειρήσει να τα ανοίξει. Η επιλογή --remap-inputs=foo.o=bar.o θα προκαλέσει την προσπάθεια φόρτωσης ενός αρχείου που ονομάζεται foo.o, το οποίο θα προσπαθήσει να φορτώσει ένα αρχείο που ονομάζεται bar.o. Επιτρέπονται πρότυπα wildcard στο πρώτο όνομα αρχείου, επομένως το --remap-inputs=foo*.o=bar.o θα μετονομάσει οποιοδήποτε αρχείο εισόδου που ταιριάζει με το foo*.o σε bar.o.

Μια εναλλακτική μορφή της επιλογής --remap-inputs-file=filename επιτρέπει την ανάγνωση των αντιστοιχήσεων από ένα αρχείο. Κάθε γραμμή στο αρχείο μπορεί να περιέχει μια μόνο αντιστοίχιση. Οι κενές γραμμές αγνοούνται. Οτιδήποτε από ένα χαρακτήρα hash (#) μέχρι το τέλος μιας γραμμής θεωρείται σχόλιο και αγνοείται επίσης. Το πρότυπο αντιστοίχισης μπορεί να διαχωριστεί από το όνομα αρχείου με κενό διάστημα ή έναν χαρακτήρα ίσο (=).

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

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


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

ld foo.o --remap-inputs=foo.o=bar.o

Δεν θα έχει καμία επίδραση, ενώ:

ld --remap-inputs=foo.o=bar.o foo.o

Θα μετονομάσει το αρχείο εισόδου foo.o σε bar.o.

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

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

Εάν οι επιλογές -Map ή --print-map είναι ενεργοποιημένες, τότε η λίστα ανακατάταξης θα συμπεριληφθεί στην έξοδο του χάρτη.

-M
--print-map

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

Πού τα αρχεία αντικειμένων αντιστοιχίζονται στη μνήμη.

Πώς κατανέμονται τα κοινά σύμβολα.

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

Οι τιμές που έχουν εκχωρηθεί στα σύμβολα.

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

foo = 1
foo = foo * 4
foo = foo + 8

θα παράγει την ακόλουθη έξοδο στον χάρτη σύνδεσης εάν χρησιμοποιηθεί η επιλογή -M:

000000001                foo = 0x1
[0x0000000c]                foo = (foo * 0x4)
[0x0000000c]                foo = (foo + 0x8)

Δείτε την ενότητα Εκφράσεις για περισσότερες πληροφορίες σχετικά με τις εκφράσεις στα σενάρια σύνδεσης.

Πώς συγχωνεύονται οι ιδιότητες GNU.

Όταν ο συνδετήρας συγχωνεύει τις τμήματα εισόδου .note.gnu.property σε μία τμήμα εξόδου .note.gnu.property, ορισμένες ιδιότητες αφαιρούνται ή ενημερώνονται. Αυτές οι ενέργειες αναφέρονται στον χάρτη σύνδεσης. Για παράδειγμα:

Αφαιρέθηκε η ιδιότητα 0xc0000002 για να συγχωνευθούν τα foo.o (0x1) και bar.o (δεν βρέθηκε)

Αυτό υποδεικνύει ότι η ιδιότητα 0xc0000002 αφαιρείται από την έξοδο κατά τη συγχώνευση των ιδιοτήτων στο foo.o, του οποίου η τιμή της ιδιότητας 0xc0000002 είναι 0x1, και του bar.o, το οποίο δεν διαθέτει την ιδιότητα 0c0000002.

Ενημερώθηκε η ιδιότητα 0xc0010001 (0x1) για να συγχωνευθούν τα foo.o (0x1) και bar.o (0x1)

Αυτό υποδεικνύει ότι η τιμή της ιδιότητας 0xc0010001 ενημερώνεται σε 0x1 στην έξοδο κατά τη συγχώνευση των ιδιοτήτων στο foo.o, του οποίου η τιμή της ιδιότητας 0xc0010001 είναι 0x1, και του bar.o, του οποίου η τιμή της ιδιότητας 0xc0010001 είναι 0x1.

Σε ορισμένους στόχους ELF, μια λίστα από επιδιορθώσεις που εισήχθησαν από την επιλογή --relax

foo.o: Προσαρμογή διακλάδωσης στο 0x00000008 προς το "far" στην ενότητα .text

Αυτό υποδεικνύει ότι η διακλάδωση στο 0x00000008 στο foo.o, που στοχεύει στο σύμβολο "far" στην ενότητα .text, έχει αντικατασταθεί από ένα τραμπολίνο.


--print-map-discarded
--no-print-map-discarded

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

--print-map-locals
--no-print-map-locals

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

-n
--nmagic

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

-N
--omagic

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

--no-omagic

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

-o output
--output=output

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

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

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

ld -o $(EXE) $(OBJS)
ld $(OBJS) -o $(EXE)

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

--dependency-file=depfile

Εγγραφή ενός αρχείου εξάρτησης στο depfile. Αυτό το αρχείο περιέχει έναν κανόνα κατάλληλο για το "make" που περιγράφει το αρχείο εξόδου και όλα τα αρχεία εισόδου που διαβάστηκαν για την παραγωγή του. Η έξοδος είναι παρόμοια με την έξοδο του μεταγλωττιστή με τις επιλογές -M -MP. Σημειώστε ότι δεν υπάρχει μια επιλογή όπως η επιλογή -MM του μεταγλωττιστή, για να εξαιρεθούν τα "συστημικά αρχεία" (το οποίο δεν είναι μια σαφώς καθορισμένη έννοια στον συνδετήρα, σε αντίθεση με τις "συστημικές κεφαλίδες" στον μεταγλωττιστή). Επομένως, η έξοδος από το --dependency-file είναι πάντα συγκεκριμένη για την ακριβή κατάσταση της εγκατάστασης στην οποία δημιουργήθηκε και δεν θα πρέπει να αντιγράφεται σε διανεμόμενα αρχεία make χωρίς προσεκτική επεξεργασία.


-O level

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

-plugin name

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

Σημειώστε ότι η θέση των προσθέτων που προέρχονται από τον μεταγλωττιστή είναι διαφορετική από το μέρος όπου τα προγράμματα ar, nm και ranlib αναζητούν τα πρόσθετά τους. Για να μπορέσουν αυτά τα προγράμματα να χρησιμοποιήσουν ένα πρόσθετο που βασίζεται στον μεταγλωττιστή, θα πρέπει πρώτα να αντιγραφεί στον κατάλογο ${libdir}/bfd-plugins. Όλα τα πρόσθετα συνδέσμου που βασίζονται στον gcc είναι συμβατά προς τα πίσω, επομένως αρκεί να αντιγράψετε την πιο πρόσφατη έκδοση.

--push-state

Η επιλογή --push-state επιτρέπει την αποθήκευση της τρέχουσας κατάστασης των σημαίων που διέπουν τη διαχείριση των αρχείων εισόδου, ώστε να μπορούν να αποκατασταθούν όλα με μία αντίστοιχη επιλογή --pop-state.

Οι επιλογές που καλύπτονται είναι: -Bdynamic, -Bstatic, -dn, -dy, -call_shared, -non_shared, -static, -N, -n, --whole-archive, --no-whole-archive, -r, -Ur, --copy-dt-needed-entries, --no-copy-dt-needed-entries, --as-needed, --no-as-needed και -a.

Ένας από τους στόχους αυτής της επιλογής είναι οι προδιαγραφές για το pkg-config. Όταν χρησιμοποιείται με την επιλογή --libs, καταγράφονται όλες οι πιθανώς απαραίτητες βιβλιοθήκες και στη συνέχεια συνδέονται όλες μαζί. Είναι καλύτερο να επιστραφεί κάτι σαν αυτό:

-Wl,--push-state,--as-needed -libone -libtwo -Wl,--pop-state

--pop-state

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

-q
--emit-relocs

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

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

--force-dynamic

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

-r
--relocatable

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

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

Όταν το επανατοποθετήσιμο αρχείο εξόδου περιέχει τόσο περιεχόμενο που απαιτεί βελτιστοποίηση χρόνου σύνδεσης (LTO) όσο και περιεχόμενο που δεν απαιτεί LTO, θα δημιουργηθεί μια ενότητα .gnu_object_only για να περιέχει ένα επανατοποθετήσιμο αρχείο αντικειμένου, σαν να είχε εφαρμοστεί η επιλογή -r σε όλες τις επανατοποθετήσιμες εισόδους που δεν απαιτούν LTO. Κατά την επεξεργασία μιας επανατοποθετήσιμης εισόδου με μια ενότητα .gnu_object_only, ο συνδετήρας θα εξάγει την ενότητα .gnu_object_only ως ξεχωριστή είσοδο.

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

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

-R filename
--just-symbols=filename

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

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

--rosegment
--no-rosegment

Προσπαθήστε να εξασφαλίσετε ότι δημιουργείται μόνο μία τμήμα μόνιμης ανάγνωσης, μη κώδικα. Χρήσιμο μόνο όταν χρησιμοποιείται σε συνδυασμό με την επιλογή -z separate-code. Τα προκύπτοντα δυαδικά αρχεία θα πρέπει να είναι μικρότερα από ό,τι εάν χρησιμοποιηθεί η επιλογή -z separate-code από μόνη της. Χωρίς αυτήν την επιλογή ή εάν καθοριστεί η --no-rosegment, η επιλογή -z separate-code θα δημιουργήσει δύο τμήματα μόνιμης ανάγνωσης, ένα πριν από το τμήμα κώδικα και ένα μετά από αυτό.

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

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

-s
--strip-all

Αφαιρέστε όλες τις πληροφορίες συμβόλων από το αρχείο εξόδου.

-S
--strip-debug

Αφαιρέστε τις πληροφορίες συμβόλων αποσφαλμάτωσης (αλλά όχι όλα τα σύμβολα) από το αρχείο εξόδου.

--strip-discarded
--no-strip-discarded

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

-plugin-save-temps

Αποθηκεύστε μόνιμα τα ενδιάμεσα αρχεία "προσωρινά" των πρόσθετων.

-t
--trace

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


-T scriptfile
--script=scriptfile

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

Εάν το scriptfile δεν υπάρχει στον τρέχοντα κατάλογο, το "ld" αναζητά το αρχείο στους καταλόγους που καθορίζονται από οποιεσδήποτε προηγούμενες επιλογές -L.

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

Πολλαπλές επιλογές -T θα συσσωρευτούν εάν προσθέτουν στο τρέχον script, διαφορετικά θα χρησιμοποιηθεί η τελευταία, μη προσθετική, επιλογή -T.

Υπάρχουν και άλλοι τρόποι για να καθοριστούν τα αρχεία σύνδεσης. Δείτε:

-dT scriptfile
--default-script=scriptfile

Χρησιμοποιήστε το scriptfile ως το προεπιλεγμένο αρχείο σύνδεσης.

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

-u symbol
--undefined=symbol

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

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

--require-defined=symbol

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

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

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


--orphan-handling=MODE

Καθορίζει τον τρόπο χειρισμού των ορφανών τμημάτων. Ένα ορφανό τμήμα είναι ένα που δεν αναφέρεται ρητά στο script του linker.

Το MODE μπορεί να έχει οποιαδήποτε από τις ακόλουθες τιμές:

"place"

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

"discard"

Όλα τα ορφανά τμήματα απορρίπτονται, τοποθετώντας τα στην ενότητα /DISCARD/.

"warn"

Ο linker θα τοποθετήσει το ορφανό τμήμα όπως στην περίπτωση "place" και θα εκδώσει επίσης μια προειδοποίηση.

"error"

Ο linker θα τερματιστεί με σφάλμα εάν βρεθεί οποιοδήποτε ορφανό τμήμα.

Η προεπιλογή, εάν δεν δοθεί η επιλογή --orphan-handling, είναι "place".

--unique[=SECTION]

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

-v
--version
-V Εμφανίζει τον αριθμό έκδοσης του ld. Η επιλογή -V εμφανίζει επίσης τις υποστηριζόμενες προσομοιώσεις. Δείτε επίσης
την περιγραφή της επιλογής --enable-linker-version στην ενότητα Επιλογές, Επιλογές Γραμμής Εντολών, η οποία
μπορεί να χρησιμοποιηθεί για την εισαγωγή της συμβολοσειράς έκδοσης του linker σε ένα δυαδικό αρχείο.

-x
--discard-all

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

-X
--discard-locals

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

-y symbol
--trace-symbol=symbol

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

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

-Y path

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

-z keyword

Οι αναγνωρισμένες λέξεις-κλειδιά είναι:

call-nop=prefix-addr
call-nop=suffix-nop
call-nop=prefix-byte
call-nop=suffix-byte

Καθορίζει το byte "NOP" 1, το οποίο χρησιμοποιείται κατά τη μετατροπή μιας έμμεσης κλήσης σε μια τοπικά ορισμένη συνάρτηση, foo, μέσω της θέσης GOT. Η επιλογή call-nop=prefix-addr παράγει "0x67 call foo". Η επιλογή call-nop=suffix-nop παράγει "call foo 0x90". Η επιλογή call-nop=prefix-byte παράγει "byte call foo". Η επιλογή call-nop=suffix-byte παράγει "call foo byte". Υποστηρίζεται για i386 και x86_64.

cet-report=none
cet-report=warning
cet-report=error

Καθορίζει τον τρόπο αναφοράς των ιδιοτήτων GNU_PROPERTY_X86_FEATURE_1_IBT και GNU_PROPERTY_X86_FEATURE_1_SHSTK που λείπουν στην ενότητα εισόδου .note.gnu.property. Η επιλογή cet-report=none, η οποία είναι η προεπιλογή, θα κάνει τον linker να μην αναφέρει τις ιδιότητες που λείπουν στα αρχεία εισόδου. Η επιλογή cet-report=warning θα κάνει τον linker να εκδίδει μια προειδοποίηση για τις ιδιότητες που λείπουν στα αρχεία εισόδου. Η επιλογή cet-report=error θα κάνει τον linker να εκδίδει ένα σφάλμα για τις ιδιότητες που λείπουν στα αρχεία εισόδου. Σημειώστε ότι η επιλογή ibt θα απενεργοποιήσει την αναφορά της ιδιότητας GNU_PROPERTY_X86_FEATURE_1_IBT και η επιλογή shstk θα απενεργοποιήσει την αναφορά της ιδιότητας GNU_PROPERTY_X86_FEATURE_1_SHSTK. Υποστηρίζεται για Linux/i386 και Linux/x86_64.


combreloc
nocombreloc
Συνδυάζει πολλαπλές δυναμικές ενότητες μετατόπισης και τις ταξινομεί για να βελτιώσει την προσωρινή αποθήκευση της δυναμικής αναζήτησης συμβόλων. Μην το κάνετε αυτό εάν είναι ενεργό το nocombreloc.

common
nocommon
Δημιουργεί κοινά σύμβολα με τύπο STT_COMMON κατά τη διάρκεια μιας σύνδεσης με δυνατότητα μετατόπισης. Χρησιμοποιήστε τον τύπο STT_OBJECT εάν είναι ενεργό το nocommon.

common-page-size=τιμή
Ορίζει το μέγεθος της σελίδας που χρησιμοποιείται συχνότερα στην τιμή. Η διάταξη της μνήμης θα βελτιστοποιηθεί για να ελαχιστοποιηθούν οι σελίδες μνήμης εάν το σύστημα χρησιμοποιεί σελίδες αυτού του μεγέθους.

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

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

execstack
Σημειώνει το αντικείμενο ως απαιτούμενο εκτελέσιμο χώρο στοίβας.

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

globalaudit
Αυτή η επιλογή έχει νόημα μόνο όταν δημιουργείται ένα δυναμικό εκτελέσιμο αρχείο. Αυτή η επιλογή σημειώνει το εκτελέσιμο αρχείο ως απαιτούμενο για παγκόσμιο έλεγχο, ορίζοντας τη bit "DF_1_GLOBAUDIT" στην δυναμική ετικέτα "DT_FLAGS_1". Ο παγκόσμιος έλεγχος απαιτεί να εκτελεστεί οποιαδήποτε βιβλιοθήκη ελέγχου που ορίζεται μέσω των επιλογών γραμμής εντολών --depaudit ή -P για όλα τα δυναμικά αντικείμενα που φορτώνονται από την εφαρμογή.

ibtplt
Δημιουργεί δυναμικές καταχωρήσεις PLT με ενεργοποιημένη την παρακολούθηση έμμεσης διακλάδωσης Intel (IBT). Υποστηρίζεται για Linux/i386 και Linux/x86_64.

ibt
Δημιουργεί το GNU_PROPERTY_X86_FEATURE_1_IBT στην ενότητα .note.gnu.property για να υποδείξει τη συμβατότητα με την IBT. Αυτό υπονοεί επίσης την ibtplt. Υποστηρίζεται για Linux/i386 και Linux/x86_64.

indirect-extern-access
noindirect-extern-access
Δημιουργεί το GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS στην ενότητα .note.gnu.property για να υποδείξει ότι το αρχείο αντικειμένου απαιτεί κανονικές δεικτομεταφορές λειτουργιών και δεν μπορεί να χρησιμοποιηθεί με δυναμική ανακατανομή. Αυτή η επιλογή υπονοεί επίσης το noextern-protected-data και το nocopyreloc. Υποστηρίζεται για i386 και x86-64.

noindirect-extern-access   αφαιρεί   το GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS    από την
ενότητα .note.gnu.property.

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

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

unique
nounique
Όταν δημιουργείτε μια κοινόχρηστη βιβλιοθήκη ή άλλο δυναμικά φορτώσιμο αντικείμενο ELF,
επισημάνετε το ως ένα που, από προεπιλογή, θα πρέπει να φορτώνεται μόνο μία φορά και μόνο στον
κύριο χώρο ονομάτων (όταν χρησιμοποιείται το "dlmopen"). Αυτό χρησιμοποιείται κυρίως για να
επισημανθούν θεμελιώδεις βιβλιοθήκες, όπως η libc, η libpthread κ.λπ., οι οποίες συνήθως δεν
λειτουργούν σωστά, εκτός εάν είναι η μοναδική τους παρουσία. Αυτή η συμπεριφορά μπορεί να
υπερισχύσει από τον καλούντα του "dlmopen" και δεν ισχύει για ορισμένους μηχανισμούς φόρτωσης
(όπως οι βιβλιοθήκες ελέγχου).

lam-u48
Δημιουργήστε το GNU\_PROPERTY\_X86\_FEATURE\_1\_LAM\_U48 στην ενότητα .note.gnu.property για να
υποδείξετε τη συμβατότητα με το Intel LAM_U48. Υποστηρίζεται για Linux/x86_64.

lam-u57
Δημιουργήστε το GNU\_PROPERTY\_X86\_FEATURE\_1\_LAM\_U57 στην ενότητα .note.gnu.property για να
υποδείξετε τη συμβατότητα με το Intel LAM_U57. Υποστηρίζεται για Linux/x86_64.

lam-u48-report=none
lam-u48-report=warning
lam-u48-report=error
Καθορίστε πώς θα αναφέρεται η ελλιπής ιδιότητα GNU\_PROPERTY\_X86\_FEATURE\_1\_LAM\_U48 στην ενότητα
.note.gnu.property εισόδου. Το lam-u48-report=none, το οποίο είναι η προεπιλογή, θα κάνει τον
συνδετή να μην αναφέρει τις ελλείπουσες ιδιότητες στα αρχεία εισόδου. Το lam-u48-report=warning
θα κάνει τον συνδετή να εκδίδει μια προειδοποίηση για τις ελλείπουσες ιδιότητες στα αρχεία
εισόδου. Το lam-u48-report=error θα κάνει τον συνδετή να εκδίδει ένα σφάλμα για τις
ελλείπουσες ιδιότητες στα αρχεία εισόδου. Υποστηρίζεται για Linux/x86_64.

lam-u57-report=none
lam-u57-report=warning
lam-u57-report=error
Καθορίστε πώς θα αναφέρεται η ελλιπής ιδιότητα GNU\_PROPERTY\_X86\_FEATURE\_1\_LAM\_U57 στην ενότητα
.note.gnu.property εισόδου. Το lam-u57-report=none, το οποίο είναι η προεπιλογή, θα κάνει τον
συνδετή να μην αναφέρει τις ελλείπουσες ιδιότητες στα αρχεία εισόδου. Το lam-u57-report=warning
θα κάνει τον συνδετή να εκδίδει μια προειδοποίηση για τις ελλείπουσες ιδιότητες στα αρχεία
εισόδου. Το lam-u57-report=error θα κάνει τον συνδετή να εκδίδει ένα σφάλμα για τις
ελλείπουσες ιδιότητες στα αρχεία εισόδου. Υποστηρίζεται για Linux/x86_64.

lam-report=none
lam-report=warning
lam-report=error
Καθορίστε πώς θα αναφέρονται οι ελλείπουσες ιδιότητες GNU\_PROPERTY\_X86\_FEATURE\_1\_LAM\_U48 και
GNU\_PROPERTY\_X86\_FEATURE\_1\_LAM\_U57 στην ενότητα .note.gnu.property εισόδου. Το
lam-report=none, το οποίο είναι η προεπιλογή, θα κάνει τον συνδετή να μην αναφέρει τις
ελλείπουσες ιδιότητες στα αρχεία εισόδου. Το lam-report=warning θα κάνει τον συνδετή να εκδίδει
μια προειδοποίηση για τις ελλείπουσες ιδιότητες στα αρχεία εισόδου. Το lam-report=error θα κάνει
τον συνδετή να εκδίδει ένα σφάλμα για τις ελλείπουσες ιδιότητες στα αρχεία εισόδου.
Υποστηρίζεται για Linux/x86_64.

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

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

max-page-size=value
Ορίστε το μέγιστο μέγεθος σελίδας μνήμης που υποστηρίζεται στην τιμή.

mark-plt
nomark-plt
Επισημάνετε τις καταχωρήσεις PLT με δυναμικές ετικέτες, DT\_X86\_64\_PLT, DT\_X86\_64\_PLTSZ και DT\_X86\_64\_PLTENT. Δεδομένου ότι αυτή η επιλογή αποθηκεύει μια μη μηδενική τιμή στο πεδίο r\_addend των δυναμικών ανακατατάξεων R\_X86\_64\_JUMP\_SLOT, τα προκύπτοντα εκτελέσιμα αρχεία και οι κοινόχρηστες βιβλιοθήκες είναι ασύμβατες με τους δυναμικούς συνδετήρες, όπως αυτές στις παλαιότερες εκδόσεις του glibc χωρίς την αλλαγή για να αγνοηθεί το r\_addend στις δυναμικές ανακατατάξεις R\_X86\_64\_GLOB\_DAT και R\_X86\_64\_JUMP\_SLOT, οι οποίες δεν αγνοούν το πεδίο r\_addend των δυναμικών ανακατατάξεων R\_X86\_64\_JUMP\_SLOT. Υποστηρίζεται για x86\_64.

muldefs
Επιτρέψτε πολλαπλούς ορισμούς.

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

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

nodelete
Καθορίστε ότι το αντικείμενο δεν θα πρέπει να εκφορτώνεται κατά την εκτέλεση.

nodlopen
Καθορίστε ότι το αντικείμενο δεν είναι διαθέσιμο στο "dlopen".

nodump
Καθορίστε ότι το αντικείμενο δεν μπορεί να αποθηκευτεί από το "dldump".

noexecstack
Επισημάνει το αντικείμενο ως μη απαιτούμενο στοίβα εκτελέσιμου.

noextern-protected-data
Μην αντιμετωπίζετε τα σύμβολα προστατευμένων δεδομένων ως εξωτερικά κατά τη δημιουργία μιας κοινόχρηστης βιβλιοθήκης. Αυτή η επιλογή αντικαθιστά την προεπιλογή του συνδετή. Μπορεί να χρησιμοποιηθεί για την αντιμετώπιση εσφαλμένων ανακατατάξεων σε σύμβολα προστατευμένων δεδομένων που δημιουργούνται από τον μεταγλωττιστή. Οι ενημερώσεις στα σύμβολα προστατευμένων δεδομένων από μια άλλη μονάδα δεν είναι ορατές στην προκύπτουσα κοινόχρηστη βιβλιοθήκη. Υποστηρίζεται για i386 και x86-64.

noreloc-overflow
Απενεργοποιήστε τον έλεγχο υπερχείλισης ανακατάταξης. Αυτό μπορεί να χρησιμοποιηθεί για να απενεργοποιηθεί ο έλεγχος υπερχείλισης ανακατάταξης εάν δεν θα υπάρξει δυναμική υπερχείλιση ανακατάταξης κατά την εκτέλεση. Υποστηρίζεται για x86\_64.

memory-seal
nomemory-seal
Οδηγήστε το εκτελέσιμο αρχείο ή την κοινόχρηστη βιβλιοθήκη ότι όλα τα τμήματα PT\_LOAD θα πρέπει να σφραγιστούν για να αποφευχθεί περαιτέρω χειρισμός (όπως η αλλαγή των σημαίων προστασίας, του μεγέθους του τμήματος ή η αφαίρεση της αντιστοίχισης). Αυτό είναι ένα μέτρο ασφάλειας που απαιτεί υποστήριξη συστήματος. Αυτό δημιουργεί το GNU\_PROPERTY\_MEMORY\_SEAL στην ενότητα .note.gnu.property

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

origin

Καθορίστε ότι το αντικείμενο απαιτεί διαχείριση $ORIGIN στις διαδρομές.

pack-relative-relocs
nopack-relative-relocs

Δημιουργήστε συμπαγή σχετική μετατόπιση σε εκτελέσιμο αρχείο ανεξάρτητο θέσης και κοινόχρηστη βιβλιοθήκη. Προσθέτει τις καταχωρήσεις "DT_RELR", "DT_RELRSZ" και "DT_RELRENT" στην δυναμική ενότητα. Αγνοείται κατά τη δημιουργία εκτελέσιμου αρχείου εξαρτώμενου από τη θέση και αναδιατάξιμης εξόδου. Το nopack-relative-relocs είναι η προεπιλογή, η οποία απενεργοποιεί τη συμπαγή σχετική μετατόπιση. Όταν συνδέεται με τη GNU C Library, προστίθεται μια εξάρτηση έκδοσης συμβόλου GLIBC_ABI_DT_RELR στην κοινόχρηστη βιβλιοθήκη C στην έξοδο. Υποστηρίζεται για i386 και x86-64.

relro
norelro

Δημιουργήστε μια κεφαλίδα τμήματος ELF "PT_GNU_RELRO" στο αντικείμενο. Αυτό καθορίζει ένα τμήμα μνήμης που θα πρέπει να γίνει μόνο για ανάγνωση μετά τη μετατόπιση, εάν υποστηρίζεται. Η καθορισμένη τιμή commonpage-size μικρότερη από το μέγεθος της σελίδας του συστήματος θα καταστήσει αυτή την προστασία αναποτελεσματική. Μην δημιουργήσετε ένα τμήμα ELF "PT_GNU_RELRO" εάν χρησιμοποιείται το norelro.

report-relative-reloc

Αναφέρετε τις δυναμικές σχετικές μετατοπίσεις που δημιουργούνται από τον συνδετή. Υποστηρίζεται για Linux/i386 και Linux/x86_64.

sectionheader
nosectionheader

Δημιουργήστε μια κεφαλίδα τμήματος. Μην δημιουργήσετε μια κεφαλίδα τμήματος εάν χρησιμοποιηθεί το nosectionheader. Το sectionheader είναι η προεπιλογή.

separate-code
noseparate-code

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

shstk

Δημιουργήστε το GNU_PROPERTY_X86_FEATURE_1_SHSTK στην ενότητα .note.gnu.property για να υποδείξετε τη συμβατότητα με το Intel Shadow Stack. Υποστηρίζεται για Linux/i386 και Linux/x86_64.

stack-size=value

Καθορίστε ένα μέγεθος στοίβας για ένα τμήμα ELF "PT_GNU_STACK". Η καθορισμένη τιμή μηδέν θα αντικαταστήσει οποιοδήποτε προεπιλεγμένο μη μηδενικό μέγεθος για τη δημιουργία του τμήματος "PT_GNU_STACK".

start-stop-gc
nostart-stop-gc
Όταν το `--gc-sections` είναι ενεργό, μια αναφορά από μια διατηρημένη ενότητα στα "\_\_start\_SECNAME" ή "__stop\_SECNAME" προκαλεί τη διατήρηση όλων των ενδιάμενων τμημάτων με όνομα "SECNAME", εάν το "SECNAME" μπορεί να αναπαρασταθεί ως ένα αναγνωρίσιμο όνομα C και είτε το "__start\_SECNAME" είτε το "__stop\_SECNAME" συντίθεται από τον συνδετή. Το `-z start-stop-gc` απενεργοποιεί αυτήν την επίδραση, επιτρέποντας στις ενότητες να συλλέγονται ως σκουπίδια σαν να μην είχαν οριστεί τα ειδικά συνθετικά σύμβολα. Το `-z start-stop-gc` δεν έχει καμία επίδραση σε έναν ορισμό των "__start\_SECNAME" ή "__stop\_SECNAME" σε ένα αρχείο αντικειμένου ή ένα σενάριο συνδέσμου. Ένας τέτοιος ορισμός θα αποτρέψει τον συνδετή από το να παρέχει ένα συνθετικό "__start\_SECNAME" ή "__stop\_SECNAME", αντίστοιχα, και επομένως την ειδική μεταχείριση από τη συλλογή σκουπιδιών για αυτές τις αναφορές.

start-stop-visibility=value
Καθορίστε την ορατότητα συμβόλου ELF για τα συνθετικά σύμβολα "\_\_start\_SECNAME" και "\_\_stop\_SECNAME". Η τιμή πρέπει να είναι ακριβώς `default`, `internal`, `hidden` ή `protected`. Εάν δεν δοθεί καμία επιλογή `-z start-stop-visibility`, χρησιμοποιείται η τιμή `protected` για λόγους συμβατότητας με την ιστορική πρακτική. Ωστόσο, συνιστάται ιδιαίτερα η χρήση του `-z start-stop-visibility=hidden` σε νέα προγράμματα και κοινόχρηστες βιβλιοθήκες, ώστε αυτά τα σύμβολα να μην εξάγονται μεταξύ των κοινόχρηστων αντικειμένων, κάτι που συνήθως δεν είναι αυτό που επιδιώκεται.

text
notext
textoff

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

undefs

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

unique-symbol
nounique-symbol

Αποφύγετε τις διπλότυπες τοπικές ονομασίες συμβόλων στον πίνακα συμβόλων συμβολοσειρών. Προσθέστε ".number" στις διπλότυπες τοπικές ονομασίες συμβόλων εάν χρησιμοποιηθεί το unique-symbol. Το nounique-symbol είναι η προεπιλογή.

x86-64-baseline
x86-64-v2
x86-64-v3
x86-64-v4

Καθορίστε το απαιτούμενο επίπεδο ISA x86-64 στην ενότητα .note.gnu.property. Το x86-64-baseline δημιουργεί "GNU_PROPERTY_X86_ISA_1_BASELINE". Το x86-64-v2 δημιουργεί "GNU_PROPERTY_X86_ISA_1_V2". Το x86-64-v3 δημιουργεί "GNU_PROPERTY_X86_ISA_1_V3". Το x86-64-v4 δημιουργεί "GNU_PROPERTY_X86_ISA_1_V4". Υποστηρίζεται για Linux/i386 και Linux/x86_64.

isa-level-report=none
isa-level-report=all
isa-level-report=needed
isa-level-report=used

Καθορίστε τον τρόπο αναφοράς των επιπέδων ISA x86-64 στις αρχές μετατόπισης εισόδου. Το isa-level-report=none, το οποίο είναι η προεπιλογή, θα κάνει ο συνδέτης να μην αναφέρει τα επίπεδα ISA x86-64 στις αρχές εισόδου. Το isa-level-report=all θα κάνει τον συνδέτη να αναφέρει τα απαιτούμενα και τα χρησιμοποιούμενα επίπεδα ISA x86-64 στις αρχές εισόδου. Το isa-level-report=needed θα κάνει τον συνδέτη να αναφέρει τα απαιτούμενα επίπεδα ISA x86-64 στις αρχές εισόδου. Το isa-level-report=used θα κάνει τον συνδέτη να αναφέρει τα χρησιμοποιούμενα επίπεδα ISA x86-64 στις αρχές εισόδου. Υποστηρίζεται για Linux/i386 και Linux/x86_64.

Άλλες λέξεις-κλειδιά αγνοούνται για συμβατότητα με το Solaris.

--gnu-tls-tag
--no-gnu-tls-tag
Προσθέστε την εξάρτηση ετικέτας έκδοσης "GLIBC_ABI_GNU_TLS" στα προγράμματα εξόδου και στις κοινόχρηστες βιβλιοθήκες κατά τη σύνδεση με το glibc, εάν τα αρχεία αντικειμένων εισόδου καλούν το "___tls_get_addr". Η έξοδος θα αποτύχει να φορτωθεί και να εκτελεστεί κατά την εκτέλεση έναντι του glibc που δεν ορίζει την ετικέτα έκδοσης "GLIBC_ABI_GNU_TLS". Εκτός εάν απενεργοποιηθεί από την επιλογή διαμόρφωσης --disable-gnu-tls-tag κατά τη διάρκεια της δημιουργίας του συνδέτη, όταν δεν καθορίζονται επιλογές, ο συνδέτης θα προσθέσει την εξάρτηση ετικέτας έκδοσης "GLIBC_ABI_GNU_TLS" εάν οι είσοδοι έχουν κλήση "___tls_get_addr" και το libc.so ορίζει την ετικέτα έκδοσης "GLIBC_ABI_GNU_TLS". Υποστηρίζεται για Linux/i386.

--gnu2-tls-tag
--no-gnu2-tls-tag
Προσθέστε την εξάρτηση ετικέτας έκδοσης "GLIBC_ABI_GNU2_TLS" στα προγράμματα εξόδου και στις κοινόχρηστες βιβλιοθήκες κατά τη σύνδεση με το glibc, εάν τα αρχεία αντικειμένων εισόδου έχουν τη μετατόπιση "R_386_TLS_DESC_CALL" ή "R_X86_64_TLSDESC_CALL". Η έξοδος θα αποτύχει να φορτωθεί και να εκτελεστεί κατά την εκτέλεση έναντι του glibc που δεν ορίζει την ετικέτα έκδοσης "GLIBC_ABI_GNU2_TLS". Εκτός εάν απενεργοποιηθεί από την επιλογή διαμόρφωσης --disable-gnu2-tls-tag κατά τη διάρκεια της δημιουργίας του συνδέτη, όταν δεν καθορίζονται επιλογές, ο συνδέτης θα προσθέσει την εξάρτηση ετικέτας έκδοσης "GLIBC_ABI_GNU2_TLS" εάν οι είσοδοι έχουν τη μετατόπιση "R_386_TLS_DESC_CALL" ή "R_X86_64_TLSDESC_CALL" και το libc.so ορίζει την ετικέτα έκδοσης "GLIBC_ABI_GNU2_TLS". Υποστηρίζεται για Linux/i386 και Linux/x86_64.

-( archives -)
--start-group archives --end-group

Τα αρχεία που καθορίζονται θα αναζητηθούν επανειλημμένα μέχρι να μην δημιουργούνται πλέον άλυτα αναφορές. -l επιλογές.

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

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

--accept-unknown-input-arch
--no-accept-unknown-input-arch

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

--as-needed
--no-as-needed

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


Σημείωση: Σε συστήματα που βασίζονται σε Linux, η επιλογή `--as-needed` επηρεάζει επίσης τη συμπεριφορά των επιλογών `--rpath` και `--rpath-link`. Δείτε την περιγραφή της επιλογής `--rpath-link` για περισσότερες λεπτομέρειες.

--add-needed
--no-add-needed
Αυτές οι δύο επιλογές έχουν καταργηθεί λόγω της ομοιότητας των ονομάτων τους με τις επιλογές `--as-needed` και `--no-as-needed`. Έχουν αντικατασταθεί από τις επιλογές `--copy-dt-needed-entries` και `--no-copy-dt-needed-entries`.

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

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

-Bgroup
Ορίστε τη σημαία "DF\_1\_GROUP" στην καταχώρηση "DT\_FLAGS\_1" στην δυναμική ενότητα. Αυτό προκαλεί τον δυναμικό συνδετή να χειρίζεται τις αναζητήσεις σε αυτό το αντικείμενο και στις εξαρτήσεις του, ώστε να εκτελούνται μόνο εντός της ομάδας. Η επιλογή `--unresolved-symbols=report-all` υπονοείται. Αυτή η επιλογή έχει νόημα μόνο σε πλατφόρμες ELF που υποστηρίζουν κοινόχρηστες βιβλιοθήκες.

-Bstatic
-dn
-non_shared
-static
Μην συνδέεστε με κοινόχρηστες βιβλιοθήκες. Αυτό έχει νόημα μόνο σε πλατφόρμες στις οποίες υποστηρίζονται οι κοινόχρηστες βιβλιοθήκες. Οι διάφορες παραλλαγές αυτής της επιλογής προορίζονται για συμβατότητα με διάφορα συστήματα. Μπορείτε να χρησιμοποιήσετε αυτήν την επιλογή πολλές φορές στη γραμμή εντολών: επηρεάζει την αναζήτηση βιβλιοθηκών για τις επιλογές `-l` που ακολουθούν. Αυτή η επιλογή υπονοεί επίσης την επιλογή `--unresolved-symbols=report-all`. Αυτή η επιλογή μπορεί να χρησιμοποιηθεί με την επιλογή `-shared`. Εάν το κάνετε αυτό, σημαίνει ότι δημιουργείται μια κοινόχρηστη βιβλιοθήκη, αλλά όλες οι εξωτερικές αναφορές της βιβλιοθήκης πρέπει να επιλυθούν με την εισαγωγή καταχωρήσεων από στατικές βιβλιοθήκες.

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

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

-Bno-symbolic
Αυτή η επιλογή μπορεί να ακυρώσει τις προηγουμένως καθορισμένες επιλογές `-Bsymbolic` και `-Bsymbolic-functions`.

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

Η μορφή της δυναμικής λίστας είναι η ίδια με την έκδοση του κόμβου χωρίς πεδίο εφαρμογής και όνομα κόμβου. Δείτε την ενότητα ΕΚΔΟΣΗ για περισσότερες πληροφορίες.

--dynamic-list-data

Συμπεριλάβετε όλα τα καθολικά σύμβολα δεδομένων στη δυναμική λίστα.

--dynamic-list-cpp-new

Παρέχετε την ενσωματωμένη δυναμική λίστα για τον τελεστή C++ new και delete. Είναι κυρίως χρήσιμο για τη δημιουργία κοινών βιβλιοθηκών libstdc++.

--dynamic-list-cpp-typeinfo

Παρέχετε την ενσωματωμένη δυναμική λίστα για την αναγνώριση τύπων χρόνου εκτέλεσης C++.

--check-sections
--no-check-sections

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

--copy-dt-needed-entries
--no-copy-dt-needed-entries

Αυτή η επιλογή επηρεάζει τον τρόπο χειρισμού των δυναμικών βιβλιοθηκών στις οποίες αναφέρονται οι ετικέτες DT_NEEDED μέσα σε δυναμικές βιβλιοθήκες ELF που αναφέρονται στη γραμμή εντολών. Συνήθως, ο συνδετήρας δεν θα προσθέσει μια ετικέτα DT_NEEDED στην έξοδο δυαδικού αρχείου για κάθε βιβλιοθήκη που αναφέρεται σε μια ετικέτα DT_NEEDED σε μια είσοδο δυναμική βιβλιοθήκη. Ωστόσο, εάν καθοριστεί η επιλογή --copy-dt-needed-entries στη γραμμή εντολών, οποιεσδήποτε δυναμικές βιβλιοθήκες που ακολουθούν θα έχουν τις εγγραφές DT_NEEDED τους προστιθέμενες. Η προεπιλεγμένη συμπεριφορά μπορεί να αποκατασταθεί με την επιλογή --no-copy-dt-needed-entries.

Αυτή η επιλογή έχει επίσης επίδραση στην ανάλυση των συμβόλων στις δυναμικές βιβλιοθήκες. Με την επιλογή --copy-dt-needed-entries, οι δυναμικές βιβλιοθήκες που αναφέρονται στη γραμμή εντολών θα αναζητηθούν αναδρομικά, ακολουθώντας τις ετικέτες DT_NEEDED σε άλλες βιβλιοθήκες, προκειμένου να επιλυθούν τα σύμβολα που απαιτούνται από το δυαδικό αρχείο εξόδου. Ωστόσο, με την προεπιλεγμένη ρύθμιση, η αναζήτηση των δυναμικών βιβλιοθηκών που ακολουθούν θα σταματήσει με τη δυναμική βιβλιοθήκη. Καμία σύνδεση DT_NEEDED δεν θα διασχιστεί για την επίλυση συμβόλων.

--cref

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

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


--ctf-variables
--no-ctf-variables

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

--ctf-share-types=method

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

share-unconflicted

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

share-duplicated

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

--no-define-common

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

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

--force-group-allocation

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

--defsym=symbol=expression

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


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

^ -demangle[=style] ^ -no-demangle Αυτές οι επιλογές ελέγχουν εάν θα γίνει αποσυμπίεση των ονομάτων των συμβόλων στα μηνύματα σφαλμάτων και σε άλλες εξόδους. Όταν ο συνδετήρας έχει οριστεί να αποσυμπιέζει, προσπαθεί να παρουσιάσει τα ονόματα των συμβόλων με τρόπο που να είναι ευανάγνωστος: αφαιρεί τις αρχικές υπογραμμίσεις εάν χρησιμοποιούνται από τη μορφή αρχείου αντικειμένου και μετατρέπει τα συμπιεσμένα ονόματα συμβόλων C++ σε ονόματα που είναι ευανάγνωστα για τον χρήστη. Διαφορετικοί μεταγλωττιστές έχουν διαφορετικά στυλ συμπίεσης. Η προαιρετική παράμετρος στυλ αποσυμπίεσης μπορεί να χρησιμοποιηθεί για να επιλέξετε ένα κατάλληλο στυλ αποσυμπίεσης για τον μεταγλωττιστή σας. Ο συνδετήρας θα αποσυμπιέζει από προεπιλογή, εκτός εάν έχει οριστεί η μεταβλητή περιβάλλοντος COLLECT_NO_DEMANGLE. Αυτές οι επιλογές μπορούν να χρησιμοποιηθούν για να παρακάμψετε την προεπιλογή.

^ Ifile ^ -dynamic-linker=file Ορίστε το όνομα του δυναμικού συνδέσμου. Αυτό έχει νόημα μόνο κατά τη δημιουργία δυναμικά συνδεδεμένων εκτελέσιμων αρχείων ELF. Ο προεπιλεγμένος δυναμικός συνδετήρας είναι συνήθως σωστός. μην το χρησιμοποιείτε, εκτός εάν γνωρίζετε τι κάνετε.

^ -no-dynamic-linker Όταν παράγεται ένα εκτελέσιμο αρχείο, παραλείψτε την αίτηση για χρήση δυναμικού συνδέσμου κατά τη φόρτωση. Αυτό έχει νόημα μόνο για εκτελέσιμα αρχεία ELF που περιέχουν δυναμικές ανακατευθύνσεις και συνήθως απαιτεί κώδικα σημείου εισόδου που είναι ικανός να επεξεργαστεί αυτές τις ανακατευθύνσεις.

^ -embedded-relocs Αυτή η επιλογή είναι παρόμοια με την επιλογή --emit-relocs, εκτός από το ότι οι ανακατευθύνσεις αποθηκεύονται σε μια ενότητα ειδική για τον στόχο. Αυτή η επιλογή υποστηρίζεται μόνο από τους στόχους BFIN, CR16 και M68K.

^ -disable-multiple-abs-defs Μην επιτρέπετε πολλαπλούς ορισμούς με σύμβολα που περιλαμβάνονται στο όνομα αρχείου που καλείται από το -R ή το --just-symbols.

^ -fatal-warnings ^ -no-fatal-warnings Αντιμετωπίστε όλες τις προειδοποιήσεις ως σφάλματα. Η προεπιλεγμένη συμπεριφορά μπορεί να αποκατασταθεί με την επιλογή --no-fatal-warnings.

^ w ^ -no-warnings Μην εμφανίζονται μηνύματα προειδοποίησης ή σφάλματος. Αυτό παρακάμπτει το --fatal-warnings, εάν έχει ενεργοποιηθεί. Αυτή η επιλογή μπορεί να χρησιμοποιηθεί όταν είναι γνωστό ότι το παραγόμενο εκτελέσιμο αρχείο δεν θα λειτουργήσει, αλλά υπάρχει ακόμη η ανάγκη να δημιουργηθεί.

^ -force-exe-suffix Βεβαιωθείτε ότι ένα αρχείο εξόδου έχει κατάληξη .exe.

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


--gc-sections
--no-gc-sections

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

Η επιλογή --gc-sections καθορίζει ποια τμήματα εισόδου χρησιμοποιούνται εξετάζοντας τα σύμβολα και τις ανακατατάξεις. Το τμήμα που περιέχει το σύμβολο καταχώρησης και όλα τα τμήματα που περιέχουν σύμβολα που δεν έχουν οριστεί στη γραμμή εντολών θα διατηρηθούν, όπως και τα τμήματα που περιέχουν σύμβολα στα οποία αναφέρονται δυναμικά αντικείμενα. Σημειώστε ότι κατά τη δημιουργία κοινόχρηστων βιβλιοθηκών, ο συνδετήρας πρέπει να υποθέτει ότι κάθε ορατό σύμβολο αναφέρεται. Μόλις προσδιοριστεί αυτό το αρχικό σύνολο τμημάτων, ο συνδετήρας επισημαίνει αναδρομικά ως χρησιμοποιούμενα οποιαδήποτε τμήματα αναφέρονται στις ανακατατάξεις τους. Δείτε τις επιλογές --entry, --undefined και --gc-keep-exported.

Αυτή η επιλογή μπορεί να οριστεί κατά την εκτέλεση μιας μερικής σύνδεσης (ενεργοποιημένης με την επιλογή -r). Σε αυτή την περίπτωση, η ρίζα των διατηρούμενων συμβόλων πρέπει να καθοριστεί ρητά είτε με μία από τις επιλογές --entry, --undefined ή --gc-keep-exported είτε με μια εντολή "ENTRY" στο σενάριο του συνδετήρα.

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

--print-gc-sections
--no-print-gc-sections

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

--gc-keep-exported

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

--print-output-format

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

--print-memory-usage

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


Περιοχή μνήμης Χρησιμοποιημένο μέγεθος Μέγεθος περιοχής % Χρήσης ROM: 256 KB 1 MB 25.00% RAM: 32 B 2 GB 0.00%

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

--help

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

--target-help

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

-Map=όνομα_αρχείου

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

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

-o foo.exe -Map=bar     [Δημιουργεί ./bar]
-o ../dir/foo.exe -Map=bar      [Δημιουργεί ./bar]
-o foo.exe -Map=../dir      [Δημιουργεί ../dir/foo.exe.map]
-o ../dir2/foo.exe -Map=../dir      [Δημιουργεί ../dir/foo.exe.map]
-o foo.exe -Map=%           [Δημιουργεί ./foo.exe.map]
-o ../dir/foo.exe -Map=%        [Δημιουργεί ../dir/foo.exe.map]
-o foo.exe -Map=%.bar       [Δημιουργεί ./foo.exe.bar]
-o ../dir/foo.exe -Map=%.bar        [Δημιουργεί ../dir/foo.exe.bar]
-o ../dir2/foo.exe -Map=../dir/%    [Δημιουργεί ../dir/../dir2/foo.exe.map]
-o ../dir2/foo.exe -Map=../dir/%.bar    [Δημιουργεί ../dir/../dir2/foo.exe.bar]

Είναι σφάλμα να καθοριστούν περισσότεροι από ένας χαρακτήρας "%".

Εάν το αρχείο χάρτη υπάρχει ήδη, θα αντικατασταθεί από αυτήν τη λειτουργία.

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

--no-undefined
-z defs

Αναφορά μη επιλυμένων αναφορών συμβόλων από κανονικά αρχεία αντικειμένων. Αυτό γίνεται ακόμη και αν ο συνδέτης δημιουργεί μια μη συμβολική κοινόχρηστη βιβλιοθήκη. Η επιλογή --[no-]allow-shlib-undefined ελέγχει τη συμπεριφορά για την αναφορά μη επιλυμένων αναφορών που βρίσκονται σε κοινόχρηστες βιβλιοθήκες που συνδέονται.

Οι επιπτώσεις αυτής της επιλογής μπορούν να αντιστραφούν χρησιμοποιώντας την επιλογή "-z undefs".

--allow-multiple-definition
-z muldefs

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

--allow-shlib-undefined
--no-allow-shlib-undefined

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


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

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

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

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

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

--error-handling-script=scriptname

Εάν παρέχεται αυτή η επιλογή, ο συνδετήρας θα καλεί το scriptname κάθε φορά που εντοπίζεται ένα σφάλμα. Αυτήν τη στιγμή, ωστόσο, υποστηρίζονται μόνο δύο είδη σφαλμάτων: ελλείποντα σύμβολα και ελλείπουσες βιβλιοθήκες. Δύο ορίσματα θα περνούν στο σενάριο: η λέξη-κλειδί "undefined-symbol" ή "missing-lib" και το όνομα του μη ορισμένου συμβόλου ή της ελλείπουσας βιβλιοθήκης. Η πρόθεση είναι ότι το σενάριο θα παρέχει προτάσεις στον χρήστη σχετικά με το πού μπορεί να βρεθεί το σύμβολο ή η βιβλιοθήκη. Αφού ολοκληρωθεί το σενάριο, θα εμφανιστεί το κανονικό μήνυμα σφάλματος του συνδετήρα.

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

--no-undefined-version

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

--default-symver

Δημιουργήστε και χρησιμοποιήστε μια προεπιλεγμένη έκδοση συμβόλου (το soname) για μη εκδοχόμενα εξαγόμενα σύμβολα.

--default-imported-symver

Δημιουργήστε και χρησιμοποιήστε μια προεπιλεγμένη έκδοση συμβόλου (το soname) για μη εκδοχόμενα εισαγόμενα σύμβολα.

--no-warn-mismatch

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

--no-warn-search-mismatch

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

--no-whole-archive

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


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

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

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

--out-implib file
Δημιουργήστε μια βιβλιοθήκη εισαγωγής στο αρχείο που αντιστοιχεί στο εκτελέσιμο αρχείο που παράγει ο συνδετήρας (π.χ., ένα DLL ή ένα πρόγραμμα ELF). Αυτή η βιβλιοθήκη εισαγωγής (η οποία θα πρέπει να ονομάζεται "*.dll.a" ή "*.a" για DLL) μπορεί να χρησιμοποιηθεί για να συνδεθούν οι πελάτες με το παραγόμενο εκτελέσιμο αρχείο· αυτή η συμπεριφορά καθιστά δυνατή την παράκαμψη ενός ξεχωριστού βήματος δημιουργίας βιβλιοθήκης εισαγωγής (π.χ., "dlltool" για DLL). Αυτή η επιλογή είναι διαθέσιμη μόνο για τις εκδόσεις του συνδέσμου i386 PE και ELF.

-pie
--pic-executable
Δημιουργήστε ένα εκτελέσιμο αρχείο ανεξάρτητο θέσης. Αυτό υποστηρίζεται επί του παρόντος μόνο σε πλατφόρμες ELF. Τα εκτελέσιμα αρχεία ανεξάρτητα θέσης ανακατανέμονται από τον δυναμικό συνδετήρα στη διεύθυνση μνήμης που επιλέγει το λειτουργικό σύστημα για αυτά, η οποία μπορεί να διαφέρει μεταξύ των εκτελέσεων. Σημειώνονται ως ET_DYN στην κεφαλίδα αρχείου ELF, αλλά διαφέρουν από τις κοινόχρηστες βιβλιοθήκες σε αρκετούς τρόπους. Συγκεκριμένα, τα καθορισμένα σύμβολα σε ένα PIE δεν μπορούν από προεπιλογή να αντικατασταθούν από ένα άλλο αντικείμενο, όπως μπορεί να συμβεί σε μια κοινόχρηστη βιβλιοθήκη.

-no-pie
Δημιουργήστε ένα εκτελέσιμο αρχείο εξαρτώμενο θέσης. Αυτό είναι η προεπιλογή.

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

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

--relax
--no-relax
Μια επιλογή με εξαρτώμενες από την πλατφόρμα επιπτώσεις. Αυτή η επιλογή υποστηρίζεται μόνο σε λίγες πλατφόρμες.

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

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

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

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

--retain-symbols-file=filename

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

Η επιλογή --retain-symbols-file δεν απορρίπτει μη ορισμένα σύμβολα ή σύμβολα που απαιτούνται για επανατοποθετήσεις.

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

-rpath=dir

Προσθέτει έναν κατάλογο στη διαδρομή αναζήτησης βιβλιοθηκών χρόνου εκτέλεσης. Αυτό χρησιμοποιείται κατά τη σύνδεση ενός εκτελέσιμου ELF με κοινόχρηστα αντικείμενα. Όλα τα ορίσματα -rpath συνενώνονται και μεταβιβάζονται στον συνδετή runtime, ο οποίος τα χρησιμοποιεί για να εντοπίσει τα κοινόχρηστα αντικείμενα κατά τη διάρκεια εκτέλεσης.

Η επιλογή -rpath χρησιμοποιείται επίσης κατά τον εντοπισμό κοινόχρηστων αντικειμένων που απαιτούνται από κοινόχρηστα αντικείμενα που περιλαμβάνονται ρητά στη σύνδεση· δείτε την περιγραφή της επιλογής -rpath-link. Η αναζήτηση στο -rpath με αυτόν τον τρόπο υποστηρίζεται μόνο από εγγενείς συνδετήρες και διασταυρούμενους συνδετήρες που έχουν διαμορφωθεί με την επιλογή --with-sysroot.

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

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

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

-rpath-link=dir

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

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

Οι δείκτες $ORIGIN και $LIB μπορούν να εμφανιστούν σε αυτούς τους καταλόγους αναζήτησης. Θα αντικατασταθούν από την πλήρη διαδρομή προς τον κατάλογο που περιέχει το πρόγραμμα ή το κοινόχρηστο αντικείμενο στην περίπτωση του $ORIGIN και είτε το lib - για δυαδικά αρχεία 32-bit - είτε το lib64 - για δυαδικά αρχεία 64-bit - στην περίπτωση του $LIB.


Η εναλλακτική μορφή αυτών των συμβόλων - ${ORIGIN} και ${LIB} μπορεί επίσης να χρησιμοποιηθεί. Το σύμβολο $PLATFORM δεν υποστηρίζεται.

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

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

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

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

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

*   Στο SunOS, εάν δεν έχει χρησιμοποιηθεί η επιλογή -rpath, αναζητήστε οποιουσδήποτε καταλόγους που καθορίζονται χρησιμοποιώντας τις επιλογές -L.

*   Για έναν εγγενή συνδετήρα, αναζητήστε το περιεχόμενο της μεταβλητής περιβάλλοντος "LD_LIBRARY_PATH".

*   Για έναν εγγενή συνδετήρα ELF, οι κατάλογοι στα "DT_RUNPATH" ή "DT_RPATH" μιας κοινόχρηστης βιβλιοθήκης αναζητούνται για κοινόχρηστες βιβλιοθήκες που απαιτούνται από αυτήν. Οι καταχωρήσεις "DT_RPATH" αγνοούνται εάν υπάρχουν καταχωρήσεις "DT_RUNPATH".

*   Για έναν συνδετήρα για ένα σύστημα Linux, εάν υπάρχει το αρχείο /etc/ld.so.conf, η λίστα των καταλόγων που βρίσκονται σε αυτό το αρχείο. Σημείωση: η διαδρομή προς αυτό το αρχείο προθέτει τη τιμή "sysroot", εάν αυτή ορίζεται και στη συνέχεια οποιαδήποτε συμβολοσειρά "prefix" εάν ο συνδετήρας διαμορφώθηκε με την επιλογή --prefix=<path>.

*   Για έναν εγγενή συνδετήρα σε ένα σύστημα FreeBSD, οποιοιδήποτε κατάλογοι που καθορίζονται από τη μακροεντολή "_PATH_ELF_HINTS" που ορίζεται στο αρχείο κεφαλίδας elf-hints.h.

*   Οποιοιδήποτε κατάλογοι που καθορίζονται από μια εντολή "SEARCH_DIR" σε ένα σενάριο συνδετήρα που δίνεται στη γραμμή εντολών, συμπεριλαμβανομένων των σεναρίων που καθορίζονται από το -T (αλλά όχι -dT).

    Οι προεπιλεγμένοι κατάλογοι, συνήθως /lib και /usr/lib.

    Οποιοιδήποτε κατάλογοι που καθορίζονται από ένα plugin LDPT_SET_EXTRA_LIBRARY_PATH.

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

Σημειώστε ωστόσο στα συστήματα που βασίζονται σε Linux υπάρχει μια επιπλέον προειδοποίηση: Εάν η επιλογή --as-needed είναι ενεργή και εντοπιστεί μια κοινόχρηστη βιβλιοθήκη η οποία κανονικά θα ικανοποιούσε την αναζήτηση και αυτή η βιβλιοθήκη δεν έχει την ετικέτα DT_NEEDED για το libc.so και υπάρχει μια κοινόχρηστη βιβλιοθήκη αργότερα στο σύνολο των καταλόγων αναζήτησης η οποία επίσης ικανοποιεί την αναζήτηση και αυτή η δεύτερη κοινόχρηστη βιβλιοθήκη έχει μια ετικέτα DT_NEEDED για το libc.so, τότε η δεύτερη βιβλιοθήκη θα επιλεγεί αντί για την πρώτη.


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

--section-ordering-file=script

Αυτή η επιλογή χρησιμοποιείται για να συμπληρώσει το τρέχον σενάριο συνδέσμου με επιπλέον αντιστοίχιση των εισερχόμενων τμημάτων σε εξερχόμενα τμήματα. Αυτό το αρχείο πρέπει να χρησιμοποιεί την ίδια σύνταξη για το "SECTIONS" όπως χρησιμοποιείται στα κανονικά σενάρια συνδέσμου, αλλά δεν θα πρέπει να κάνει τίποτα άλλο εκτός από την τοποθέτηση των εισερχόμενων τμημάτων στα εξερχόμενα τμήματα. @pxref{SECTIONS}

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

SECTIONS {
.text : { *(.text.hot) ; *(.text .text.*) }
.data : { *(.data.big) ; *(.data .data.*) }
}

Στη συνέχεια, εάν χρησιμοποιηθεί ένα αρχείο παραγγελίας τμημάτων όπως αυτό:

.text : { *(.text.first) ; *(.text.z*) }
.data : { foo.o(.data.first) ; *(.data.small) }

Αυτό θα ήταν ισοδύναμο με ένα σενάριο συνδέσμου όπως αυτό:

SECTIONS {
.text : { *(.text.first) ; *(.text.z*) ; *(.text.hot) ; *(.text .text.*) }
.data : { foo.o(.data.first) ; *(.data.small) ; *(.data.big) ; *(.data .data.*) }
}

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

-shared
-Bshareable

Δημιουργία μιας κοινόχρηστης βιβλιοθήκης. Αυτό υποστηρίζεται επί του παρόντος μόνο στις πλατφόρμες ELF, XCOFF και SunOS. Στο SunOS, ο συνδετήρας θα δημιουργήσει αυτόματα μια κοινόχρηστη βιβλιοθήκη εάν η επιλογή -e δεν χρησιμοποιηθεί και υπάρχουν μη καθορισμένα σύμβολα στη σύνδεση.

--sort-common
--sort-common=ascending
--sort-common=descending

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

--sort-section=name

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


--sort-section=alignment

Αυτή η επιλογή θα εφαρμόσει το "SORT_BY_ALIGNMENT" σε όλα τα πρότυπα τμημάτων με χαρακτήρες μπαλαντέρ στο script του linker.

--spare-dynamic-tags=count

Αυτή η επιλογή καθορίζει τον αριθμό των κενών θέσεων που θα αφήνονται στην ενότητα .dynamic των κοινόχρηστων αντικειμένων ELF. Οι κενές θέσεις ενδέχεται να απαιτούνται από εργαλεία μετα-επεξεργασίας, όπως το prelinker. Η προεπιλογή είναι 5.

--split-by-file[=size]

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

--split-by-reloc[=count]

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

--stats[=filename]

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

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

Εάν η επιλογή -Map έχει ενεργοποιηθεί, τότε οι πληροφορίες καταγράφονται επίσης στο αρχείο map. Σημείωση: εάν και οι δύο επιλογές --stats και -Map έχουν δοθεί με ορίσματα filename και ταιριάζουν, τότε οι πληροφορίες θα γραφτούν μόνο μία φορά, όχι δύο.

Εάν η μεταβλητή περιβάλλοντος LD_STATS έχει οριστεί, τότε αυτό συμπεριφέρεται όπως η επιλογή --stats. Εάν η τιμή της μεταβλητής είναι μια συμβολοσειρά, τότε αυτή θα χρησιμοποιηθεί ως το όνομα ενός αρχείου στο οποίο θα καταγράφονται οι πληροφορίες. Διαφορετικά, οι πληροφορίες θα αποστέλλονται στη ροή εξόδου τυπικού. Η χρήση της μεταβλητής περιβάλλοντος επιτρέπει την καταγραφή των στατιστικών στοιχείων χωρίς να χρειάζεται να τροποποιηθεί η γραμμή εντολών του linker. Σημείωση: εάν χρησιμοποιηθούν και η μεταβλητή περιβάλλοντος και η επιλογή --stats, τότε η επιλογή --stats έχει προτεραιότητα.

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


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

Η εκτεταμένη έξοδος έχει ως εξής:

Στατιστικά: έκδοση συνδέσμου: (GNU Binutils) 2.44.50.20250401
Στατιστικά: ο σύνδεσμος ξεκίνησε: Τετ 2 Απρ 09:36:41 2025
Στατιστικά: ορίσματα: ld -z norelro -z nomemory-seal -z no-separate-code -o a.out [...]

Στατιστικά: φάση    χρόνος CPU  μνήμη   χρόνος χρήστη   χρόνος συστήματος
Στατιστικά: όνομα   (μικροδευτερόλεπτα)     (KiB)   (δευτερόλεπτα)  (δευτερόλεπτα)
Στατιστικά: ΟΛΑ     390082  217740  0   0
Στατιστικά: επεξεργασία ctf     12  0   0   0
Στατιστικά: συγχώνευση συμβολοσειρών    1324    0   0   0
Στατιστικά: ανάλυση     349     288     0   0
Στατιστικά: πρόσθετα    1   0   0   0
Στατιστικά: επεξεργασία αρχείων     259616  214524  0   0
Στατιστικά: εγγραφή     116493  0   0   0

--no-stats

Απενεργοποιεί την αναφορά στατιστικών στοιχείων χρήσης, εάν είχε ενεργοποιηθεί μέσω της επιλογής γραμμής εντολών --stats ή της μεταβλητής περιβάλλοντος LD_STATS.

--sysroot=κατάλογος

Χρησιμοποιεί τον κατάλογο ως τοποθεσία του sysroot, αντικαθιστώντας την προεπιλεγμένη τιμή χρόνου διαμόρφωσης. Αυτή η επιλογή υποστηρίζεται μόνο από συνδέσμους που έχουν διαμορφωθεί χρησιμοποιώντας την επιλογή --with-sysroot.

--task-link

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

--traditional-format

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

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

--section-start=όνομα_ενότητας=org

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


--image-base=org

Όταν χρησιμοποιείται το ELF, είναι το ίδιο με το -Ttext-segment, με και τις δύο επιλογές να ορίζουν αποτελεσματικά τη διεύθυνση βάσης του εκτελέσιμου ELF.

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

-Tbss=org
-Tdata=org
-Ttext=org

Όπως και το --section-start, με το ".bss", ".data" ή ".text" ως όνομα τμήματος.

-Ttext-segment=org

Όταν δημιουργείται ένα εκτελέσιμο αρχείο ELF, θα ορίσει τη διεύθυνση του πρώτου byte του πρώτου τμήματος. Σημειώστε ότι όταν το -pie χρησιμοποιείται με το -Ttext-segment=org, το εκτελέσιμο αρχείο εξόδου επισημαίνεται ως ET_EXEC, ώστε η διεύθυνση του πρώτου byte του τμήματος κειμένου να είναι εγγυημένα org κατά την εκτέλεση.

-Trodata-segment=org

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

-Tldata-segment=org

Όταν δημιουργείται ένα εκτελέσιμο αρχείο ELF ή μια κοινόχρηστη βιβλιοθήκη για το μοντέλο μνήμης x86-64 μέσου μεγέθους, θα ορίσει τη διεύθυνση του πρώτου byte του τμήματος ldata.

--unresolved-symbols=method

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

ignore-all

Μην αναφέρετε κανένα μη επιλυμένο σύμβολο.

report-all

Αναφέρετε όλα τα μη επιλυμένα σύμβολα. Αυτή είναι η προεπιλογή.

ignore-in-object-files

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

ignore-in-shared-libs

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

Η συμπεριφορά για τις κοινόχρηστες βιβλιοθήκες από μόνη τους μπορεί επίσης να ελεγχθεί από την επιλογή --[no-]allow-shlib-undefined.

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

--dll-verbose
--verbose[=NUMBER]

Εμφανίστε τον αριθμό έκδοσης για το ld και καταγράψτε τις υποστηριζόμενες συνδέσεις συνδετήρα. Εμφανίστε ποια αρχεία εισόδου μπορούν και ποια δεν μπορούν να ανοίξουν. Εμφανίστε το σενάριο συνδετήρα που χρησιμοποιείται από τον συνδετήρα. Εάν η προαιρετική παράμετρος NUMBER είναι > 1, θα εμφανιστούν επίσης πληροφορίες κατάστασης συμβόλων plug-in.

--version-script=version-scriptfile

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


--warn-common

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

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

int i = 1;
Ένας ορισμός, ο οποίος τοποθετείται στην αρχικοποιημένη περιοχή δεδομένων του αρχείου εξόδου.

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

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

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

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

<file>(<section>): προειδοποίηση: κοινό του `<symbol>'
αντικαθίσταται από ορισμό
<file>(<section>): προειδοποίηση: ορίζεται εδώ

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

<file>(<section>): προειδοποίηση: ορισμός του `<symbol>'
αντικαθιστά κοινό
<file>(<section>): προειδοποίηση: το κοινό είναι εδώ

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

<file>(<section>): προειδοποίηση: πολλαπλά κοινά
του `<symbol>'
<file>(<section>): προειδοποίηση: το προηγούμενο κοινό είναι εδώ

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

<file>(<section>): προειδοποίηση: κοινό του `<symbol>'
αντικαθίσταται από μεγαλύτερο κοινό
<file>(<section>): προειδοποίηση: το μεγαλύτερο κοινό είναι εδώ

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

<file>(<section>): προειδοποίηση: κοινό του `<symbol>'
αντικαθιστά ένα μικρότερο κοινό
<file>(<section>): προειδοποίηση: το μικρότερο κοινό είναι εδώ

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

--warn-execstack
--warn-execstack-objects
--no-warn-execstack
Στις πλατφόρμες ELF, ο συνδετήρας μπορεί να δημιουργήσει μηνύματα προειδοποίησης εάν του ζητηθεί να δημιουργήσει ένα αρχείο εξόδου που περιέχει μια εκτελέσιμη στοίβα. Υπάρχουν τρεις πιθανές καταστάσεις:

     Δεν δημιουργούνται προειδοποιήσεις.

     Δημιουργούνται πάντα προειδοποιήσεις, ακόμη και αν η εκτελέσιμη στοίβα ζητηθεί μέσω της επιλογής γραμμής εντολών -z execstack.

     Δημιουργείται προειδοποίηση μόνο εάν ένα αρχείο αντικειμένου ζητά μια εκτελέσιμη στοίβα, αλλά όχι εάν χρησιμοποιηθεί η επιλογή -z execstack.

Η προεπιλεγμένη κατάσταση εξαρτάται από τον τρόπο με τον οποίο ο συνδετήρας διαμορφώθηκε κατά τη δημιουργία του. Η επιλογή --no-warn-execstack θέτει πάντα τον συνδετήρα στην κατάσταση χωρίς προειδοποιήσεις. Η επιλογή --warn-execstack θέτει τον συνδετήρα στην κατάσταση προειδοποίησης-πάντα. Η επιλογή --warn-execstack-objects θέτει τον συνδετήρα στην κατάσταση προειδοποίησης-μόνο-για-αρχεία-αντικειμένων.

Σημείωση: Τα αρχεία εισόδου μορφής ELF μπορούν να καθορίσουν ότι χρειάζονται μια εκτελέσιμη στοίβα έχοντας μια ενότητα .note.GNU-stack με το bit εκτελέσιμου ρυθμισμένο στις σημαίες ενότητας. Μπορούν να καθορίσουν ότι δεν χρειάζονται μια εκτελέσιμη στοίβα έχοντας την ίδια ενότητα, αλλά χωρίς το bit εκτελέσιμου ρυθμισμένο. Εάν ένα αρχείο εισόδου δεν έχει μια ενότητα .note.GNU-stack, τότε η προεπιλεγμένη συμπεριφορά είναι συγκεκριμένη για τον στόχο. Για ορισμένους στόχους, η απουσία μιας τέτοιας ενότητας υποδηλώνει ότι απαιτείται μια εκτελέσιμη στοίβα. Αυτό είναι συχνά ένα πρόβλημα για αρχεία συναρμολόγησης που έχουν δημιουργηθεί χειροκίνητα.

--error-execstack
--no-error-execstack
Εάν ο συνδετήρας πρόκειται να δημιουργήσει ένα μήνυμα προειδοποίησης σχετικά με μια εκτελέσιμη στοίβα, τότε η επιλογή --error-execstack θα αλλάξει αυτήν την προειδοποίηση σε σφάλμα. Σημείωση - αυτή η επιλογή δεν αλλάζει την κατάσταση δημιουργίας προειδοποιήσεων εκτελέσιμης στοίβας του συνδετήρα. Χρησιμοποιήστε τις επιλογές --warn-execstack ή --warn-execstack-objects για να ορίσετε μια συγκεκριμένη κατάσταση προειδοποίησης.

Η επιλογή --no-error-execstack θα επαναφέρει την προεπιλεγμένη συμπεριφορά δημιουργίας μηνυμάτων προειδοποίησης.

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

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

--warn-rwx-segments
--no-warn-rwx-segments
Να προειδοποιεί εάν ο συνδετήρας δημιουργεί ένα φορτώσιμο, μη μηδενικού μεγέθους τμήμα που έχει τις σημαίες αδειών ανάγνωσης, εγγραφής και εκτέλεσης. Ένα τέτοιο τμήμα αντιπροσωπεύει μια πιθανή ευπάθεια ασφαλείας. Επιπλέον, θα δημιουργηθούν προειδοποιήσεις εάν δημιουργηθεί ένα τμήμα αποθήκευσης thread local με την ενεργοποιημένη σημαία άδειας εκτέλεσης, ανεξάρτητα από το εάν έχει ή όχι τις σημαίες αδειών ανάγνωσης και/ή εγγραφής.

Αυτές οι προειδοποιήσεις είναι ενεργοποιημένες από προεπιλογή. Μπορούν να απενεργοποιηθούν μέσω της επιλογής --no-warn-rwx-segments και να ενεργοποιηθούν ξανά μέσω της επιλογής --warn-rwx-segments.

--error-rwx-segments
--no-error-rwx-segments
Εάν ο συνδετήρας πρόκειται να δημιουργήσει ένα μήνυμα προειδοποίησης σχετικά με ένα εκτελέσιμο, εγγράψιμο τμήμα ή ένα εκτελέσιμο τμήμα TLS, η επιλογή --error-rwx-segments θα μετατρέψει αυτήν την προειδοποίηση σε σφάλμα. Η επιλογή --no-error-rwx-segments θα επαναφέρει την προεπιλεγμένη συμπεριφορά της απλής δημιουργίας ενός μηνύματος προειδοποίησης.

Σημείωση - η επιλογή --error-rwx-segments δεν ενεργοποιεί από μόνη της προειδοποιήσεις σχετικά με αυτά τα τμήματα. Αυτές οι προειδοποιήσεις είναι είτε ενεργοποιημένες από προεπιλογή, εάν ο συνδετήρας είχε διαμορφωθεί με αυτόν τον τρόπο, είτε μέσω της επιλογής --warn-rwx-segments.

--warn-section-align
Να προειδοποιεί εάν η διεύθυνση μιας τμήματος εξόδου αλλάζει λόγω ευθυγράμμισης. Συνήθως, η ευθυγράμμιση θα ορίζεται από ένα τμήμα εισόδου. Η διεύθυνση θα αλλάξει μόνο εάν δεν έχει καθοριστεί ρητά. Δηλαδή, εάν η εντολή "SECTIONS" δεν καθορίζει μια διεύθυνση έναρξης για το τμήμα.

--warn-textrel
Να προειδοποιεί εάν ο συνδετήρας προσθέτει το DT\_TEXTREL σε ένα εκτελέσιμο αρχείο ανεξάρτητο θέσης ή σε ένα κοινόχρηστο αντικείμενο.

--warn-alternate-em
Να προειδοποιεί εάν ένα αντικείμενο έχει εναλλακτικό κώδικα μηχανής ELF.

--warn-unresolved-symbols
Εάν ο συνδετήρας πρόκειται να αναφέρει ένα μη επιλυμένο σύμβολο (δείτε την επιλογή --unresolved-symbols), θα δημιουργήσει κανονικά ένα σφάλμα. Αυτή η επιλογή το μετατρέπει σε προειδοποίηση.

--error-unresolved-symbols
Αυτό επαναφέρει την προεπιλεγμένη συμπεριφορά του συνδετήρα της δημιουργίας σφαλμάτων όταν αναφέρει μη επιλυμένα σύμβολα.

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

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

--wrap=symbol
Χρησιμοποιήστε μια συνάρτηση περιτύλιξης για το σύμβολο. Οποιαδήποτε μη καθορισμένη αναφορά στο σύμβολο θα επιλύεται στην "_\_wrap_symbol". Οποιαδήποτε μη καθορισμένη αναφορά στην "_\_real_symbol" θα επιλύεται στο σύμβολο.

Αυτό μπορεί να χρησιμοποιηθεί για την παροχή μιας συνάρτησης περιτύλιξης για μια συστημική συνάρτηση. Η συνάρτηση περιτύλιξης θα πρέπει να ονομάζεται "_\_wrap_symbol". Εάν θέλει να καλέσει τη συστημική συνάρτηση, θα πρέπει να καλέσει την "_\_real_symbol".

Εδώ είναι ένα απλό παράδειγμα:

void *
_\_wrap_malloc (size_t c)
{
printf ("malloc καλείται με %zu\n", c);
return \_\_real_malloc (c);
}

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

Ίσως να θέλετε να παρέχετε επίσης μια συνάρτηση "\_\_real_malloc", ώστε οι συνδέσεις χωρίς την επιλογή --wrap να επιτύχουν. Εάν το κάνετε, δεν θα πρέπει να τοποθετήσετε τον ορισμό της "_\_real_malloc" στο ίδιο αρχείο με την "_\_wrap_malloc". Εάν το κάνετε, ο μεταγλωττιστής ενδέχεται να επιλύσει την κλήση πριν ο συνδετήρας έχει την ευκαιρία να την αντικαταστήσει με την "malloc".

Μόνο οι μη καθορισμένες αναφορές αντικαθίστανται από τον συνδετήρα. Επομένως, οι εσωτερικές αναφορές της μονάδας μετάφρασης στο σύμβολο δεν επιλύονται στην "_\_wrap_symbol". Στο επόμενο παράδειγμα, η κλήση στην "f" στην "g" δεν επιλύεται στην "_\_wrap_f".

int
f (void)
{
return 123;
}

int
g (void)
{
return f();
}

--eh-frame-hdr
--no-eh-frame-hdr
Ζητήστε (--eh-frame-hdr) ή καταστείλετε (--no-eh-frame-hdr) τη δημιουργία της ενότητας ".eh\_frame\_hdr" και της κεφαλίδας τμήματος ELF "PT_GNU_EH_FRAME".

--no-ld-generated-unwind-info
Ζητήστε τη δημιουργία πληροφοριών "unwind" για την ενότητα ".eh\_frame" για τμήματα κώδικα που δημιουργούνται από τον συνδετήρα, όπως το PLT. Αυτή η επιλογή είναι ενεργοποιημένη από προεπιλογή, εάν ο συνδετήρας υποστηρίζει πληροφορίες "unwind" που δημιουργούνται. Αυτή η επιλογή ελέγχει επίσης τη δημιουργία πληροφοριών στοίβας ".sframe" για τμήματα κώδικα που δημιουργούνται από τον συνδετήρα, όπως το PLT.

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

--hash-size=number
Ορίστε το προεπιλεγμένο μέγεθος των πινάκων κατακερματισμού του συνδετήρα σε έναν πρώτο αριθμό κοντά στο number. Η αύξηση αυτής της τιμής μπορεί να μειώσει το χρόνο που χρειάζεται ο συνδετήρας για να εκτελέσει τις εργασίες του, με κόστος την αύξηση των απαιτήσεων μνήμης του συνδετήρα. Ομοίως, η μείωση αυτής της τιμής μπορεί να μειώσει τις απαιτήσεις μνήμης με κόστος την ταχύτητα. Η προεπιλεγμένη τιμή είναι 4051 υπό κανονικές συνθήκες και 1021 εάν χρησιμοποιηθεί η επιλογή γραμμής εντολών --reduce-memory-overheads.

--hash-style=style

Ορίζει τον τύπο του πίνακα κατακερματισμού του συνδετή. Το style μπορεί να είναι "sysv" για την κλασική ενότητα ELF ".hash", "gnu" για τη νέα ενότητα GNU ".gnu.hash" ή "both" για τους κλασικούς πίνακες κατακερματισμού ELF ".hash" και τη νέα ενότητα GNU ".gnu.hash". Η προεπιλογή εξαρτάται από τον τρόπο με τον οποίο έχει διαμορφωθεί ο συνδετήρας, αλλά για τα περισσότερα συστήματα που βασίζονται σε Linux θα είναι "both".

--compress-debug-sections=none
--compress-debug-sections=zlib
--compress-debug-sections=zlib-gnu
--compress-debug-sections=zlib-gabi
--compress-debug-sections=zstd

Στις πλατφόρμες ELF, αυτές οι επιλογές ελέγχουν τον τρόπο συμπίεσης των τμημάτων εντοπισμού σφαλμάτων DWARF χρησιμοποιώντας το zlib.

--compress-debug-sections=none δεν συμπιέζει τα τμήματα εντοπισμού σφαλμάτων DWARF.
--compress-debug-sections=zlib-gnu συμπιέζει τα τμήματα εντοπισμού σφαλμάτων DWARF και τα μετονομάζει ώστε να ξεκινούν με το .zdebug αντί του .debug. Το --compress-debug-sections=zlib-gabi συμπιέζει επίσης τα τμήματα εντοπισμού σφαλμάτων DWARF, αλλά αντί να τα μετονομάζει, ορίζει τη σημαία SHF_COMPRESSED στις κεφαλίδες των τμημάτων.

Η επιλογή --compress-debug-sections=zlib είναι ψευδώνυμο για την --compress-debug-sections=zlib-gabi.

--compress-debug-sections=zstd συμπιέζει τα τμήματα εντοπισμού σφαλμάτων DWARF χρησιμοποιώντας το zstd.

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

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

--reduce-memory-overheads

Αυτή η επιλογή μειώνει τις απαιτήσεις μνήμης κατά το χρόνο εκτέλεσης του ld, με κόστος την ταχύτητα σύνδεσης. Αυτό εισήχθη για να επιλέξει τον παλιό αλγόριθμο O(n^2) για τη δημιουργία του αρχείου χάρτη συνδέσμων, αντί για τον νέο αλγόριθμο O(n) που χρησιμοποιεί περίπου 40% περισσότερη μνήμη για την αποθήκευση συμβόλων.

Ένα άλλο αποτέλεσμα του διακόπτη είναι η ρύθμιση του μεγέθους του προεπιλεγμένου πίνακα κατακερματισμού σε 1021, γεγονός που εξοικονομεί επίσης μνήμη με κόστος την επιμήκυνση του χρόνου εκτέλεσης του συνδετή. Αυτό δεν γίνεται ωστόσο εάν έχει χρησιμοποιηθεί η επιλογή --hash-size.

Η επιλογή --reduce-memory-overheads μπορεί επίσης να χρησιμοποιηθεί για την ενεργοποίηση άλλων συμβιβασμών σε μελλοντικές εκδόσεις του συνδετή.

--max-cache-size=size
Το ld συνήθως αποθηκεύει στην μνήμη τις πληροφορίες ανακατανομής και τους πίνακες συμβόλων των αρχείων εισόδου με απεριόριστο μέγεθος. Αυτή η επιλογή ορίζει το μέγιστο μέγεθος της προσωρινής μνήμης σε size. Σημείωση: εάν έχει χρησιμοποιηθεί η επιλογή γραμμής εντολών --no-keep-memory, ο συνδετήρας ενεργεί σαν να έχει οριστεί το μέγιστο μέγεθος της προσωρινής μνήμης σε 0, δηλαδή δεν διατηρεί τίποτα.

--build-id
--build-id=style

Ζητήστε τη δημιουργία μιας ενότητας ELF ".note.gnu.build-id" ή μιας ενότητας COFF ".buildid". Το περιεχόμενο της σημείωσης είναι μοναδικές bit που προσδιορίζουν αυτό το συνδεδεμένο αρχείο. Το style μπορεί να είναι "uuid" για να χρησιμοποιηθούν 128 τυχαία bit, "sha1" για να χρησιμοποιηθεί μια κατακερματισμένη τιμή SHA1 160 bit, "md5" για να χρησιμοποιηθεί μια κατακερματισμένη τιμή MD5 128 bit ή "xx" για να χρησιμοποιηθεί μια κατακερματισμένη τιμή XXHASH 128 bit στα κανονιστικά μέρη του περιεχομένου εξόδου ή "0xhexstring" για να χρησιμοποιηθεί μια επιλεγμένη συμβολοσειρά bit που καθορίζεται ως άρτιος αριθμός δεκαεξαδικών ψηφίων (οι χαρακτήρες "-" και ":" μεταξύ των ζευγών ψηφίων αγνοούνται). Εάν το style παραλείπεται, χρησιμοποιείται το "sha1".


Οι επιλογές "md5", "sha1" και "xx" παράγουν ένα αναγνωριστικό που είναι πάντα το ίδιο σε ένα ίδιο αρχείο εξόδου, αλλά είναι σχεδόν σίγουρα μοναδικό μεταξύ όλων των μη πανομοιότυπων αρχείων εξόδου. Δεν προορίζεται να χρησιμοποιείται για σύγκριση ως έλεγχος ακεραιότητας του περιεχομένου του αρχείου. Ένα συνδεδεμένο αρχείο μπορεί να αλλάξει αργότερα από άλλα εργαλεία, αλλά η συμβολοσειρά bit αναγνωριστικού δημιουργίας που προσδιορίζει το αρχικό συνδεδεμένο αρχείο δεν αλλάζει.

Η χρήση της επιλογής "none" απενεργοποιεί τη ρύθμιση από οποιεσδήποτε επιλογές "--build-id" που έχουν οριστεί νωρίτερα στη γραμμή εντολών.

--package-metadata=JSON

Ζητήστε τη δημιουργία μιας ενότητας σημείωσης ELF ".note.package". Το περιεχόμενο της σημείωσης είναι σε μορφή JSON, σύμφωνα με τις προδιαγραφές μεταδεδομένων πακέτου. Για περισσότερες πληροφορίες, δείτε: https://systemd.io/ELF_PACKAGE_METADATA/. Το όρισμα JSON υποστηρίζει την κωδικοποίηση με το σύμβολο "%" και την επιπλέον κωδικοποίηση %[string] (όπου το string αναφέρεται στο όνομα στις ονομαστικές αναφορές χαρακτήρων της HTML): %[comma] για ,, %[lbrace] για {, %[quot] για ", %[rbrace] για } και %[space] για τον χαρακτήρα διαστήματος. Εάν το όρισμα JSON λείπει/είναι κενό, αυτό θα απενεργοποιήσει τη δημιουργία της ενότητας μεταδεδομένων, εάν είχε ενεργοποιηθεί από μια προηγούμενη εμφάνιση της επιλογής --package-metadata. Εάν ο συνδετήρας έχει δημιουργηθεί με το libjansson, η συμβολοσειρά JSON θα επικυρωθεί.

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

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

--add-stdcall-alias

Εάν δοθεί, τα σύμβολα με το επίθημα stdcall (@nn) θα εξαχθούν όπως έχουν και επίσης με το επίθημα που έχει αφαιρεθεί. [Αυτή η επιλογή είναι συγκεκριμένη για την έκδοση του συνδετήρα που στοχεύει το i386 PE]

--base-file file

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

--dll

Δημιουργήστε μια DLL αντί για ένα κανονικό εκτελέσιμο αρχείο. Μπορείτε επίσης να χρησιμοποιήσετε την επιλογή -shared ή να καθορίσετε ένα "LIBRARY" σε ένα δεδομένο αρχείο ".def". [Αυτή η επιλογή είναι συγκεκριμένη για την έκδοση του συνδετήρα που στοχεύει το i386 PE]


--enable-long-section-names
--disable-long-section-names

Οι παραλλαγές PE της μορφής αντικειμένου COFF προσθέτουν μια επέκταση που επιτρέπει τη χρήση ονομάτων τμημάτων μεγαλύτερων των οκτώ χαρακτήρων, το κανονικό όριο για το COFF. Από προεπιλογή, αυτά τα ονόματα επιτρέπονται μόνο σε αρχεία αντικειμένων, καθώς τα πλήρως συνδεδεμένα εκτελέσιμα αρχεία δεν περιέχουν τον πίνακα συμβολοσειρών COFF που απαιτείται για την υποστήριξη των μεγαλύτερων ονομάτων. Ως επέκταση GNU, είναι δυνατό να επιτραπεί η χρήση τους σε εκτελέσιμα αρχεία ή να (πιθανώς άσκοπα!) αποτραπεί η χρήση τους σε αρχεία αντικειμένων, χρησιμοποιώντας αυτές τις δύο επιλογές. Τα εκτελέσιμα αρχεία που δημιουργούνται με αυτά τα μεγάλα ονόματα τμημάτων είναι ελαφρώς μη τυπικά, καθώς περιέχουν έναν πίνακα συμβολοσειρών και ενδέχεται να δημιουργήσουν σύγχυση όταν εξετάζονται με εργαλεία που δεν είναι ευαισθητοποιημένα για το PE της GNU, όπως προγράμματα προβολής και αποσυμπίεσης αρχείων. Ωστόσο, το GDB βασίζεται στη χρήση μεγάλων ονομάτων τμημάτων PE για την εύρεση τμημάτων πληροφοριών εντοπισμού σφαλμάτων Dwarf-2 σε ένα εκτελέσιμο αρχείο κατά τη διάρκεια εκτέλεσης, επομένως εάν καμία από αυτές τις επιλογές δεν καθοριστεί στη γραμμή εντολών, το ld θα ενεργοποιήσει τα μεγάλα ονόματα τμημάτων, παρακάμπτοντας τη συμπεριφορά που είναι από προεπιλογή και τεχνικά σωστή, όταν εντοπίσει την παρουσία πληροφοριών εντοπισμού σφαλμάτων κατά τη σύνδεση ενός εκτελέσιμου αρχείου και δεν καταργεί τα σύμβολα. [Αυτή η επιλογή ισχύει για όλες τις εκδόσεις του συνδέσμου που στοχεύουν το PE]

--enable-stdcall-fixup
--disable-stdcall-fixup

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

--leading-underscore
--no-leading-underscore

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

--export-all-symbols
Εάν δοθεί, όλα τα καθολικά σύμβολα στα αντικείμενα που χρησιμοποιούνται για τη δημιουργία ενός DLL θα εξαχθούν από το DLL. Σημειώστε ότι αυτή είναι η προεπιλογή εάν δεν υπάρχουν άλλα εξαγόμενα σύμβολα. Όταν τα σύμβολα εξάγονται ρητά μέσω αρχείων DEF ή εξάγονται σιωπηρά μέσω χαρακτηριστικών συνάρτησης, η προεπιλογή είναι να μην εξάγονται άλλα σύμβολα εκτός εάν δοθεί αυτή η επιλογή. Σημειώστε ότι τα σύμβολα "DllMain@12", "DllEntryPoint@0", "DllMainCRTStartup@12" και "impure_ptr" δεν θα εξάγονται αυτόματα. Επίσης, τα σύμβολα που εισάγονται από άλλα DLL δεν θα επαναεξαχθούν, ούτε θα εξάγονται σύμβολα που καθορίζουν την εσωτερική διάταξη του DLL, όπως αυτά που ξεκινούν με "_head_" ή τελειώνουν με "_iname". Επιπλέον, κανένα σύμβολο από τα "libgcc", "libstd++", "libmingw32" ή "crtX.o" δεν θα εξάγεται. Τα σύμβολα των οποίων τα ονόματα ξεκινούν με "__rtti_" ή "__builtin_" δεν θα εξάγονται, για να βοηθήσουν τα DLL της C++. Τέλος, υπάρχει μια εκτεταμένη λίστα ιδιωτικών συμβόλων Cygwin που δεν εξάγονται (προφανώς, αυτό ισχύει όταν δημιουργούνται DLL για στόχους Cygwin). Αυτά τα Cygwin-excludes είναι: "_cygwin_dll_entry@12", "_cygwin_crt0_common@8", "_cygwin_noncygwin_dll_entry@12", "_fmode", "_impure_ptr", "cygwin_attach_dll", "cygwin_premain0", "cygwin_premain1", "cygwin_premain2", "cygwin_premain3" και "environ". [Αυτή η επιλογή είναι συγκεκριμένη για την έκδοση του συνδέσμου i386 που στοχεύει το PE]

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

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

--exclude-all-symbols

Καθορίζει ότι δεν πρέπει να εξαχθούν καθόλου σύμβολα αυτόματα. [Αυτή η επιλογή είναι συγκεκριμένη για τη στοχευμένη έκδοση του συνδέσμου i386 PE]

--file-alignment

Καθορίζει την ευθυγράμμιση αρχείου. Οι ενότητες στο αρχείο θα ξεκινούν πάντα σε μετατοπίσεις αρχείου που είναι πολλαπλάσια αυτού του αριθμού. Αυτό έχει προεπιλογή 512. [Αυτή η επιλογή είναι συγκεκριμένη για τη στοχευμένη έκδοση του συνδέσμου i386 PE]

--heap reserve
--heap reserve,commit

Καθορίζει τον αριθμό των byte μνήμης που θα διατεθούν (και προαιρετικά θα δεσμευτούν) για να χρησιμοποιηθούν ως σωρός για αυτό το πρόγραμμα. Η προεπιλογή είναι 1 MB διαθέσιμο, 4 KB δεσμευμένο. [Αυτή η επιλογή είναι συγκεκριμένη για τη στοχευμένη έκδοση του συνδέσμου i386 PE]

--kill-at

Εάν δοθεί, τα καταλήξεις stdcall (@nn) θα αφαιρεθούν από τα σύμβολα πριν εξαχθούν. [Αυτή η επιλογή είναι συγκεκριμένη για τη στοχευμένη έκδοση του συνδέσμου i386 PE]

--large-address-aware

Εάν δοθεί, το κατάλληλο bit στο πεδίο "Χαρακτηριστικά" της κεφαλίδας COFF θα οριστεί για να υποδείξει ότι αυτό το εκτελέσιμο υποστηρίζει εικονικές διευθύνσεις μεγαλύτερες από 2 gigabyte. Αυτό θα πρέπει να χρησιμοποιείται σε συνδυασμό με τη διακόπτη "/3GB" ή "/USERVA=τιμή megabyte" στην ενότητα "[λειτουργικά συστήματα]" του αρχείου BOOT.INI. Διαφορετικά, αυτό το bit δεν έχει καμία επίδραση. [Αυτή η επιλογή είναι συγκεκριμένη για τις στοχευμένες εκδόσεις του συνδέσμου PE]

--disable-large-address-aware

Αντιστρέφει την επίδραση μιας προηγούμενης επιλογής --large-address-aware. Αυτό είναι χρήσιμο εάν το --large-address-aware ορίζεται πάντα από το πρόγραμμα οδήγησης του μεταγλωττιστή (π.χ. Cygwin gcc) και το εκτελέσιμο δεν υποστηρίζει εικονικές διευθύνσεις μεγαλύτερες από 2 gigabyte. [Αυτή η επιλογή είναι συγκεκριμένη για τις στοχευμένες εκδόσεις του συνδέσμου PE]

--major-image-version τιμή

Ορίζει τον κύριο αριθμό της "έκδοσης εικόνας". Η προεπιλογή είναι 1. [Αυτή η επιλογή είναι συγκεκριμένη για τη στοχευμένη έκδοση του συνδέσμου i386 PE]


--major-os-version value

Ορίζει τον κύριο αριθμό της "έκδοσης λειτουργικού συστήματος". Η προεπιλογή είναι 4. [Αυτή η επιλογή είναι συγκεκριμένη για την έκδοση του συνδέσμου που στοχεύει στην πλατφόρμα i386 PE]

--major-subsystem-version value

Ορίζει τον κύριο αριθμό της "έκδοσης υποσυστήματος". Η προεπιλογή είναι 4. [Αυτή η επιλογή είναι συγκεκριμένη για την έκδοση του συνδέσμου που στοχεύει στην πλατφόρμα i386 PE]

--minor-image-version value

Ορίζει τον δευτερεύοντα αριθμό της "έκδοσης εικόνας". Η προεπιλογή είναι 0. [Αυτή η επιλογή είναι συγκεκριμένη για την έκδοση του συνδέσμου που στοχεύει στην πλατφόρμα i386 PE]

--minor-os-version value

Ορίζει τον δευτερεύοντα αριθμό της "έκδοσης λειτουργικού συστήματος". Η προεπιλογή είναι 0. [Αυτή η επιλογή είναι συγκεκριμένη για την έκδοση του συνδέσμου που στοχεύει στην πλατφόρμα i386 PE]

--minor-subsystem-version value

Ορίζει τον δευτερεύοντα αριθμό της "έκδοσης υποσυστήματος". Η προεπιλογή είναι 0. [Αυτή η επιλογή είναι συγκεκριμένη για την έκδοση του συνδέσμου που στοχεύει στην πλατφόρμα i386 PE]

--output-def file

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

--enable-auto-image-base
--enable-auto-image-base=value

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

--disable-auto-image-base

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

--dll-search-prefix string

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

--enable-auto-import

Εκτελέστε εξελιγμένη σύνδεση του "_symbol" στο "__imp__symbol" για εισαγωγές δεδομένων από DLL, καθιστώντας δυνατή την παράκαμψη του μηχανισμού dllimport στην πλευρά του χρήστη και την αναφορά σε μη επεξεργασμένα ονόματα συμβόλων. [Αυτή η επιλογή είναι συγκεκριμένη για την έκδοση του συνδέσμου που στοχεύει στην πλατφόρμα i386 PE]

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

Σημείωση: Η χρήση της επέκτασης "auto-import" θα καταστήσει την ενότητα κειμένου του αρχείου εικόνας εγγράψιμη. Αυτό δεν συμμορφώνεται με τις προδιαγραφές μορφής PE-COFF που δημοσιεύονται από τη Microsoft.

Σημείωση - η χρήση της επέκτασης 'auto-import' θα προκαλέσει επίσης δεδομένα μόνο για ανάγνωση, τα οποία κανονικά θα τοποθετούνταν στην ενότητα .rdata, να τοποθετηθούν στην ενότητα .data. Αυτό γίνεται για να αντιμετωπιστεί ένα πρόβλημα με τις σταθερές, το οποίο περιγράφεται εδώ: http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html

Η χρήση του 'auto-import' συνήθως θα "λειτουργεί απλά" -- αλλά μερικές φορές μπορεί να δείτε αυτό το μήνυμα:

"Η μεταβλητή '<var>' δεν μπορεί να εισαχθεί αυτόματα. Διαβάστε την τεκμηρίωση για την επιλογή "--enable-auto-import" του ld για λεπτομέρειες."

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

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

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

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

extern type extern_array[];
extern_array[1] -->
{ volatile type *t=extern_array; t[1] }

ή

extern type extern_array[];
extern_array[1] -->
{ volatile int t=1; extern_array[t] }

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

extern struct s extern_struct;
extern_struct.field -->
{ volatile struct s *t=&extern_struct; t->field }

ή

extern long long extern_ll;
extern_ll -->
{ volatile long long * local_ll=&extern_ll; *local_ll }

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


Αρχικό:

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

Λύση 1:

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

Λύση 2:

--foo.h
/* Σημείωση: υποτίθεται ότι υπάρχει αυτόματη εξαγωγή (δεν υπάρχει __declspec(dllexport)) */
#if (defined(_WIN32) || defined(__CYGWIN__)) && \
!(defined(FOO_BUILD_DLL) || defined(FOO_STATIC))
#define FOO_IMPORT __declspec(dllimport)
#else
#define FOO_IMPORT
#endif
extern FOO_IMPORT int arr[];
--foo.c
#include "foo.h"
void main(int argc, char **argv){
printf("%d\n",arr[1]);
}

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

--disable-auto-import
Μην επιχειρήσετε να κάνετε εξελιγμένη σύνδεση του "\_symbol" στο "\_\_imp\_\_symbol" για εισαγωγές DATA από DLL. [Αυτή η επιλογή είναι συγκεκριμένη για τη στοχευμένη έκδοση i386 PE του συνδέσμου]

--enable-runtime-pseudo-reloc
Εάν ο κώδικάς σας περιέχει εκφράσεις που περιγράφονται στην ενότητα --enable-auto-import, δηλαδή εισαγωγές DATA από DLL με μη μηδενική μετατόπιση, αυτή η επιλογή θα δημιουργήσει ένα διάνυσμα "ψευδο-μετατοπίσεων χρόνου εκτέλεσης" που μπορούν να χρησιμοποιηθούν από το περιβάλλον χρόνου εκτέλεσης για να προσαρμόσει τις αναφορές σε αυτά τα δεδομένα στον κώδικα του πελάτη σας. [Αυτή η επιλογή είναι συγκεκριμένη για τη στοχευμένη έκδοση i386 PE του συνδέσμου]

--disable-runtime-pseudo-reloc
Μην δημιουργήσετε ψευδο-μετατοπίσεις για εισαγωγές DATA από DLL με μη μηδενική μετατόπιση. [Αυτή η επιλογή είναι συγκεκριμένη για τη στοχευμένη έκδοση i386 PE του συνδέσμου]

--enable-extra-pe-debug
Εμφάνιση πρόσθετων πληροφοριών εντοπισμού σφαλμάτων που σχετίζονται με την αυτόματη εισαγωγή συμβόλων. [Αυτή η επιλογή είναι συγκεκριμένη για τη στοχευμένη έκδοση i386 PE του συνδέσμου]

--section-alignment
Ορίζει την ευθυγράμμιση τμημάτων. Τα τμήματα στη μνήμη θα ξεκινούν πάντα σε διευθύνσεις που είναι πολλαπλάσια αυτού του αριθμού. Η προεπιλογή είναι 0x1000. [Αυτή η επιλογή είναι συγκεκριμένη για τη στοχευμένη έκδοση i386 PE του συνδέσμου]

--stack reserve
--stack reserve,commit
Καθορίστε τον αριθμό των byte μνήμης που θα διατεθούν (και προαιρετικά θα δεσμευτούν) για να χρησιμοποιηθούν ως στοίβα για αυτό το πρόγραμμα. Η προεπιλογή είναι 2 MB διατεθειμένο, 4 KB δεσμευμένο. [Αυτή η επιλογή είναι συγκεκριμένη για τη στοχευμένη έκδοση i386 PE του συνδέσμου]

--subsystem which
--subsystem which:major
--subsystem which:major.minor
Καθορίζει το υποσύστημα υπό το οποίο θα εκτελεστεί το πρόγραμμά σας. Οι έγκυρες τιμές για το which είναι "native", "windows", "console", "posix" και "xbox". Μπορείτε προαιρετικά να ορίσετε επίσης την έκδοση του υποσυστήματος. Οι αριθμητικές τιμές γίνονται επίσης δεκτές για το which. [Αυτή η επιλογή είναι συγκεκριμένη για τη στοχευμένη έκδοση i386 PE του συνδέσμου]

Οι ακόλουθες επιλογές ορίζουν σημαίες στο πεδίο "DllCharacteristics" της κεφαλίδας του αρχείου PE:
[Αυτές οι επιλογές είναι συγκεκριμένες για τις στοχευμένες εκδόσεις PE του συνδέσμου]

--high-entropy-va
--disable-high-entropy-va

Η εικόνα είναι συμβατή με τη διάταξη τυχαιοποίησης της διεύθυνσης χώρου διευθύνσεων 64-bit (ASLR). Αυτή η επιλογή είναι ενεργοποιημένη από προεπιλογή για εικόνες PE 64-bit σε στόχους MinGW.

Αυτή η επιλογή υποδηλώνει επίσης τις επιλογές --dynamicbase και --enable-reloc-section.

--dynamicbase
--disable-dynamicbase

Η διεύθυνση βάσης της εικόνας μπορεί να μετακινηθεί χρησιμοποιώντας την τυχαιοποίηση του χώρου διευθύνσεων (ASLR). Αυτή η λειτουργία εισήχθη με τα MS Windows Vista για στόχους i386 PE. Αυτή η επιλογή είναι ενεργοποιημένη από προεπιλογή για τους στόχους MinGW, αλλά μπορεί να απενεργοποιηθεί μέσω της επιλογής --disable-dynamicbase. Αυτή η επιλογή υποδηλώνει επίσης την επιλογή --enable-reloc-section.

--forceinteg
--disable-forceinteg

Επιβάλλονται έλεγχοι ακεραιότητας κώδικα. Αυτή η επιλογή είναι απενεργοποιημένη από προεπιλογή.

--nxcompat
--disable-nxcompat

Η εικόνα είναι συμβατή με την αποτροπή εκτέλεσης δεδομένων (Data Execution Prevention). Αυτή η λειτουργία εισήχθη με τα MS Windows XP SP2 για στόχους i386 PE. Η επιλογή είναι ενεργοποιημένη από προεπιλογή για τους στόχους MinGW.

--no-isolation
--disable-no-isolation

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

--no-seh
--disable-no-seh

Η εικόνα δεν χρησιμοποιεί SEH. Δεν μπορεί να κληθεί κανένας χειριστής SE από αυτήν την εικόνα. Αυτή η επιλογή είναι απενεργοποιημένη από προεπιλογή.

--no-bind
--disable-no-bind

Μην συνδέσετε αυτήν την εικόνα. Αυτή η επιλογή είναι απενεργοποιημένη από προεπιλογή.

--wdmdriver
--disable-wdmdriver

Ο οδηγός χρησιμοποιεί το Μοντέλο Οδηγού MS Windows. Αυτή η επιλογή είναι απενεργοποιημένη από προεπιλογή.

--tsaware
--disable-tsaware

Η εικόνα είναι συμβατή με τον διακομιστή τερματικού (Terminal Server). Αυτή η επιλογή είναι απενεργοποιημένη από προεπιλογή.

--insert-timestamp
--no-insert-timestamp

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

Εάν η επιλογή --insert-timestamp είναι ενεργή, τότε η ώρα που εισάγεται είναι είτε η ώρα που πραγματοποιείται η σύνδεση, είτε, εάν έχει οριστεί η μεταβλητή περιβάλλοντος "SOURCE_DATE_EPOCH", ο αριθμός των δευτερολέπτων από την εποχή Unix, όπως καθορίζεται από αυτήν τη μεταβλητή.

--enable-reloc-section
--disable-reloc-section

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

Ο στόχος C6X uClinux χρησιμοποιεί μια μορφή δυαδικού αρχείου που ονομάζεται DSBT για την υποστήριξη κοινόχρηστων βιβλιοθηκών. Κάθε κοινόχρηστη βιβλιοθήκη στο σύστημα πρέπει να έχει έναν μοναδικό δείκτη. Όλα τα εκτελέσιμα αρχεία χρησιμοποιούν έναν δείκτη 0.

--dsbt-size size

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


--dsbt-index index

Αυτή η επιλογή ορίζει τον δείκτη DSBT του τρέχοντος εκτελέσιμου αρχείου ή κοινόχρηστης βιβλιοθήκης στην τιμή index. Η προεπιλεγμένη τιμή είναι 0, η οποία είναι κατάλληλη για τη δημιουργία εκτελέσιμων αρχείων. Εάν δημιουργηθεί μια κοινόχρηστη βιβλιοθήκη με δείκτη DSBT 0, οι αναφορές "R_C6000_DSBT_INDEX" αντιγράφονται στο αρχείο εξόδου.

Η διακόπτης --no-merge-exidx-entries απενεργοποιεί τη συγχώνευση των γειτονικών καταχωρήσεων exidx στις πληροφορίες αποσύνθεσης πλαισίου.

--branch-stub

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

--stub-group-size=N

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

Οι σύνδεσμοι 68HC11 και 68HC12 υποστηρίζουν συγκεκριμένες επιλογές για τον έλεγχο της αντιστοίχισης μεταγωγής τράπεζας μνήμης και της δημιουργίας κώδικα τραμπολίνας.

--no-trampoline

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

--bank-window name

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

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

--got=type

Αυτή η επιλογή ενημερώνει τον σύνδεσμο για το ποιο σχήμα δημιουργίας GOT θα χρησιμοποιηθεί. Το type θα πρέπει να είναι ένα από τα single, negative, multigot ή target. Για περισσότερες πληροφορίες, ανατρέξτε στην καταχώρηση Info για το ld.

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

--insn32
--no-insn32

Αυτές οι επιλογές ελέγχουν την επιλογή των οδηγιών microMIPS που χρησιμοποιούνται στον κώδικα που δημιουργείται από τον σύνδεσμο, όπως αυτός στο PLT ή στα στυφάρια δεσμεύσεων με καθυστέρηση ή στη χαλάρωση. Εάν χρησιμοποιηθεί το --insn32, τότε ο σύνδεσμος χρησιμοποιεί μόνο κωδικοποιήσεις οδηγιών 32 bit. Από προεπιλογή ή εάν χρησιμοποιηθεί το --no-insn32, χρησιμοποιούνται όλες οι κωδικοποιήσεις οδηγιών, συμπεριλαμβανομένων των 16 bit, όπου είναι δυνατόν.

--ignore-branch-isa
--no-ignore-branch-isa

Αυτές οι επιλογές ελέγχουν τους ελέγχους χαλάρωσης διακλάδωσης για μη έγκυρες μεταβάσεις λειτουργίας ISA. Εάν χρησιμοποιηθεί το --ignore-branch-isa, τότε ο σύνδεσμος αποδέχεται οποιεσδήποτε αναφορές διακλάδωσης και οποιαδήποτε απαιτούμενη μετάβαση λειτουργίας ISA χάνεται στον υπολογισμό χαλάρωσης, εκτός από ορισμένες περιπτώσεις των οδηγιών "BAL" που πληρούν τις συνθήκες χαλάρωσης και μετατρέπονται σε ισοδύναμες οδηγίες "JALX" καθώς η σχετική αναφορά υπολογίζεται. Από προεπιλογή ή εάν χρησιμοποιηθεί το --no-ignore-branch-isa, γίνεται ένας έλεγχος που προκαλεί την απώλεια μιας μετάβασης λειτουργίας ISA, γεγονός που παράγει ένα σφάλμα.


--compact-branches
--no-compact-branches

Αυτές οι επιλογές ελέγχουν τη δημιουργία συμπαγών εντολών από τον συνδετή στις καταχωρήσεις PLT για το MIPS R6.

Για τον στόχο pdp11-aout, μπορούν να παραχθούν τρεις παραλλαγές της μορφής εξόδου, οι οποίες επιλέγονται από τις ακόλουθες επιλογές. Η προεπιλεγμένη παραλλαγή για το pdp11-aout είναι η επιλογή --omagic, ενώ για άλλους στόχους, η προεπιλογή είναι η --nmagic. Η επιλογή --imagic ορίζεται μόνο για τον στόχο pdp11-aout, ενώ οι άλλες περιγράφονται εδώ όπως εφαρμόζονται στον στόχο pdp11-aout.

-N
--omagic

Σημειώστε την έξοδο ως "OMAGIC" (0407) στην κεφαλίδα a.out για να υποδείξετε ότι το τμήμα κειμένου δεν πρέπει να προστατεύεται από εγγραφή και να μοιράζεται. Δεδομένου ότι τόσο το τμήμα κειμένου όσο και το τμήμα δεδομένων είναι αναγνώσιμα και εγγράψιμα, το τμήμα δεδομένων εκχωρείται αμέσως δίπλα στο τμήμα κειμένου. Αυτή είναι η παλαιότερη μορφή για εκτελέσιμα προγράμματα PDP11 και είναι η προεπιλογή για το ld σε συστήματα PDP11 Unix από την αρχή έως το 2.11BSD.

-n
--nmagic

Σημειώστε την έξοδο ως "NMAGIC" (0410) στην κεφαλίδα a.out για να υποδείξετε ότι όταν εκτελείται το αρχείο εξόδου, το τμήμα κειμένου θα είναι μόνο για ανάγνωση και θα μοιράζεται μεταξύ όλων των διεργασιών που εκτελούν το ίδιο αρχείο. Αυτό περιλαμβάνει τη μετακίνηση των τμημάτων δεδομένων στην πρώτη δυνατή θέση ορίου σελίδας 8K byte μετά το τέλος του τμήματος κειμένου. Αυτή η επιλογή δημιουργεί μια καθαρή εκτελέσιμη μορφή.

-z
--imagic

Σημειώστε την έξοδο ως "IMAGIC" (0411) στην κεφαλίδα a.out για να υποδείξετε ότι όταν εκτελείται το αρχείο εξόδου, τα τμήματα προγράμματος κειμένου και δεδομένων θα φορτωθούν σε ξεχωριστούς χώρους διευθύνσεων χρησιμοποιώντας τη δυνατότητα διαχωρισμού χώρου εντολών και δεδομένων της μονάδας διαχείρισης μνήμης σε μεγαλύτερα μοντέλα του PDP11. Αυτό διπλασιάζει τον χώρο διευθύνσεων που είναι διαθέσιμος στο πρόγραμμα. Το τμήμα κειμένου είναι και πάλι καθαρό, προστατευμένο από εγγραφή και κοινόχρηστο. Η μόνη διαφορά στη μορφή εξόδου μεταξύ αυτής της επιλογής και των άλλων, εκτός από τον μαγικό αριθμό, είναι ότι τόσο το τμήμα κειμένου όσο και το τμήμα δεδομένων ξεκινούν στη θέση 0. Η επιλογή -z επέλεξε αυτήν τη μορφή στο 2.11BSD. Αυτή η επιλογή δημιουργεί μια ξεχωριστή εκτελέσιμη μορφή.

--no-omagic

Ισοδύναμο με την --nmagic για το pdp11-aout.

ΠΕΡΙΒΑΛΛΟΝ

Μπορείτε να αλλάξετε τη συμπεριφορά του ld με τις μεταβλητές περιβάλλοντος "GNUTARGET", "LDEMULATION" και "COLLECT_NO_DEMANGLE".

Το "GNUTARGET" καθορίζει τη μορφή αρχείου εισόδου αντικειμένου, εάν δεν χρησιμοποιείτε την επιλογή -b (ή το συνώνυμό της --format). Η τιμή του θα πρέπει να είναι μία από τις ονομασίες BFD για μια μορφή εισόδου. Εάν δεν υπάρχει
"GNUTARGET" στο περιβάλλον, το ld χρησιμοποιεί τη φυσική μορφή του στόχου. Εάν το "GNUTARGET" έχει οριστεί
σε "default", τότε το BFD προσπαθεί να ανακαλύψει τη μορφή εισόδου εξετάζοντας τα δυαδικά αρχεία εισόδου. αυτή
η μέθοδος συχνά επιτυγχάνει, αλλά υπάρχουν πιθανοί διφορούμενοι παράγοντες, καθώς δεν υπάρχει μέθοδος για τη διασφάλιση
ότι ο μαγικός αριθμός που χρησιμοποιείται για τον καθορισμό των μορφών αρχείων αντικειμένων είναι μοναδικός. Ωστόσο, η
διαμόρφωση
για το BFD σε κάθε σύστημα τοποθετεί την συμβατική μορφή για αυτό το σύστημα πρώτα στη λίστα αναζήτησης, επομένως οι ασάφειες επιλύονται προς όφελος της σύμβασης.

Το "LDEMULATION" καθορίζει την προεπιλεγμένη μίμηση εάν δεν χρησιμοποιείτε την επιλογή -m. Η μίμηση μπορεί
να επηρεάσει διάφορες πτυχές της συμπεριφοράς του συνδέσμου, ιδιαίτερα το προεπιλεγμένο σενάριο συνδέσμου. Μπορείτε να απαριθμήσετε
τις διαθέσιμες μιμήσεις με τις επιλογές --verbose ή -V. Εάν δεν χρησιμοποιηθεί η επιλογή -m και η
μεταβλητή περιβάλλοντος "LDEMULATION" δεν έχει οριστεί, η προεπιλεγμένη μίμηση εξαρτάται από τον τρόπο με τον οποίο
διαμορφώθηκε ο συνδέτης.

Κανονικά, ο συνδέτης θα χρησιμοποιεί από προεπιλογή την αποσυμπίεση συμβόλων. Ωστόσο, εάν η "COLLECT_NO_DEMANGLE" οριστεί στο περιβάλλον, τότε
θα χρησιμοποιεί από προεπιλογή τη μη αποσυμπίεση συμβόλων. Αυτή η μεταβλητή περιβάλλοντος χρησιμοποιείται με παρόμοιο τρόπο από το πρόγραμμα περιτύλιξης συνδέσμου "gcc". Η προεπιλογή μπορεί
να παρακαμφθεί με τις επιλογές --demangle και --no-demangle.

Εάν η επιλογή "--insert-timestamp" που είναι συγκεκριμένη για τα PE/COFF είναι ενεργή και η μεταβλητή περιβάλλοντος "SOURCE_DATE_EPOCH" είναι ορισμένη, τότε
η τιμή χρονικής σήμανσης σε αυτήν τη μεταβλητή θα εισαχθεί στην κεφαλίδα COFF αντί για την τρέχουσα ώρα.

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

ΔΕΙΤΕ ΕΠΙΣΗΣ
ar(1), nm(1), objcopy(1), objdump(1), readelf(1) και τις εγγραφές Info για τα binutils και ld.

ΠΝΕΥΜΑΤΙΚΑ ΔΙΚΑΙΩΜΑΤΑ
Πνευματικά δικαιώματα (c) 1991-2025 Free Software Foundation, Inc.

Επιτρέπεται η αντιγραφή, η διανομή και/ή η τροποποίηση αυτού του εγγράφου σύμφωνα με τους όρους της Άδειας GNU Free Documentation, έκδοση 1.3 ή οποιαδήποτε μεταγενέστερη έκδοση που δημοσιεύεται από την Free Software Foundation. με καμία Αναλλοίωτη Ενότητα, χωρίς Κείμενα Εξωφύλλου και χωρίς Κείμενα Οπίσθιου Εξωφύλλου.
Ένα αντίγραφο της άδειας περιλαμβάνεται στην ενότητα με τίτλο "Άδεια GNU Free Documentation".