Hello!

Inspiré(e) de prendre part à la discussion ? Ou de poser une question ou demander de l’aide ?

Alors bienvenues dans les grands sujets des forums de La Bulle : m’inscrire.

Cette partie du forum n’est pas compatible avec les bloqueurs publicitaires

Félicitations à vous, de préférer les accès payants plutôt que la gratuité par la publicité, c’est honnorable et cohérent de votre part. Malheureusement, l’accès payant par micropaiement (qui serait d’environ 1 cent pour 20 pages consultées) n’est pour l’instant pas encore mis en place, et l’accès gratuit sans publicité, est réservé aux membres actif(ve)s du forum. En attendant, si vous souhaitez poursuivre votre visite chez nous, vous pouvez ajouter le site à votre liste blanche, ou encore mieux, désactiver le bloqueur partout. Pour ajouter le site à votre liste blanche, pour Firefox (similaire pour les autres navigateurs), rendez‑vous en bas à gauche de la fenêtre de votre navigateur, et cliquez sur le menu comme dans l’exemple de l’image ci‑dessous, puis rechargez la page, en appuyant sur F5.

Configuration de GCC : plus de détails sur certaines options
Auteur Message
Administrateur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 17495
Jeu 18 Avr 2013 03:22
Message Configuration de GCC : plus de détails sur certaines options
Ça ne va pas passionner les foules, mais j’ouvre quand‑même ce sujet très hautement chiant, pour rassembler des références et inviter les gens connaissant le sujet à y ajouter leur grain de sel.

Les deux références pour la description des options de configuration de GCC, sont soit la commande `configure --help` ou `configure --help=recursive`, mais pour une description souvent trop brève et qui semble juste fournir de bons rappels aux gens qui les connaissent déjà ou les ont connu; soit la page dédiée gcc.gnu.org/install/configure.html, mais qui est encore trop brève sur beaucoup d’options, et ne les décrit d’ailleurs pas toutes.

Image
Hibou57

« La perversion de la cité commence par la fraude des mots » [Platon]
Profil Site Internet
Administrateur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 17495
Jeu 18 Avr 2013 03:24
Message Re: Configuration de GCC : plus de détails sur certaines options

Les options --enable-gnu-unique-object et --disable-gnu-unique-object


Je commence avec les options --enable-gnu-unique-object et --disable-gnu-unique-object. Une recherche sur le web pour “gnu unique object”, ne renseigne pas beaucoup, mais j’ai fini par trouver des choses intéressantes.

L’option est apparue avec GCC 4.5.

Cette option active ou désactive la génération d’un certain type de symboles dans les fichiers exécutables ELF. Ce type s’appel `STB_GNU_UNIQUE`, et il est une variation des objets globaux. Il ne s’applique qu’aux données, pas aux procédures ou fonctions. Comme il est un type de symbole pour la liaison dynamique, il doit être reconnu par ce qui charge les applications en mémoire, c’est à dire le noyau et le lieur dynamique. Les applications utilisant ce type de symbole ne peuvent donc pas démarrer sur certaines versions pas assez récentes du noyau Linux ou du chargeur dynamique.

Pour cette raison, il peut être intéressant de compiler un GCC qui produit des exécutables ne faisant pas usage de ces types de liaison.

Mais ce symbole n’a pas été créé sans raison, il sert à résoudre un problème d’implémentation spécifique aux applications C++. J’ignore si cette spécificité peut être exploitée ou non par les applications compilées à partir d’autres langages.

Si vous êtes certain(e) de ne jamais compiler d’application C++ ou à partir d’un langage tirant parti de cette construction particulière, vous pouvez désactiver cette option, avec l’éventuel bénéfice que les applications pourrons fonctionner sur des systèmes qui ne sont pas les plus récents. Si vous utilisez C++, il se peut (ce n’est pas systématique) que au contraire cette option vous soit nécessaire.

Quelques liens pour s’aventurer dans plus de détails :


Image
Hibou57

« La perversion de la cité commence par la fraude des mots » [Platon]
Profil Site Internet
Administrateur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 17495
Ven 19 Avr 2013 20:54
Message Re: Configuration de GCC : plus de détails sur certaines options

L’option --enable-version-specific-runtime-libs


