Rechercher

4.2. Jeu d'outils GCC 12

download PDF

Ce chapitre fournit des informations spécifiques à la version 12 du Toolset GCC et aux outils contenus dans cette version.

4.2.1. Outils et versions fournis par le GCC Toolset 12

Le jeu d'outils GCC 12 fournit les outils et versions suivants :

Tableau 4.1. Versions d'outils dans le Toolset 12 de GCC
NomVersionDescription

CCG

12.1.1

Une suite de compilateurs portables prenant en charge le C, le C , et le Fortran.

GDB

11.2

Un débogueur en ligne de commande pour les programmes écrits en C, C , et Fortran.

binutils

2.38

Une collection d'outils binaires et d'autres utilitaires pour inspecter et manipuler les fichiers objets et les binaires.

dwz

0.14

Outil permettant d'optimiser la taille des informations de débogage DWARF contenues dans les bibliothèques partagées ELF et les exécutables ELF.

annobin

10.76

Un outil de vérification de la sécurité de la construction.

4.2.2. Compatibilité avec le langage C dans le jeu d'outils GCC 12

Important

Les informations de compatibilité présentées ici ne s'appliquent qu'au GCC du GCC Toolset 12.

Le compilateur GCC du GCC Toolset peut utiliser les normes C suivantes :

C 14

Cette norme linguistique est disponible dans le jeu d'outils GCC 12.

L'utilisation de la version du langage C 14 est possible lorsque tous les objets C compilés avec le drapeau correspondant ont été construits à l'aide de la version 6 ou ultérieure de GCC.

C 11

Cette norme linguistique est disponible dans le jeu d'outils GCC 12.

L'utilisation de la version du langage C 11 est possible lorsque tous les objets C compilés avec le drapeau correspondant ont été construits à l'aide de GCC version 5 ou ultérieure.

C 98
Cette norme de langage est disponible dans GCC Toolset 12. Les binaires, les bibliothèques partagées et les objets construits à l'aide de cette norme peuvent être librement mélangés, qu'ils soient construits avec GCC à partir de GCC Toolset, Red Hat Developer Toolset, et RHEL 5, 6, 7 et 8.
C 17

Cette norme linguistique est disponible dans le jeu d'outils GCC 12.

Il s'agit de la norme de langage par défaut pour GCC Toolset 12, avec les extensions GNU, ce qui équivaut à l'utilisation explicite de l'option -std=gnu 17.

L'utilisation de la version du langage C 17 est possible lorsque tous les objets C compilés avec le drapeau correspondant ont été construits à l'aide de la version 10 ou ultérieure de GCC.

C 20 et C 23

Ce standard de langage n'est disponible dans GCC Toolset 12 qu'en tant que capacité expérimentale, instable et non supportée. En outre, la compatibilité des objets, des fichiers binaires et des bibliothèques construits à l'aide de ce standard ne peut être garantie.

Pour activer la prise en charge du C 20, ajoutez l'option de ligne de commande -std=c 20 à votre ligne de commande g.

Pour activer la prise en charge du C 23, ajoutez l'option de ligne de commande -std=c 23 à votre ligne de commande g.

Toutes les normes de langage sont disponibles à la fois dans la variante conforme à la norme et avec les extensions GNU.

Lorsque l'on mélange des objets construits avec GCC Toolset et d'autres construits avec la chaîne d'outils RHEL (en particulier les fichiers .o ou .a ), la chaîne d'outils GCC Toolset doit être utilisée pour toute liaison. Cela permet de s'assurer que toutes les nouvelles fonctionnalités des bibliothèques fournies uniquement par GCC Toolset sont résolues au moment de l'établissement des liens.

4.2.3. Spécificités de GCC dans GCC Toolset 12

Liaison statique des bibliothèques

Certaines fonctionnalités plus récentes de la bibliothèque sont liées statiquement dans les applications construites avec GCC Toolset pour prendre en charge l'exécution sur plusieurs versions de Red Hat Enterprise Linux. Cela crée un risque de sécurité mineur supplémentaire car les errata standard de Red Hat Enterprise Linux ne modifient pas ce code. Si les développeurs doivent reconstruire leurs applications en raison de ce risque, Red Hat le communiquera par le biais d'un erratum de sécurité.

Important

En raison de ce risque de sécurité supplémentaire, il est vivement conseillé aux développeurs de ne pas lier statiquement l'ensemble de leur application pour les mêmes raisons.

