GNU/Linux >> Tutoriels Linux >  >> Linux

Comment supprimer l'avertissement :link.res contient des sections de sortie ; avez-vous oublié -T?

Ce n'est pas un bogue car ld se comporte comme sa spécification. La page de manuel de ld 2.28 lit :

Si l'éditeur de liens ne peut pas reconnaître le format d'un fichier objet, il supposera qu'il s'agit d'un script d'éditeur de liens. Un script spécifié de cette manière augmente le script de l'éditeur de liens principal utilisé pour le lien (soit le script de l'éditeur de liens par défaut, soit celui spécifié à l'aide de -T). Cette fonctionnalité permet à l'éditeur de liens d'établir un lien avec un fichier qui semble être un objet ou une archive, mais qui définit simplement certaines valeurs de symbole, ou utilise "INPUT" ou "GROUP" pour charger d'autres objets. Spécifier un script de cette manière ne fait qu'augmenter le script principal de l'éditeur de liens, avec les commandes supplémentaires placées après le script principal ; utilisez l'option -T pour remplacer entièrement le script de l'éditeur de liens par défaut, mais notez l'effet de la commande "INSERT".

TL;DR ☺. En un mot :dans la plupart des cas, les utilisateurs ne sont pas conscients du script de l'éditeur de liens qu'ils utilisent car un "script principal" (=script par défaut ) est fourni par la chaîne d'outils. Le script principal fait fortement référence aux éléments intrinsèques des sections générées par le compilateur et vous devez apprendre les ficelles du métier pour le modifier. La plupart des utilisateurs ne le font pas.

L'approche courante pour fournir votre propre script est via le -T option. De cette façon, le script principal de l'éditeur de liens est ignoré et votre script prend le contrôle de la liaison. Mais vous devez tout écrire à partir de zéro.

Si vous souhaitez simplement ajouter une fonctionnalité mineure, vous pouvez écrire vos spécifications dans un fichier et ajouter le nom du fichier à la ligne de commande de ld (ou gcc / g++) sans le -T option. De cette façon, le script principal de l'éditeur de liens fait toujours le travail principal, mais votre fichier l'augmente. Si vous utilisez cette approche, vous obtenez le message de l'en-tête de ce fil pour vous informer que vous avez peut-être fourni un objet cassé par inadvertance.

La source de cette confusion est qu'il n'y a aucun moyen de spécifier le rôle du fichier supplémentaire. Cela pourrait facilement être résolu en ajoutant une autre option à ld tout comme le -dT option pour "d fichier de script par défaut » :introduisez un -sT option pour "s fichier de script complémentaire".


C'est un bogue dans certaines versions de LD. Ignorez-le simplement pour le moment ou voyez si votre distribution a une mise à jour pour votre LD. (paquet binutils)

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


Linux
  1. Script Bash :comment affecter chaque sortie de ligne de commande à des valeurs dans un tableau ?

  2. Journal Crontab :comment enregistrer la sortie de mon script Cron

  3. Comment exécutez-vous un script lors de la connexion dans * nix ?

  4. Comment compter le nombre d'onglets dans chaque ligne à l'aide d'un script shell ?

  5. Comment gérer la verbosité du journal dans un script shell ?

Linux - Comment exécuter un script déclenché par une entrée de joystick ?

Comment savoir si la sortie d'une commande ou d'un script shell est Stdout ou Stderr ?

Comment voir la sortie d'un script Php ?

Comment supprimer cet avertissement :le deuxième paramètre de 'va_start' n'est pas le dernier argument nommé ?

Comment nettoyer la sortie de la commande Linux 'script'

Comment pouvez-vous supprimer les doublons de l'historique bash ?