NOME ld - Usando LD, il linker GNU SINOSSI ld opzioni objfile … DESCRIZIONE ld combina un numero di oggetti e file di archivio, trasferisce i loro dati e lega i riferimenti ai simboli. Di solito l'ultimo passo nella compilazione di un programma è l'esecuzioneld. ld accetta i file Linker Command Language scritti in un superset della sintassi del linguaggio di comando di Link Editor di AT & T, per fornire un controllo esplicito e totale sul processo di collegamento. Questa pagina man non descrive il linguaggio di comando; vedere illd voce in "info", o il manuale ld: il linker GNU, per i dettagli completi sulla lingua di comando e su altri aspetti del linker GNU. Questa versione dild usa le librerie BFD per scopi generali per operare su file oggetto. Questo permetteld leggere, combinare e scrivere file oggetto in molti formati diversi, ad esempio, COFF o "a.out". Diversi formati possono essere collegati tra loro per produrre qualsiasi tipo di file oggetto disponibile. A parte la sua flessibilità, il linker GNU è più utile di altri linker nel fornire informazioni diagnostiche. Molti linker abbandonano l'esecuzione immediatamente dopo aver riscontrato un errore; quando possibile,ld continua l'esecuzione, consentendo di identificare altri errori (o, in alcuni casi, di ottenere un file di output nonostante l'errore). Il linker GNUld è pensato per coprire una vasta gamma di situazioni e per essere il più compatibile possibile con altri linker. Di conseguenza, hai molte opzioni per controllare il suo comportamento. OPZIONI Il linker supporta una pletora di opzioni da riga di comando, ma nella pratica pratica alcuni di essi sono usati in un contesto particolare. Ad esempio, un uso frequente dild consiste nel collegare file di oggetti Unix standard su un sistema Unix standard supportato. Su un sistema di questo tipo, per collegare un file "ciao.o": Io faccio /lib/crt0.o ciao.o -lcQuesto diceld per produrre un file chiamato produzione come risultato del collegamento del file "/lib/crt0.o" con "hello.o" e della libreria "libc.a", che verrà dalle directory di ricerca standard. (Vedi la discussione del-l opzione sotto). Alcune delle opzioni della riga di comando perld può essere specificato in qualsiasi punto della riga di comando. Tuttavia, le opzioni che fanno riferimento a file, come ad esempio-l o-T, il file deve essere letto nel punto in cui appare l'opzione nella riga di comando, in relazione ai file oggetto e ad altre opzioni di file. La ripetizione di opzioni non file con un argomento diverso non avrà alcun effetto ulteriore, o sovrascrive precedenti occorrenze (quelle più a sinistra nella riga di comando) di tale opzione. Le opzioni che possono essere espressamente specificate più di una volta sono indicate nelle descrizioni seguenti. Gli argomenti non-option sono file oggetto o archivi che devono essere collegati insieme. Possono seguire, precedere o essere mescolati con le opzioni della riga di comando, tranne per il fatto che un argomento file oggetto non può essere inserito tra un'opzione e il suo argomento. Solitamente il linker viene richiamato con almeno un file oggetto, ma è possibile specificare altre forme di file di input binari usando-l, -Re il linguaggio di comando dello script. Se no i file di input binari sono tutti specificati, il linker non produce alcun output e invia il messaggioNessun file di input. Se il linker non è in grado di riconoscere il formato di un file oggetto, assumerà che si tratti di uno script linker. Uno script specificato in questo modo aumenta lo script linker principale utilizzato per il collegamento (sia lo script linker predefinito o quello specificato utilizzando-T). Questa funzione consente al linker di collegarsi a un file che sembra essere un oggetto o un archivio, ma in realtà definisce semplicemente alcuni valori di simbolo, o usa "INPUT" o "GROUP" per caricare altri oggetti. Nota che specificare uno script in questo modo aumenta semplicemente lo script del linker principale; utilizzare il-T opzione per sostituire completamente lo script linker predefinito. Per le opzioni i cui nomi sono una singola lettera, gli argomenti dell'opzione devono seguire la lettera dell'opzione senza spazi bianchi intermedi oppure essere forniti come argomenti separati immediatamente dopo l'opzione che li richiede. Per le opzioni i cui nomi sono più lettere, uno o due trattini possono precedere il nome dell'opzione; per esempio,-trace-simbolo e--trace-simbolo sono equivalenti. Nota: c'è un'eccezione a questa regola. Le opzioni di più lettere che iniziano con una "o" maiuscola possono essere precedute solo da due trattini. Questo per ridurre la confusione con il-o opzione. Quindi per esempio-omagic imposta il nome del file di output suMagia mentre--omagic imposta il flag NMAGIC sull'output. Gli argomenti per le opzioni a più lettere devono essere separati dal nome dell'opzione da un segno di uguale o essere dati come argomenti separati immediatamente dopo l'opzione che li richiede. Per esempio,--trace-symbol foo e--trace-symbol = foo sono equivalenti. Sono accettate abbreviazioni uniche dei nomi delle opzioni a più lettere. Nota: se il linker viene invocato indirettamente, tramite un driver del compilatore (esgcc) quindi tutte le opzioni della riga di comando del linker devono essere precedute da-Wl, (o qualunque cosa sia appropriata per il particolare driver del compilatore) in questo modo: gcc -Wl, - startgroup foo.o bar.o -Wl, - endgroupQuesto è importante, perché altrimenti il programma di compilazione del driver può rilasciare automaticamente le opzioni del linker, causando un collegamento errato. Ecco una tabella degli switch generici della riga di comando accettati dal linker GNU: -un parola chiave Questa opzione è supportata per la compatibilità con HP / UX. Il parola chiave l'argomento deve essere una delle stringhearchivio, condivisa, opredefinito. -aarchive è funzionalmente equivalente a-Bstatice le altre due parole chiave sono funzionalmente equivalenti a-Bdynamic. Questa opzione può essere utilizzata qualsiasi numero di volte. -UN architettura --architecture = architettura Nell'attuale versione dild, questa opzione è utile solo per la famiglia di architetture Intel 960. In ciòld configurazione, il architettura argomento identifica la particolare architettura della famiglia 960, abilitando alcune salvaguardie e modificando il percorso di ricerca della libreria di archivio. Versioni future dild può supportare funzionalità simili per altre famiglie di architetture. -b input-format --format = input-format ld può essere configurato per supportare più di un tipo di file oggetto. Se tuold è configurato in questo modo, è possibile utilizzare il-b opzione per specificare il formato binario per i file oggetto di input che seguono questa opzione sulla riga di comando. Anche quandold è configurato per supportare formati di oggetto alternativi, di solito non è necessario specificarlo, comeld deve essere configurato in modo da prevedere come formato di input predefinito il formato più comune su ciascuna macchina. input-format è una stringa di testo, il nome di un particolare formato supportato dalle librerie BFD. (Puoi elencare i formati binari disponibili conobjdump -i.) Si consiglia di utilizzare questa opzione se si collegano file con un formato binario insolito. Puoi anche usare-b per cambiare i formati in modo esplicito (quando si collegano i file oggetto di diversi formati), includendo-b input-format prima di ogni gruppo di file oggetto in un formato particolare. Il formato predefinito è preso dalla variabile di ambiente "GNUTARGET". Puoi anche definire il formato di input da uno script, usando il comando "TARGET"; -c MRI-commandfile --mri-script = MRI-commandfile Per compatibilità con i linker prodotti dalla risonanza magnetica,ld accetta i file di script scritti in un linguaggio di comando alternativo limitato, descritto nella sezione File di script compatibili con MRI della documentazione di GNU ld. Introdurre i file di script MRI con l'opzione-c; utilizzare il-T opzione per eseguire script di linker scritti nello scopo generaleld linguaggio di scripting. Se MRI-cmdfile non esiste,ldcerca nelle directory specificate da qualsiasi-L opzioni. -d -dc -dp Queste tre opzioni sono equivalenti; sono supportati più moduli per la compatibilità con altri linker. Assegnano spazio ai simboli comuni anche se viene specificato un file di output rilocabile (con-r). Il comando di script "FORCE_COMMON_ALLOCATION" ha lo stesso effetto. -e iscrizione --entry = iscrizione Uso iscrizione come il simbolo esplicito per l'esecuzione iniziale del programma, piuttosto che il punto di ingresso predefinito. Se non vi è alcun simbolo chiamato iscrizione , il linker proverà ad analizzare iscrizione come numero e usarlo come indirizzo di ingresso (il numero verrà interpretato nella base 10, è possibile utilizzare un interlinea0x per la base 16 o un leader0 per base 8). -E --export-dinamica Quando si crea un eseguibile collegato in modo dinamico, aggiungere tutti i simboli alla tabella dei simboli dinamici. La tabella dei simboli dinamici è l'insieme di simboli che sono visibili dagli oggetti dinamici in fase di esecuzione. Se non si utilizza questa opzione, la tabella dei simboli dinamici conterrà normalmente solo quei simboli a cui fa riferimento un oggetto dinamico menzionato nel collegamento. Se si utilizza "dlopen" per caricare un oggetto dinamico che deve fare riferimento ai simboli definiti dal programma, piuttosto che ad altri oggetti dinamici, sarà probabilmente necessario utilizzare questa opzione quando si collega il programma stesso. È inoltre possibile utilizzare lo script di versione per controllare quali simboli devono essere aggiunti alla tabella dei simboli dinamici se il formato di output lo supporta. Vedi la descrizione di--version-script in @ ref {version}. -EB Collega oggetti big-endian. Questo influenza il formato di output predefinito. -EL Collega oggetti little-endian. Questo influenza il formato di output predefinito. -f --ausiliario nome Quando si crea un oggetto condiviso ELF, impostare il campo DT_AUXILIARY interno sul nome specificato. Questo indica al linker dinamico che la tabella dei simboli dell'oggetto condiviso deve essere utilizzata come filtro ausiliario nella tabella dei simboli dell'oggetto condiviso nome . Se successivamente colleghi un programma a questo oggetto filtro, quando esegui il programma, il linker dinamico vedrà il campo DT_AUXILIARY. Se il linker dinamico risolve qualsiasi simbolo dall'oggetto filtro, prima controlla se esiste una definizione nell'oggetto condiviso nome . Se ce n'è uno, verrà usato al posto della definizione nell'oggetto filtro. L'oggetto condiviso nome non c'è bisogno di esistere Quindi l'oggetto condiviso nome può essere utilizzato per fornire un'implementazione alternativa di alcune funzioni, forse per il debug o per prestazioni specifiche della macchina. Questa opzione può essere specificata più di una volta. Le voci DT_AUXILIARY verranno create nell'ordine in cui compaiono sulla riga di comando. -F nome --filtro nome Quando si crea un oggetto condiviso ELF, impostare il campo DT_FILTER interno sul nome specificato. Questo dice al linker dinamico che la tabella dei simboli dell'oggetto condiviso che si sta creando dovrebbe essere usata come filtro sulla tabella dei simboli dell'oggetto condiviso nome . Se successivamente colleghi un programma a questo oggetto filtro, quando esegui il programma, il linker dinamico vedrà il campo DT_FILTER. Il linker dinamico risolverà i simboli secondo la tabella dei simboli dell'oggetto filtro normalmente, ma in realtà si collegherà alle definizioni trovate nell'oggetto condiviso nome . Pertanto, l'oggetto filtro può essere utilizzato per selezionare un sottoinsieme dei simboli forniti dall'oggetto nome . Alcuni linker più vecchi utilizzavano il-F opzione attraverso una toolchain di compilazione per specificare il formato di file oggetto per i file di oggetti di input e di output. Il linker GNU utilizza altri meccanismi per questo scopo: il-b, --formato, --oformat opzioni, il comando "TARGET" negli script del linker e la variabile di ambiente "GNUTARGET". Il linker GNU ignorerà il-F opzione quando non si crea un oggetto condiviso ELF. -fini nome Quando si crea un eseguibile ELF o un oggetto condiviso, chiamare NAME quando viene scaricato l'eseguibile o l'oggetto condiviso, impostando DT_FINI sull'indirizzo della funzione. Per impostazione predefinita, il linker utilizza "_fini" come funzione da chiamare. -g Ignorato. Previsto per compatibilità con altri strumenti. -G valore --gpsize = valore Imposta la dimensione massima degli oggetti da ottimizzare usando il registro GP su taglia . Questo è significativo solo per i formati di file oggetto come MIPS ECOFF che supporta la collocazione di oggetti grandi e piccoli in diverse sezioni. Questo viene ignorato per altri formati di file oggetto. -h nome -soname = nome Quando si crea un oggetto condiviso ELF, impostare il campo DT_SONAME interno sul nome specificato. Quando un eseguibile è collegato a un oggetto condiviso che ha un campo DT_SONAME, quando viene eseguito il file eseguibile il linker dinamico tenterà di caricare l'oggetto condiviso specificato dal campo DT_SONAME anziché utilizzare il nome del file assegnato al linker. -io Eseguire un collegamento incrementale (come l'opzione-r). -dentro nome Quando si crea un eseguibile ELF o un oggetto condiviso, chiamare NAME quando viene caricato l'eseguibile o l'oggetto condiviso, impostando DT_INIT sull'indirizzo della funzione. Per impostazione predefinita, il linker utilizza "_init" come funzione da chiamare. -l archivio --library = archivio Aggiungi il file di archivio archivio alla lista di file da collegare. Questa opzione può essere utilizzata qualsiasi numero di volte.ld cercherà il suo percorso-elenco per le occorrenze di "libarchive.a" per ogni archivio specificato. Sui sistemi che supportano le librerie condivise,ld può anche cercare librerie con estensioni diverse da ".a". In particolare, sui sistemi ELF e SunOS,ld cercherà una directory per una libreria con un'estensione di ".so" prima di cercarne una con un'estensione di ".a". Per convenzione, un'estensione ".so" indica una libreria condivisa. Il linker cercherà un archivio solo una volta, nel punto in cui è specificato sulla riga di comando. Se l'archivio definisce un simbolo che non era definito in qualche oggetto che appariva prima dell'archivio sulla riga di comando, il linker includerà i file appropriati dall'archivio. Tuttavia, un simbolo indefinito in un oggetto che appare in seguito sulla riga di comando non farà in modo che il linker cerchi di nuovo nell'archivio. Vedere il-( opzione per forzare il linker a cercare gli archivi più volte. È possibile elencare più volte lo stesso archivio sulla riga di comando. Questo tipo di ricerca di archivi è standard per i linker Unix. Tuttavia, se stai usandold onAIX, si noti che è diverso dal comportamento del linker AIX. -L searchdir --library-path = searchdir Aggiungi percorso searchdir alla lista di percorsi cheld cercherà le librerie di archivi eld script di controllo. Puoi usare questa opzione un numero qualsiasi di volte. Le directory vengono cercate nell'ordine in cui sono specificate sulla riga di comando. Le directory specificate nella riga di comando vengono ricercate prima delle directory predefinite. Tutti-L le opzioni si applicano a tutti-l opzioni, indipendentemente dall'ordine in cui appaiono le opzioni. Se searchdir inizia con "=", quindi "=" sarà sostituito da prefisso sysroot , un percorso specificato quando il linker è configurato. L'insieme predefinito di percorsi cercati (senza essere specificato con-L) dipende da quale modalità di emulazioneld sta usando, e in alcuni casi anche su come è stato configurato. I percorsi possono anche essere specificati in uno script di collegamento con il comando "SEARCH_DIR". Le directory specificate in questo modo vengono cercate nel punto in cui appare lo script del linker nella riga di comando. -m emulazione Emulare il emulazione linker. È possibile elencare le emulazioni disponibili con--verbose o-Vopzioni. Se la-m l'opzione non viene utilizzata, l'emulazione viene presa dalla variabile di ambiente "LDEMULATION", se questa è definita. Altrimenti, l'emulazione predefinita dipende da come è stato configurato il linker. -M --print-map Stampa una mappa dei collegamenti sullo standard output. Una mappa dei collegamenti fornisce informazioni sul collegamento, tra cui: * Dove file di oggetti e simboli sono mappati in memoria. * Come vengono assegnati i simboli comuni. * Tutti i membri dell'archivio inclusi nel link, con una menzione del simbolo che ha causato l'ingresso del membro dell'archivio. -n --nmagic Disattiva l'allineamento delle pagine delle sezioni e contrassegna l'uscita come "NMAGIC" se possibile. -N --omagic Impostare le sezioni di testo e dati per essere leggibili e scrivibili. Inoltre, non allineare la pagina al segmento dati e disabilitare il collegamento con le librerie condivise. Se il formato di output supporta i numeri magici in stile Unix, contrassegnare l'output come "OMAGIC". --no-omagic Questa opzione annulla la maggior parte degli effetti del-N opzione. Imposta la sezione di testo in modo che sia di sola lettura e impone che il segmento di dati sia allineato alla pagina. Nota: questa opzione non abilita il collegamento con le librerie condivise. Uso-Bdynamic per questo. -o produzione --output = produzione Uso produzione come il nome per il programma prodotto dald; se questa opzione non è specificata, il nome a.out è usato di default. Il comando di script "OUTPUT" può anche specificare il nome del file di output. -O livello Se livello è un valore numerico maggiore di zerold ottimizza l'output. Questo potrebbe richiedere molto più tempo e quindi probabilmente dovrebbe essere abilitato solo per il binario finale. -q --emit-relocs Lasciare sezioni e contenuti di rilocazione in file eseguibili completamente collegati. L'analisi post link e gli strumenti di ottimizzazione potrebbero necessitare di queste informazioni al fine di eseguire modifiche corrette dei file eseguibili. Ciò si traduce in eseguibili più grandi. Questa opzione è attualmente supportata solo su piattaforme ELF. -r --relocateable Genera output rilocabile --- cioè, genera un file di output che può a sua volta servire come inputld. Questo è spesso chiamato collegamento parziale . Come effetto collaterale, in ambienti che supportano numeri magici standard Unix, questa opzione imposta anche il numero magico del file di output su "OMAGIC". Se questa opzione non è specificata, viene prodotto un file assoluto. Quando si collegano i programmi C ++, questa opzione non lo farò risolvere i riferimenti ai costruttori; per farlo, usa-ur. Quando un file di input non ha lo stesso formato del file di output, il collegamento parziale è supportato solo se il file di input non contiene alcuna rilocazione. Diversi formati di output possono avere ulteriori restrizioni; per esempio alcuni formati basati su "a.out" non supportano affatto il collegamento parziale con file di input in altri formati. Questa opzione fa la stessa cosa di-io. -R nome del file --just-simboli = nome del file Leggi i nomi dei simboli e i loro indirizzi da nome del file , ma non trasferirlo o includerlo nell'output. Ciò consente al file di output di riferirsi simbolicamente alle posizioni assolute di memoria definite in altri programmi. Puoi usare questa opzione più di una volta. Per compatibilità con altri linker ELF, se il-R l'opzione è seguita da un nome di directory, piuttosto che da un nome di file, viene trattato come-rpath opzione. -S --strip-all Ometti tutte le informazioni sui simboli dal file di output. -S --strip-debug Ometti le informazioni sui simboli del debugger (ma non tutti i simboli) dal file di output. -t --traccia Stampa i nomi dei file di input comeld li elabora. -T scriptfile --script = scriptfile Uso scriptfile come lo script del linker. Questo script sostituisceldlo script linker predefinito (piuttosto che aggiungerlo), quindi commandfile deve specificare tutto il necessario per descrivere il file di output. Se scriptfile non esiste nella directory corrente, "ld" lo cerca nelle directory specificate da qualsiasi precedente-L opzioni. multiplo-T le opzioni si accumulano. -u simbolo --undefined = simbolo Vigore simbolo da inserire nel file di output come simbolo indefinito. Ciò potrebbe, ad esempio, innescare il collegamento di moduli aggiuntivi da librerie standard.-u può essere ripetuto con diversi argomenti di opzione per inserire ulteriori simboli non definiti. Questa opzione è equivalente al comando di script linker "EXTERN". -ur Per qualsiasi cosa diversa dai programmi C ++, questa opzione è equivalente a-r: genera un output rilocabile --- cioè un file di output che può a sua volta servire come inputld. Quando si collegano i programmi C ++,-ur fa risolvere i riferimenti ai costruttori, a differenza di-r. Non funziona da usare-ur su file a cui erano collegati-ur; una volta costruita la tabella del costruttore, non può essere aggiunta. Uso-ur solo per l'ultimo collegamento parziale, e-r per gli altri. --unique = SEZIONE Crea una sezione di output separata per ogni corrispondenza della sezione di input SEZIONE , o se il carattere jolly opzionale SEZIONE argomento mancante, per ogni sezione di input orfana. Una sezione orfana è una non specificatamente menzionata in uno script linker. È possibile utilizzare questa opzione più volte sulla riga di comando; Impedisce il normale accorpamento delle sezioni di input con lo stesso nome, annullando le assegnazioni delle sezioni di output in uno script del linker. -v --versione -V Mostra il numero di versione perld. Il-V opzione elenca anche le emulazioni supportate. -X --discard-all Elimina tutti i simboli locali. -X --discard-locali Elimina tutti i simboli locali temporanei. Per la maggior parte degli obiettivi, questo è tutti i simboli locali di cui iniziano i nomiL. -y simbolo --trace-symbol = simbolo Stampa il nome di ciascun file collegato in cui simbolo appare. Questa opzione può essere data un numero qualsiasi di volte. Su molti sistemi è necessario anteporre un carattere di sottolineatura. Questa opzione è utile quando hai un simbolo non definito nel tuo collegamento ma non sai da dove proviene il riferimento. -Y sentiero Inserisci sentiero al percorso di ricerca della libreria predefinito. Questa opzione esiste per la compatibilità con Solaris. -z parola chiave Le parole chiave riconosciute sono "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" e "nocopyreloc" ". Le altre parole chiave sono ignorate per la compatibilità con Solaris. "initfirst" contrassegna l'oggetto da inizializzare prima in fase di esecuzione prima di qualsiasi altro oggetto."interporre" contrassegna l'oggetto che la sua tabella dei simboli si interpone prima di tutti i simboli ma dell'eseguibile principale. "loadfltr" contrassegna l'oggetto che i suoi file vengono elaborati immediatamente in fase di esecuzione. "nodefaultlib" contrassegna l'oggetto che la ricerca delle dipendenze di questo oggetto ignorerà qualsiasi percorso di ricerca di libreria predefinito. "nodelete" indica che l'oggetto non deve essere scaricato in fase di runtime. "nodlopen" segna l'oggetto non disponibile per "dlopen". "nodump" indica che l'oggetto non può essere scaricato da "dldump". "now" contrassegna l'oggetto con il binding runtime non pigro. "origin" indica che l'oggetto può contenere $ ORIGIN. "defs" non consente simboli indefiniti. "muldefs" consente più definizioni. "combreloc" combina più sezioni di reloc e le ordina per rendere possibile la memorizzazione dinamica del caching di simboli. "nocombreloc" disabilita la combinazione di più sezioni reloc. "nocopyreloc" disabilita la produzione di riloc di copia. -( archivio -) --start-gruppo archivio --end-gruppo Il archivio dovrebbe essere un elenco di file di archivio. Possono essere nomi di file espliciti o-lopzioni. Gli archivi specificati vengono cercati ripetutamente fino a quando non vengono creati nuovi riferimenti non definiti. Normalmente, un archivio viene cercato una sola volta nell'ordine in cui è specificato sulla riga di comando. Se un simbolo in quell'archivio è necessario per risolvere un simbolo indefinito a cui fa riferimento un oggetto in un archivio che appare in seguito sulla riga di comando, il linker non sarebbe in grado di risolvere quel riferimento. Raggruppando gli archivi, tutti vengono cercati ripetutamente finché tutti i possibili riferimenti non vengono risolti. L'utilizzo di questa opzione ha un costo significativo delle prestazioni. È preferibile utilizzarlo solo quando ci sono riferimenti circolari inevitabili tra due o più archivi. --accept-unknown-input-arco --no-accetta-sconosciuto-input-arch Indica al linker di accettare file di input la cui architettura non può essere riconosciuta. Il presupposto è che l'utente sappia cosa sta facendo e vuole deliberatamente collegarsi a questi file di input sconosciuti. Questo era il comportamento predefinito del linker, prima della versione 2.14. Il comportamento predefinito dalla versione 2.14 in poi è di rifiutare tali file di input, e quindi il file--accept-unknown-input-arco è stata aggiunta l'opzione per ripristinare il vecchio comportamento. -affermare parola chiave Questa opzione viene ignorata per la compatibilità con SunOS. -Bdynamic -dy -call_shared Collegamento con librerie dinamiche. Ciò è significativo solo sulle piattaforme per le quali sono supportate le librerie condivise. Questa opzione è normalmente l'impostazione predefinita su tali piattaforme. Le diverse varianti di questa opzione sono compatibili con vari sistemi. È possibile utilizzare questa opzione più volte sulla riga di comando: influisce sulla ricerca della libreria-l opzioni che lo seguono -Bgroup Imposta il flag "DF_1_GROUP" nella voce "DT_FLAGS_1" nella sezione dinamica. Ciò fa sì che il linker di runtime gestisca le ricerche in questo oggetto e le sue dipendenze vengano eseguite solo all'interno del gruppo.--no-undefined è implicito. Questa opzione è significativa solo sulle piattaforme ELF che supportano le librerie condivise. -Bstatic -dn -non_shared -statico Non collegare alle librerie condivise. Ciò è significativo solo sulle piattaforme per le quali sono supportate le librerie condivise. Le diverse varianti di questa opzione sono compatibili con vari sistemi. È possibile utilizzare questa opzione più volte sulla riga di comando: influisce sulla ricerca della libreria-l opzioni che lo seguono -Bsymbolic Quando si crea una libreria condivisa, associare riferimenti a simboli globali alla definizione all'interno della libreria condivisa, se presente. Normalmente, è possibile che un programma collegato a una libreria condivisa sovrascriva la definizione all'interno della libreria condivisa. Questa opzione è significativa solo su ELFplatforms che supportano le librerie condivise. --check-sezioni --no-check-sezioni Chiede il linker non per controllare gli indirizzi di sezione dopo che sono stati assegnati per vedere se ci sono sovrapposizioni. Normalmente il linker eseguirà questo controllo e, se trova delle sovrapposizioni, produrrà messaggi di errore adeguati. Il linker è a conoscenza e tiene conto delle sezioni nelle sovrapposizioni. Il comportamento predefinito può essere ripristinato utilizzando l'opzione della riga di comando--check-sezioni. --cref Emettere una tabella di riferimenti incrociati. Se viene generato un file di mappa del linker, la tabella dei riferimenti incrociati viene stampata sul file della mappa. In caso contrario, viene stampato sull'output standard. Il formato della tabella è intenzionalmente semplice, in modo che possa essere facilmente elaborato da uno script se necessario. I simboli sono stampati, ordinati per nome. Per ogni simbolo, viene fornito un elenco di nomi di file. Se il simbolo è definito, il primo file elencato è la posizione della definizione. I file rimanenti contengono riferimenti al simbolo. --no-definire-common Questa opzione inibisce l'assegnazione degli indirizzi ai simboli comuni. Il comando di script "INHIBIT_COMMON_ALLOCATION" ha lo stesso effetto. Il--no-definire-common l'opzione consente di disaccoppiare la decisione di assegnare indirizzi ai simboli comuni dalla scelta del tipo di file di output; in caso contrario, un tipo di output non rilocabile forza l'assegnazione degli indirizzi ai simboli comuni. utilizzando--no-definire-common consente ai simboli comuni a cui viene fatto riferimento da una libreria condivisa di essere assegnati indirizzi solo nel programma principale. Ciò elimina lo spazio duplicato inutilizzato nella libreria condivisa e impedisce inoltre qualsiasi possibile confusione sulla risoluzione del duplicato sbagliato quando vi sono molti moduli dinamici con percorsi di ricerca specializzati per la risoluzione dei simboli di runtime. --defsym simbolo = espressione Creare un simbolo globale nel file di output, contenente l'indirizzo assoluto dato da espressione . È possibile utilizzare questa opzione tutte le volte necessarie per definire più simboli nella riga di comando. Una forma limitata di aritmetica è supportata per il espressione in questo contesto: puoi dare una costante esadecimale o il nome di un simbolo esistente, oppure usare "+" e "-" per aggiungere o sottrarre costanti o simboli esadecimali. Se hai bisogno di espressioni più elaborate, considera l'utilizzo della lingua del comando linker da uno script. Nota: non dovrebbe esserci spazio bianco tra simbolo , il segno di uguale (``=''), e espressione . --demangle = stile --no-demangle Queste opzioni controllano se demag giare i nomi dei simboli nei messaggi di errore e in altri output. Quando si dice al linker di demagialla, tenta di presentare i nomi dei simboli in modo leggibile: toglie i caratteri di sottolineatura iniziali se sono usati dal formato file oggetto e converte i nomi dei simboli storpiati in C ++ in nomi leggibili dall'utente. Diversi compilatori hanno stili di mangling diversi. L'argomento facoltativo di stile demangling può essere utilizzato per scegliere uno stile di demangling appropriato per il compilatore. Il linker scomparirà per impostazione predefinita a meno che la variabile di ambienteCOLLECT_NO_DEMANGLE è impostato. Queste opzioni possono essere utilizzate per sovrascrivere il valore predefinito. --dynamic-linker file Imposta il nome del linker dinamico. Ciò è significativo solo quando si generano eseguibili ELF collegati dinamicamente. Il linker dinamico predefinito è normalmente corretto; non usarlo a meno che tu non sappia cosa stai facendo. --embedded-relocs Questa opzione è significativa solo quando si collega il codice PIC MIPS incorporato, generato dall'opzione -membedded-pic al compilatore e assemblatore GNU. Fa sì che il linker crei una tabella che può essere utilizzata in fase di runtime per riposizionare qualsiasi dato inizializzato staticamente ai valori del puntatore. Vedere il codice in testsuite / ld-empic per i dettagli. --fatal-warnings Tratta tutti gli avvisi come errori. --force-exe-suffisso Assicurati che un file di output abbia un suffisso .exe. Se un file di output completamente collegato con successo non ha un suffisso ".exe" o ".dll", questa opzione forza il linker a copiare il file di output su uno con lo stesso nome con un suffisso ".exe". Questa opzione è utile quando si usano makefile Unix non modificati su un host Microsoft Windows, poiché alcune versioni di Windows non eseguiranno un'immagine a meno che non finisca con un suffisso ".exe". --no-GC-sezioni --gc-sezioni Abilita la garbage collection delle sezioni di input non utilizzate. Viene ignorato sugli obiettivi che non supportano questa opzione. Questa opzione non è compatibile con-r, né dovrebbe essere usato con collegamenti dinamici. Il comportamento predefinito (di non eseguire questo Garbage Collection) può essere ripristinato specificando--no-GC-sezioni sulla riga di comando. --Aiuto Stampa un riepilogo delle opzioni della riga di comando sullo standard output ed esci. --target-aiuto Stampa un riepilogo di tutte le opzioni specifiche del target sullo standard output e exit. -Carta geografica mapfile Stampa una mappa dei collegamenti al file mapfile . Vedi la descrizione del-M opzione, sopra. --no-keep-memory ld normalmente ottimizza la velocità di utilizzo della memoria memorizzando nella cache le tabelle dei simboli dei file di input. Questa opzione diceld per ottimizzare invece l'utilizzo della memoria, rileggendo le tabelle dei simboli secondo necessità. Questo potrebbe essere richiesto seld esaurisce lo spazio di memoria durante il collegamento di un file eseguibile di grandi dimensioni. --no-undefined -z defs Normalmente quando si crea una libreria condivisa non simbolica, i simboli non definiti sono consentiti e lasciati risolvere dal caricatore di runtime. Queste opzioni non consentono questi simboli indefiniti. --allow-multiple-definizione -z muldefs Normalmente quando un simbolo viene definito più volte, il linker segnala un errore fatale. Queste opzioni consentono più definizioni e verrà utilizzata la prima definizione. --allow-shlib-indefinita Consenti simboli non definiti negli oggetti condivisi anche quando è impostato --no-undefined. Il risultato netto sarà che i simboli indefiniti negli oggetti normali causeranno comunque un errore, ma i simboli non definiti negli oggetti condivisi verranno ignorati. L'implementazione di no_undefined fa presupporre che il linker di runtime possa soffocare su simboli non definiti. Tuttavia esiste almeno un sistema (BeOS) in cui i simboli indefiniti nelle librerie condivise sono normali poiché il kernel li aggiusta in fase di caricamento per selezionare quale funzione sia più appropriata per l'architettura corrente. OSSIA selezionare dinamicamente una funzione memset appropriata. Apparentemente è anche normale che le librerie condivise HPPA abbiano simboli non definiti. --no-undefined-versione Normalmente quando un simbolo ha una versione indefinita, il linker lo ignorerà. Questa opzione non consente i simboli con la versione non definita e verrà emesso un errore fatale. --no-avvertire mismatch Normalmenteld darà un errore se si tenta di collegare insieme file di input non corrispondenti per qualche motivo, forse perché sono stati compilati per processori diversi o per endianness diversi. Questa opzione diceld che dovrebbe consentire in silenzio tali possibili errori. Questa opzione deve essere utilizzata con cautela, nei casi in cui è stata presa qualche azione speciale che garantisce che gli errori del linker siano inappropriati. --no-whole-archive Disattiva l'effetto del--whole-archivio opzione per i file di archivio successivi. --noinhibit-exec Conservare il file di output eseguibile ogni volta che è ancora utilizzabile.Normalmente, il linker non produrrà un file di output se rileva errori durante il processo di collegamento; esce senza scrivere un file di output quando si verifica un errore di sorta. -nostdlib Cerca solo le directory della libreria specificate esplicitamente nella riga di comando. Le directory della libreria specificate negli script del linker (inclusi gli script del linker specificati nella riga di comando) vengono ignorate. --oformat formato di output ld può essere configurato per supportare più di un tipo di file oggetto. Se tuold è configurato in questo modo, è possibile utilizzare il--oformat opzione per specificare il formato binario per il file oggetto di output. Anche quandold è configurato per supportare formati di oggetto alternativi, di solito non è necessario specificarlo, comeld deve essere configurato per produrre come formato di output predefinito il formato più comune su ciascuna macchina. formato di output è una stringa di testo, il nome di un particolare formato supportato dalle librerie BFD. (Puoi elencare i formati binari disponibili conobjdump -i.) Il comando di script "OUTPUT_FORMAT" può anche specificare il formato di output, ma questa opzione lo sovrascrive. -qmagic Questa opzione è ignorata per la compatibilità con Linux. -Qy Questa opzione è ignorata per la compatibilità SVR4. --rilassare Un'opzione con effetti dipendenti dalla macchina. Questa opzione è supportata solo su alcuni target. Su alcune piattaforme, il--rilassare opzione esegue ottimizzazioni globali che diventano possibili quando il linker risolve l'indirizzamento nel programma, come ad esempio il ripristino delle modalità di indirizzo e la sintesi di nuove istruzioni nel file oggetto di output. Su alcune piattaforme queste ottimizzazioni globali del tempo di collegamento possono rendere impossibile il debugging simbolico dell'eseguibile risultante. Questo è noto per la famiglia di processori Matsushita MN10200 e MN10300. Su piattaforme in cui questo non è supportato,--rilassare è accettato, ma ignorato. --retain-simboli-lima nome del file conservare solo i simboli elencati nel file nome del file , scartando tutti gli altri. nome del file è semplicemente un file piatto, con un nome di simbolo per riga. Questa opzione è particolarmente utile in ambienti (come VxWorks) in cui una grande tabella di simboli globale viene accumulata gradualmente, per conservare la memoria di runtime. --retain-simboli-lima fa non scartare simboli non definiti o simboli necessari per le delocalizzazioni. Puoi solo specificare--retain-simboli-lima una volta nella riga di comando. Sostituisce-S e-S. -rpath dir Aggiungi una directory al percorso di ricerca della libreria di runtime. Questo è usato quando si collega un ELFexecutable con oggetti condivisi. Tutti-rpath gli argomenti sono concatenati e passati al linker di runtime, che li usa per localizzare oggetti condivisi in fase di runtime. Il-rpath l'opzione viene anche utilizzata quando si localizzano oggetti condivisi che sono necessari per oggetti condivisi esplicitamente inclusi nel collegamento; vedere la descrizione del-rpath-link opzione. Se-rpath non viene utilizzato quando si collega un eseguibile ELF, verrà utilizzato il contenuto della variabile di ambiente "LD_RUN_PATH" se è definito. Il-rpath l'opzione può essere utilizzata anche su SunOS. Per impostazione predefinita, su SunOS, il linker formerà una patch di ricerca runtime su tutto il-L opzioni è dato. Se una-rpath viene utilizzata l'opzione, il percorso di ricerca del runtime verrà creato utilizzando esclusivamente il-rpath opzioni, ignorando il-Lopzioni. Questo può essere utile quando si usa gcc, che ne aggiunge molti-L opzioni che possono essere su file system montati su NFS. Per compatibilità con altri linker ELF, se il-R l'opzione è seguita da un nome di directory, piuttosto che da un nome di file, viene trattato come-rpath opzione. -rpath-link DIR Quando si utilizza ELF o SunOS, una libreria condivisa potrebbe averne bisogno di un'altra. Ciò accade quando un collegamento "ld -shared" include una libreria condivisa come uno dei file di input. Quando il linker incontra una tale dipendenza quando esegue un collegamento non condiviso e non rilocabile, tenterà automaticamente di individuare la libreria condivisa richiesta e includerla nel collegamento, se non è inclusa esplicitamente. In tal caso, il-rpath-link opzione specifica il primo set di directory da cercare. Il-rpath-link l'opzione può specificare una sequenza di nomi di directory specificando una lista di nomi separati da due punti, o apparendo più volte. Questa opzione deve essere utilizzata con cautela poiché sostituisce il percorso di ricerca che potrebbe essere stato compilato in una libreria condivisa. In tal caso è possibile utilizzare involontariamente un percorso di ricerca diverso da quello che farebbe il linker di runtime. Il linker utilizza i seguenti percorsi di ricerca per individuare le librerie condivise richieste. 1. Qualsiasi directory specificata da-rpath-link opzioni. 2. Qualsiasi directory specificata da-rpath opzioni. La differenza tra-rpath e-rpath-link è quella directory specificata da-rpath le opzioni sono incluse nell'eseguibile e utilizzate al runtime, mentre il-rpath-link l'opzione è efficace solo al momento del collegamento. È solo per il linker nativo. 3. Su un sistema ELF, se il-rpath e le opzioni "rpath-link" non sono state utilizzate, cercare il contenuto della variabile di ambiente "LD_RUN_PATH". È solo per il linker nativo. 4. Su SunOS, se il-rpath opzione non è stata utilizzata, cercare qualsiasi directory specificata utilizzando-L opzioni. 5. Per un linker nativo, il contenuto della variabile di ambiente "LD_LIBRARY_PATH". 6. Per un linker ELF nativo, le directory in "DT_RUNPATH" o "DT_RPATH" di una libreria condivisa vengono cercate per le librerie condivise necessarie.Le voci "DT_RPATH" vengono ignorate se esistono voci "DT_RUNPATH". 7. Le directory predefinite, normalmente / lib e / Usr / lib . 8. Per un linker nativo su un sistema ELF, se il file /etc/ld.so.conf esiste, l'elenco delle directory trovate in quel file. Se la libreria condivisa richiesta non viene trovata, il linker emetterà un avviso e continuerà con il collegamento. -condivisa -Bshareable Crea una libreria condivisa. Attualmente è supportato solo su piattaforme ELF, XCOFF e SunOS. Su SunOS, il linker creerà automaticamente una libreria condivisa se il-e l'opzione non viene utilizzata e nel collegamento sono presenti simboli non definiti. --sort-comuni Questa opzione diceld per ordinare i simboli comuni per dimensione quando li colloca nelle sezioni di output appropriate. Prima vengono tutti i simboli a un byte, poi tutti i due byte, poi tutti i quattro byte, e poi tutto il resto. Questo serve per evitare spazi tra i simboli a causa di vincoli di allineamento. --split-by-file taglia Simile a--split-by-reloc ma crea una nuova sezione di output per ogni file di input quando taglia è raggiunto. taglia il valore predefinito è 1 se non specificato. --split-by-reloc contare Cerca di creare sezioni aggiuntive nel file di output in modo che nessuna singola sezione di output nel file contenga più di contare delocalizzazioni. Questo è utile quando si generano enormi file rilocabili da scaricare in determinati kernel in tempo reale con il formato file oggetto COFF; poiché COFFcannot rappresenta più di 65535 riposizionamenti in una singola sezione. Si noti che questo non funzionerà con i formati di file oggetto che non supportano le sezioni arbitrarie. Il linker non dividerà le singole sezioni di input per la ridistribuzione, quindi se una singola sezione di input contiene più di contare rilocazioni una sezione di output conterrà quel numero di riposizionamenti. contare il valore predefinito è 32768. --stats Calcola e mostra le statistiche sul funzionamento del linker, come il tempo di esecuzione e l'utilizzo della memoria. --traditional-format Per alcuni obiettivi, l'output dild è diverso in qualche modo dall'output di qualche linker esistente. Questo switch richiedeld per usare invece il formato tradizionale. Ad esempio, su SunOS,ld combina voci duplicate nella tabella delle stringhe di simboli. Ciò può ridurre la dimensione di un file di output con informazioni di debug complete di oltre il 30 percento. Sfortunatamente, il programma "dbx" di SunOS non può leggere il programma risultante ("gdb" non ha problemi). Il--traditional-format interruttore diceld non combinare voci duplicate. --section-start nome_sezione = org Individua una sezione nel file di output all'indirizzo assoluto indicato da org . È possibile utilizzare questa opzione tutte le volte necessarie per individuare più sezioni nella riga di comando. org deve essere un singolo numero esadecimale; per compatibilità con altri linker, puoi omettere il leader0x solitamente associato a valori esadecimali. Nota: non dovrebbe esserci spazio bianco tra nome_sezione , il segno di uguale (``=''), e org . -Tbss org -Tdata org -Ttext org Uso org come indirizzo iniziale per --- rispettivamente --- il segmento "bss", "data" o "testo" del file di output. org deve essere un singolo numero esadecimale; per compatibilità con altri linker, puoi omettere il leader0x solitamente associato a valori esadecimali. --dll-verbose --verbose Mostra il numero di versione perld ed elenca le emulazioni del linker supportate. Mostra quali file di input possono e non possono essere aperti. Mostra lo script linker utilizzato dal linker. --version-script = Versione-scriptfile Specificare il nome di uno script di versione per il linker. Questo viene in genere utilizzato durante la creazione di librerie condivise per specificare ulteriori informazioni sulla gerarchia della versione per la libreria che si sta creando. Questa opzione è significativa solo sulle piattaforme ELF che supportano le librerie condivise. --warn-comuni Avvisa quando un simbolo comune è combinato con un altro simbolo comune o con una definizione di simbolo. I linker Unix consentono questa pratica un po 'trascurata, ma i linker su altri sistemi operativi no. Questa opzione ti consente di trovare potenziali problemi combinando simboli globali. Sfortunatamente, alcune librerie C usano questa pratica, quindi potresti ricevere alcuni avvertimenti sui simboli nelle librerie e nei tuoi programmi. Esistono tre tipi di simboli globali, qui illustrati dagli esempi C: int i = 1; Una definizione, che va nella sezione di dati inizializzata del file di output. extern int i; Un riferimento non definito, che non alloca lo spazio. Ci deve essere una definizione o un simbolo comune per la variabile da qualche parte. int i; Un simbolo comune Se ci sono solo (uno o più) simboli comuni per una variabile, essa va nell'area dati non inizializzata del file di output. Il linker unisce più simboli comuni per la stessa variabile in un singolo simbolo. Se sono di dimensioni diverse, raccolgono la dimensione maggiore. Il linker trasforma un simbolo comune in una dichiarazione, se esiste una definizione della stessa variabile. Il--warn-comuni l'opzione può produrre cinque tipi di avvertimenti. Ogni avviso consiste in una coppia di linee: la prima descrive il simbolo appena incontrato e la seconda descrive il simbolo precedente incontrato con lo stesso nome. Uno o entrambi i simboli saranno un simbolo comune. 1. Trasformare un simbolo comune in un riferimento, perché esiste già una definizione per il simbolo. (): avviso: comune di `'sovrascritto per definizione (): avviso: definito qui2. Trasformare un simbolo comune in un riferimento, poiché viene rilevata una definizione successiva per il simbolo. È lo stesso del caso precedente, con la differenza che i simboli si incontrano in un ordine diverso. (): warning: definizione di `'prevalente comune (): attenzione: il comune è qui3. Unione di un simbolo comune con un simbolo comune della stessa dimensione precedente. (): avviso: multiplo comune di `' (): avviso: il precedente comune è qui4. Unione di un simbolo comune con un simbolo comune precedente più grande. (): avviso: comune di `'scavalcato da un più ampio comune (): avviso: il più grande comune è qui5. Unione di un simbolo comune con un precedente simbolo comune più piccolo. È lo stesso del caso precedente, con la differenza che i simboli si incontrano in un ordine diverso. (): avviso: comune di `'prevalente piccolo comune (): avviso: il comune più piccolo è qui--warn-costruttori Avvisa se vengono utilizzati costruttori globali. Questo è utile solo per alcuni formati di file oggetto. Per formati come COFF o ELF, il linker non può rilevare l'uso di costruttori globali. --warn-multiple-gp Avvisa se sono richiesti più valori globali del puntatore nel file di output. Questo è significativo solo per alcuni processori, come l'Alpha. In particolare, alcuni processori inseriscono costanti di grande valore in una sezione speciale. Un registro speciale (il puntatore globale) punta al centro di questa sezione, in modo che le costanti possano essere caricate in modo efficiente tramite una modalità di indirizzamento relativa del registro di base. Poiché l'offset nella modalità relativa del registro di base è fisso e relativamente piccolo (ad esempio 16 bit), ciò limita la dimensione massima del pool costante. Pertanto, nei programmi di grandi dimensioni, è spesso necessario utilizzare più valori di puntatori globali per poter indirizzare tutte le possibili costanti. Questa opzione fa sì che venga emesso un avviso ogni volta che si verifica questo caso. --warn-once Solo avvertire una volta per ogni simbolo indefinito, piuttosto che una volta per modulo che si riferisce ad esso. --warn-section-allineamento Avverti se l'indirizzo di una sezione di output è cambiato a causa dell'allineamento. In genere, l'allineamento verrà impostato da una sezione di input. L'indirizzo verrà modificato solo se non specificato esplicitamente; cioè, se il comando "SECTIONS" non specifica un indirizzo iniziale per la sezione. --whole-archivio Per ogni archivio menzionato sulla riga di comando dopo il--whole-archivio opzione, includere ogni file oggetto nell'archivio nel collegamento, piuttosto che cercare nell'archivio i file oggetto richiesti. Questo è normalmente usato per trasformare un file di archivio in una libreria condivisa, forzando ogni oggetto ad essere incluso nella libreria condivisa risultante. Questa opzione può essere utilizzata più di una volta. Due note quando si utilizza questa opzione da gcc: in primo luogo, gcc non conosce questa opzione, quindi è necessario utilizzare-Wl, -Tutto-archivio. In secondo luogo, non dimenticare di usare-Wl, -no-tutta-archiviodopo la tua lista di archivi, perché gcc aggiungerà il proprio elenco di archivi al tuo link e potresti non volere che questo flag influenzi anche quelli. --wrap simbolo Utilizzare una funzione wrapper per simbolo . Qualsiasi riferimento indefinito a simbolo sarà risolto in "__ wrap_symbol". Verrà risolto qualsiasi riferimento indefinito a "__real_symbol" simbolo . Questo può essere usato per fornire un wrapper per una funzione di sistema. La funzione wrapper dovrebbe essere chiamata "__wrap_symbol". Se desidera chiamare la funzione di sistema, dovrebbe chiamare "__ real_symbol". Ecco un esempio banale: void * __wrap_malloc (int c) {printf ("malloc chiamato con% ld n", c); return __real_malloc (c); }Se si collega altro codice con questo file utilizzando- avvolgere malloc, quindi tutte le chiamate a "malloc" chiameranno invece la funzione "__wrap_malloc". La chiamata a "__real_malloc" in "__wrap_malloc" chiamerà la vera funzione "malloc". Si potrebbe desiderare di fornire anche una funzione "__real_malloc", in modo che i collegamenti senza il--wrap l'opzione avrà successo Se lo fai, non dovresti mettere la definizione di "__ real_malloc" nello stesso file di "__wrap_malloc"; se lo fai, l'assemblatore può risolvere la chiamata prima che il linker abbia la possibilità di inserirlo in "malloc". --enable-nuovi-dtags --disable-nuovi-dtags Questo linker può creare i nuovi tag dinamici in ELF. Ma i vecchi sistemi ELF potrebbero non capirli. Se si specifica--enable-nuovi-dtags, i tag dinamici verranno creati secondo necessità. Se si specifica--disable-nuovi-dtags, non verranno creati nuovi tag dinamici. Per impostazione predefinita, i nuovi tag dinamici non vengono creati. Si noti che queste opzioni sono disponibili solo per i sistemiELF. Il linker i386 PE supporta il-condivisa opzione, che fa sì che l'output sia una libreria (DLL) collegata dinamicamente anziché un eseguibile normale. Dovresti nominare l'output "* .dll" quando usi questa opzione. Inoltre, il linker supporta pienamente i file standard "* .def", che possono essere s