Spécifier les bibliothèques après les fichiers objets lors de l'établissement des liens

Dans GCC Toolset, les bibliothèques sont liées à l'aide de scripts d'édition de liens qui peuvent spécifier certains symboles par le biais d'archives statiques. Ceci est nécessaire pour assurer la compatibilité avec plusieurs versions de Red Hat Enterprise Linux. Cependant, les scripts de l'éditeur de liens utilisent les noms des fichiers d'objets partagés respectifs. Par conséquent, l'éditeur de liens utilise des règles de gestion des symboles différentes de celles prévues et ne reconnaît pas les symboles requis par les fichiers objets lorsque l'option ajoutant la bibliothèque est spécifiée avant les options spécifiant les fichiers objets :

$ scl enable gcc-toolset-12 'gcc -lsomelib objfile.o'

L'utilisation d'une bibliothèque du GCC Toolset de cette manière entraîne le message d'erreur de l'éditeur de liens undefined reference to symbol. Pour éviter ce problème, suivez la pratique standard d'édition de liens et spécifiez l'option ajoutant la bibliothèque après les options spécifiant les fichiers objets :

$ scl enable gcc-toolset-12 'gcc objfile.o -lsomelib'

Notez que cette recommandation s'applique également à l'utilisation de la version de base de Red Hat Enterprise Linux de GCC.

4.2.4. Spécificités de binutils dans GCC Toolset 12

Liaison statique des bibliothèques

Certaines fonctionnalités plus récentes de la bibliothèque sont liées statiquement dans les applications construites avec GCC Toolset pour prendre en charge l'exécution sur plusieurs versions de Red Hat Enterprise Linux. Cela crée un risque de sécurité mineur supplémentaire car les errata standard de Red Hat Enterprise Linux ne modifient pas ce code. Si les développeurs doivent reconstruire leurs applications en raison de ce risque, Red Hat le communiquera par le biais d'un erratum de sécurité.

Important

En raison de ce risque de sécurité supplémentaire, il est vivement conseillé aux développeurs de ne pas lier statiquement l'ensemble de leur application pour les mêmes raisons.

Spécifier les bibliothèques après les fichiers objets lors de l'établissement des liens

Dans GCC Toolset, les bibliothèques sont liées à l'aide de scripts d'édition de liens qui peuvent spécifier certains symboles par le biais d'archives statiques. Ceci est nécessaire pour assurer la compatibilité avec plusieurs versions de Red Hat Enterprise Linux. Cependant, les scripts de l'éditeur de liens utilisent les noms des fichiers d'objets partagés respectifs. Par conséquent, l'éditeur de liens utilise des règles de gestion des symboles différentes de celles prévues et ne reconnaît pas les symboles requis par les fichiers objets lorsque l'option ajoutant la bibliothèque est spécifiée avant les options spécifiant les fichiers objets :

$ scl enable gcc-toolset-12 'ld -lsomelib objfile.o'

L'utilisation d'une bibliothèque du GCC Toolset de cette manière entraîne le message d'erreur de l'éditeur de liens undefined reference to symbol. Pour éviter ce problème, suivez la pratique d'édition de liens standard et spécifiez l'option ajoutant la bibliothèque après les options spécifiant les fichiers objets :

$ scl enable gcc-toolset-12 'ld objfile.o -lsomelib'

Notez que cette recommandation s'applique également à l'utilisation de la version de base de Red Hat Enterprise Linux de binutils.

4.2.5. Spécificités de annobin dans GCC Toolset 12

Dans certaines circonstances, en raison d'un problème de synchronisation entre annobin et gcc dans GCC Toolset 12, votre compilation peut échouer avec un message d'erreur qui ressemble à ce qui suit :

cc1: fatal error: inaccessible plugin file
opt/rh/gcc-toolset-12/root/usr/lib/gcc/architecture-linux-gnu/12/plugin/gcc-annobin.so
expanded from short plugin name gcc-annobin: No such file or directory

Pour contourner le problème, créez un lien symbolique dans le répertoire du plugin du fichier annobin.so vers le fichier gcc-annobin.so:

# cd /opt/rh/gcc-toolset-12/root/usr/lib/gcc/architecture-linux-gnu/12/plugin
# ln -s annobin.so gcc-annobin.so

Remplacez architecture par l'architecture que vous utilisez dans votre système :

  • aarch64
  • i686
  • ppc64le
  • s390x
  • x86_64
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.