4.2. Jeu d'outils GCC 12
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 :
Nom | Version | Description |
---|---|---|
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
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é.
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é.
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