GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So entfernen Sie die Warnung:link.res enthält Ausgabeabschnitte; hast du vergessen -T?

Es ist kein Fehler, weil ld verhält sich wie seine Spezifikation. Die Manpage von ld 2.28 liest:

Wenn der Linker das Format einer Objektdatei nicht erkennen kann, nimmt er an, dass es sich um ein Linker-Skript handelt. Ein auf diese Weise spezifiziertes Skript erweitert das Haupt-Linker-Skript, das für den Link verwendet wird (entweder das Standard-Linker-Skript oder das mit -T angegebene). Diese Funktion erlaubt es dem Linker, mit einer Datei zu verknüpfen, die ein Objekt oder ein Archiv zu sein scheint, aber tatsächlich nur einige Symbolwerte definiert oder "INPUT" oder "GROUP" verwendet, um andere Objekte zu laden. Die Angabe eines Skripts auf diese Weise erweitert lediglich das Haupt-Linker-Skript, wobei die zusätzlichen Befehle nach dem Hauptskript platziert werden; Verwenden Sie die Option -T, um das standardmäßige Linker-Skript vollständig zu ersetzen, aber beachten Sie die Auswirkungen des Befehls "INSERT".

TL;DR ☺. Kurz gesagt:In den meisten Fällen ist den Benutzern nicht bewusst, welches Linker-Skript sie verwenden, da ein „Hauptskript“ (=Standardskript ) wird von der Toolkette bereitgestellt. Das Hauptskript bezieht sich stark auf die Eigenheiten der vom Compiler generierten Abschnitte, und Sie müssen lernen, wie man es ändert. Die meisten Benutzer nicht.

Der übliche Ansatz, um Ihr eigenes Skript bereitzustellen, ist über -T Möglichkeit. Auf diese Weise wird das Haupt-Linker-Skript ignoriert und Ihr Skript übernimmt die Kontrolle über die Verknüpfung. Aber man muss alles von Grund auf neu schreiben.

Wenn Sie nur ein kleines Feature hinzufügen möchten, können Sie Ihre Spezifikationen in eine Datei schreiben und den Dateinamen an die Befehlszeile von ld anhängen (oder gcc / g++) ohne die -T Möglichkeit. Auf diese Weise erledigt das Haupt-Linker-Skript immer noch die Hauptarbeit, aber Ihre Datei erweitert es. Wenn Sie diesen Ansatz verwenden, erhalten Sie die Nachricht im Header dieses Threads, um Sie darüber zu informieren, dass Sie möglicherweise unbeabsichtigt ein fehlerhaftes Objekt bereitgestellt haben.

Die Quelle dieser Verwirrung liegt darin, dass es keine Möglichkeit gibt, die Rolle der zusätzlichen Datei anzugeben. Dies könnte leicht gelöst werden, indem eine weitere Option zu ld hinzugefügt wird genau wie die -dT Option für „d efault scriptfile”:Führen Sie einen -sT ein Option für „s ergänzende Skriptdatei“.


Es ist ein Fehler in bestimmten LD-Versionen. Ignorieren Sie es einfach vorerst oder sehen Sie nach, ob Ihre Distribution ein Update für Ihr LD hat. (Paket binutils)

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


Linux
  1. Wie führen Sie ein Skript beim Anmelden in * nix aus?

  2. Wie zähle ich die Anzahl der Tabulatoren in jeder Zeile mit Shell-Skript?

  3. Wie verwalte ich die Protokollausführlichkeit in einem Shell-Skript?

  4. Wie entfernen/deaktivieren Sie den Evolution Data Server-Prozess?

  5. Wie können Sie den tatsächlichen Hardlink von ls sehen?

So erfassen Sie Terminalsitzungen und geben sie mit dem Linux-Skriptbefehl aus

Linux – Wie führen Sie ein Skript aus, das durch eine Joystick-Eingabe ausgelöst wird?

Wie kann man feststellen, ob die Ausgabe eines Befehls oder Shell-Skripts Stdout oder Stderr ist?

Bash-Skript:Wie weist man jede Zeile der Befehlsausgabe Werten in einem Array zu?

Wie kann man die Ausgabe eines Php-Skripts sehen?

Wie können Sie Duplikate aus dem Bash-Verlauf entfernen?