L’aide est peu loquace à ce sujet, et dit seulement que les fichiers spécifiques à une version, seront installés dans un répertoire spécifique, sans dire lequel il est, plutôt que dans le répertoire par défaut, sans dire lequel il est non‑plus. Il apparait de plus que ce n’est pas exactement dans un répertoire spécifique à une version, mais dans une répertoire spécifique à une plateforme cible et une version, que les fichiers sont installés.

Voici pour y voir plus clair, le résultat d’un petit test. J’ai compilé GCC pour le support du C seulement, avec et sans l’option --enable-version-specific-runtime-libs, et ai comparé le listing des répertoire produit par l’installation.

La différence porte sur le répertoire <install>/lib et <install>/gcc/lib/<cpu>-<os>

Avec l’option : --enable-version-specific-runtime-libs :

Code : 

./lib/gcc/i386-linux-gnu/4.6.4/libgcc_s.so
./lib/gcc/i386-linux-gnu/4.6.4/libgcc_s.so.1
./lib/gcc/i386-linux-gnu/4.6.4/libgomp.a
./lib/gcc/i386-linux-gnu/4.6.4/libgomp.la
./lib/gcc/i386-linux-gnu/4.6.4/libgomp.so
./lib/gcc/i386-linux-gnu/4.6.4/libgomp.so.1
./lib/gcc/i386-linux-gnu/4.6.4/libgomp.so.1.0.0
./lib/gcc/i386-linux-gnu/4.6.4/libgomp.spec
./lib/gcc/i386-linux-gnu/4.6.4/libmudflap.a
./lib/gcc/i386-linux-gnu/4.6.4/libmudflap.la
./lib/gcc/i386-linux-gnu/4.6.4/libmudflap.so
./lib/gcc/i386-linux-gnu/4.6.4/libmudflap.so.0
./lib/gcc/i386-linux-gnu/4.6.4/libmudflap.so.0.0.0
./lib/gcc/i386-linux-gnu/4.6.4/libmudflapth.a
./lib/gcc/i386-linux-gnu/4.6.4/libmudflapth.la
./lib/gcc/i386-linux-gnu/4.6.4/libmudflapth.so
./lib/gcc/i386-linux-gnu/4.6.4/libmudflapth.so.0
./lib/gcc/i386-linux-gnu/4.6.4/libmudflapth.so.0.0.0

Les fichiers sont installés dans
Sans l’option : --enable-version-specific-runtime-libs :

Code : 

./lib/libgcc_s.so
./lib/libgcc_s.so.1
./lib/libgomp.a
./lib/libgomp.la
./lib/libgomp.so
./lib/libgomp.so.1
./lib/libgomp.so.1.0.0
./lib/libgomp.spec
./lib/libmudflap.a
./lib/libmudflap.la
./lib/libmudflap.so
./lib/libmudflap.so.0
./lib/libmudflap.so.0.0.0
./lib/libmudflapth.a
./lib/libmudflapth.la
./lib/libmudflapth.so
./lib/libmudflapth.so.0
./lib/libmudflapth.so.0.0.0


Ce qui ne change pas et est commun au deux, et que l’on pourrait croire avoir put changer :

Code : 

./lib/gcc/i386-linux-gnu/4.6.4/libgcov.a
./lib/libiberty.a

Dans les deux cas, LibIberty reste dans <install>/lib et LibGCov est toujours dans <install>/gcc/lib/<cpu>-<os>, que la configuration soit avec ou sans l’option.

Ce qui change entre les deux, c’est qu’au lieu d’une installation de certains fichiers dans ./lib, est effectuée une installation de ces fichiers dans ./lib/gcc/i386-linux-gnu/4.6.4/. Donc non‑seulement un répertoire spécifique à une version d’un logiciel (gcc), mais aussi spécifique à la plateforme cible.

Tous le reste ne change pas (les binaires, les fichiers d’entêtes, etc).

Ma conclusion sur cette option


Même si on préfère avoir un compilateur par plateforme cible dans son propre répertoire (au lieu d’en installer plusieurs sous un même répertoire), cette option a l’avantage de clairement mettre en évidence ce qui est spécifique à la plateforme cible, ce qui me fait penser que cette option devrait toujours être donnée pour la configuration de GCC.

Image
Hibou57

« La perversion de la cité commence par la fraude des mots » [Platon]
Profil Site Internet
cron