GNU/Linux >> Linux Esercitazione >  >> Linux

Come rimuovere l'avviso:link.res contiene sezioni di output; hai dimenticato -T?

Non è un bug perché ld si comporta come la sua specifica. La pagina man di ld 2.28 recita:

Se il linker non è in grado di riconoscere il formato di un file oggetto, presumerà che si tratti di uno script del linker. Uno script specificato in questo modo aumenta lo script del linker principale utilizzato per il collegamento (lo script del 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 simboli o utilizza "INPUT" o "GROUP" per caricare altri oggetti. Specificare uno script in questo modo aumenta semplicemente lo script del linker principale, con i comandi aggiuntivi posizionati dopo lo script principale; usa l'opzione -T per sostituire interamente lo script del linker predefinito, ma nota l'effetto del comando "INSERT".

TL; DR ☺. In poche parole:nella maggior parte dei casi gli utenti non sono a conoscenza dello script del linker che stanno utilizzando perché uno "script principale" (=script predefinito ) è fornito dalla catena degli strumenti. Lo script principale fa pesantemente riferimento agli intrinseci delle sezioni generate dal compilatore e devi imparare le corde per cambiarlo. La maggior parte degli utenti no.

L'approccio comune per fornire il proprio script è tramite il -T opzione. In questo modo lo script del linker principale viene ignorato e il tuo script assume il controllo del collegamento. Ma devi scrivere tutto da zero.

Se vuoi solo aggiungere una funzionalità minore, puoi scrivere le tue specifiche in un file e aggiungere il nome del file alla riga di comando di ld (o gcc / g++) senza il -T opzione. In questo modo lo script del linker principale fa ancora il lavoro principale ma il tuo file lo aumenta. Se utilizzi questo approccio, ricevi il messaggio dell'intestazione di questo thread per informarti che potresti aver fornito un oggetto danneggiato involontariamente.

La fonte di questa confusione è che non c'è modo di specificare il ruolo del file aggiuntivo. Questo potrebbe essere facilmente risolto aggiungendo un'altra opzione a ld proprio come il -dT opzione per "d efault scriptfile”:introduce un -sT opzione per "s file di script aggiuntivo”.


È un bug in alcune versioni di LD. Ignoralo per ora o controlla se la tua distribuzione ha un aggiornamento per il tuo LD. (pacchetto binutils)

http://www.freepascal.org/faq.var#unix-ld219


Linux
  1. Come si esegue uno script all'accesso in *nix?

  2. Come rimuovere questo avviso:secondo parametro di "va_start" non l'ultimo argomento nominato?

  3. Come rimuovere un collegamento simbolico a una directory?

  4. Come si rimuove/disabilita il processo di Evolution Data Server

  5. Come puoi vedere l'effettivo hard link di ls?

Linux:come eseguire uno script attivato da un input del joystick?

Come sapere se l'output di un comando o di uno script di shell è Stdout o Stderr?

Script Bash:come assegnare ogni riga di output di comando ai valori in un array?

Come vedere l'output di uno script PHP?

Come ripulire l'output del comando 'script' di Linux

Come determini se sei su un sistema Linux o BSD all'interno di uno script?