OVH Cloud OVH Cloud

Compil GCC-3.3.2

18 réponses
Avatar
Zeugma
Bonjour,

J'essaye de compiler GCC-3.3.2 sur ma Mandrake 9.1

J'ai fait un répertoire objdir à coté du répertoire des sources depuis
lequel je lance
configure --prefix=/usr/local/gcc-3.3.2 --enable-languages=c,c++,java
make bootstrap

et c'est là que je ne comprend plus
J'obtiens des erreurs de compil qui sont à chaque fois différentes
qq fois Assembler message : instruction inconnue
qq fois il plante sur la comparaison des stage 2 et 3

Comment expliquer le phénomène mais surtout comment compiler gcc jusqu'au
bout

PS : j'ai bien sûr vérifié que tous les prérequis étaient bons

Merci de vos idées ou conseils

Z

8 réponses

1 2
Avatar
ecstasy
"J. Mayer" a écrit dans le message de
news:
Petite info utile : si tu comptes utiliser le nouveau compilateur
compilé


pour compiler, je te conseille de faire un

make LIBCFLAG=-O2 LIBCXXFLAG=-O2 bootstrap

( ajouter les options d'optimisations qui vont bien avec le -O2 )

car par défaut les libs seront compilées avec des flags de debugage. Il
ne


génèrera donc du code environ 3X plus lent.( j'ai mis des semaines à
trouver


d'où venait ce manque de perf lors de mes premières compils de gcc.. )


Le -O2 ne génère pas de code de débug, ça désactive les optimisations,
nuance...


-O2 désactive les optimisations ?? Ça fait pas très longtemps que j'ai
compilé avec gcc et si mes souvenirs sont bons, c'est le niveau usuel
d'optimisation qu'on utilise pour une utilisation "release" des exécutables.


Et le bootstrap est indispensable: ça demande au compilateur de
se recompiler lui-même et de vérifier qu'il aboutit au même résultat
que la première compilation. Il n'y a que pour compiler un
cross-compilateur qu'il faut ne pas le mettre.


Où as-tu vu que je ne faisais pas le bootstrap ? Si tu regardes à la fin de
ma commande make, je fais un bootstrap. Les deux trucs qu'il y a entres sont
juste des définitions de macros...


Faire un simple "make" pour recompiler gcc, c'est prendre un très
gros risque...
Le make bootstrap ne detecte pas tous les bugs mais permet de
s'assurer que le compilateur sait compiler du C standard, ce qui
n'est déjà pas si mal. Par contre, ça ne dit pas si il saura compiler
du code un peu spécial, genre un kernel (à cause de problèmes d'aliasing,
d'assembleur inline, ...).


Je persiste et signe : faire un "make bootstrap" par défaut sans redéfinir
les macros LIBCFLAG et LIBCXXFLAG c'est se retrouver avec un compilateur qui
utilisera des libs en version debug.


Avatar
J. Mayer
On Wed, 07 Jan 2004 02:24:38 +0100, ecstasy wrote:


"J. Mayer" a écrit dans le message de
news:
Petite info utile : si tu comptes utiliser le nouveau compilateur
compilé


pour compiler, je te conseille de faire un

make LIBCFLAG=-O2 LIBCXXFLAG=-O2 bootstrap

( ajouter les options d'optimisations qui vont bien avec le -O2 )

car par défaut les libs seront compilées avec des flags de debugage. Il
ne


génèrera donc du code environ 3X plus lent.( j'ai mis des semaines à
trouver


d'où venait ce manque de perf lors de mes premières compils de gcc.. )


Le -O2 ne génère pas de code de débug, ça désactive les optimisations,
nuance...


-O2 désactive les optimisations ?? Ça fait pas très longtemps que j'ai
compilé avec gcc et si mes souvenirs sont bons, c'est le niveau usuel
d'optimisation qu'on utilise pour une utilisation "release" des exécutables.


OK, je viens de vérifier, nous faisons tous les deux une erreur:
je pensais que, par défaut, gcc utilisait des optimisations plus
poussées pour se compiler. Or il semble qu'il n'en est rien.
Donc, dans le meilleur des cas, ce que tu fait ne change rien.
Quand aux infos de debug, si tu parles du flag "-g" rajouté lors
de la compil, il ne peut pas ralentir le code:
le code produit est strictement le même. Il y a effectivement des
infos de debug générés mais:
- elles ne sont pas dans le code et sont suppprimées lors de l'install
( les binaires et les librairies sont strippées).
- en imaginant que l'install "oublie" celà, le fichier sera plus
gros, mais ça ne change rien à l'execution: les infos de debug
ne sont pas chargées en mémoire lors de l'execution (sauf quand
gdb lance le programme, bien sur...).

Enfin, pour changer les flags de compils d'un outil GNU, il faut
le faire *avant* configure:
export CFLAGS="mes flags" ; export CXXFLAGS="mes flags"
export LDFLAGS="mes flags"
./configure ...
./make bootstrap
Il est dangereux de forcer des variables de make,
ça peut faire échouer certaines compils ou produire des binaires
invalides dans certains cas...

Et le bootstrap est indispensable: ça demande au compilateur de
se recompiler lui-même et de vérifier qu'il aboutit au même résultat
que la première compilation. Il n'y a que pour compiler un
cross-compilateur qu'il faut ne pas le mettre.


Où as-tu vu que je ne faisais pas le bootstrap ? Si tu regardes à la fin de
ma commande make, je fais un bootstrap. Les deux trucs qu'il y a entres sont
juste des définitions de macros...


Désolé, c'est de ma faute, je n'ai pas le début du thread (pb de serveur
de news de mon provider). J'ai bondi en voyant le make et j'ai pris
ce que je voyait....



Avatar
ecstasy
"J. Mayer" a écrit dans le message de
news:
OK, je viens de vérifier, nous faisons tous les deux une erreur:


Toi tu fais des erreurs et tu persistes encore à faire le malin.

je pensais que, par défaut, gcc utilisait des optimisations plus
poussées pour se compiler. Or il semble qu'il n'en est rien.
Donc, dans le meilleur des cas, ce que tu fait ne change rien.
Quand aux infos de debug, si tu parles du flag "-g" rajouté lors
de la compil, il ne peut pas ralentir le code:
le code produit est strictement le même. Il y a effectivement des
infos de debug générés mais:
- elles ne sont pas dans le code et sont suppprimées lors de l'install
( les binaires et les librairies sont strippées).


Si tu dis ça, c'est que tu n'as jamais programmé et / ou compilé gcc...


- en imaginant que l'install "oublie" celà, le fichier sera plus
gros, mais ça ne change rien à l'execution: les infos de debug
ne sont pas chargées en mémoire lors de l'execution (sauf quand
gdb lance le programme, bien sur...).


En informatique et comme partout, on évite de donner son avis sur des choses
que l'on ne connaît pas.
Prends un bon cours de programmatio C et tu reviendras me parler de -g. (
pour info, j'ai enseigné C++ pendant quelques années )

Enfin, pour changer les flags de compils d'un outil GNU, il faut
le faire *avant* configure:
export CFLAGS="mes flags" ; export CXXFLAGS="mes flags"
export LDFLAGS="mes flags"
./configure ...
./make bootstrap
Il est dangereux de forcer des variables de make,
ça peut faire échouer certaines compils ou produire des binaires
invalides dans certains cas...


Je vois que tu connais *bien* les étapes classiques d'installation standard.
Sauf que là, il s'agit de gcc, et que ce que j'ai conseillé se trouve dans
la doc de gcc ; ce qui prouve si besoin est que tu ne sais pas de quoi tu
parles et que t'utilises un vocabulaire de pseudo-spécialiste pour faire le
malin.

Avatar
françois
ecstasy wrote:
"J. Mayer" a écrit dans le message de
news:

OK, je viens de vérifier, nous faisons tous les deux une erreur:



Toi tu fais des erreurs et tu persistes encore à faire le malin.


je pensais que, par défaut, gcc utilisait des optimisations plus
poussées pour se compiler. Or il semble qu'il n'en est rien.
Donc, dans le meilleur des cas, ce que tu fait ne change rien.
Quand aux infos de debug, si tu parles du flag "-g" rajouté lors
de la compil, il ne peut pas ralentir le code:
le code produit est strictement le même. Il y a effectivement des
infos de debug générés mais:
- elles ne sont pas dans le code et sont suppprimées lors de l'install
( les binaires et les librairies sont strippées).



Si tu dis ça, c'est que tu n'as jamais programmé et / ou compilé gcc...



- en imaginant que l'install "oublie" celà, le fichier sera plus
gros, mais ça ne change rien à l'execution: les infos de debug
ne sont pas chargées en mémoire lors de l'execution (sauf quand
gdb lance le programme, bien sur...).



En informatique et comme partout, on évite de donner son avis sur des choses
que l'on ne connaît pas.
Prends un bon cours de programmatio C et tu reviendras me parler de -g. (
pour info, j'ai enseigné C++ pendant quelques années )


Enfin, pour changer les flags de compils d'un outil GNU, il faut
le faire *avant* configure:
export CFLAGS="mes flags" ; export CXXFLAGS="mes flags"
export LDFLAGS="mes flags"
./configure ...
./make bootstrap
Il est dangereux de forcer des variables de make,
ça peut faire échouer certaines compils ou produire des binaires
invalides dans certains cas...



Je vois que tu connais *bien* les étapes classiques d'installation standard.
Sauf que là, il s'agit de gcc, et que ce que j'ai conseillé se trouve dans
la doc de gcc ; ce qui prouve si besoin est que tu ne sais pas de quoi tu
parles et que t'utilises un vocabulaire de pseudo-spécialiste pour faire le
malin.


Oh la

on peut discuter sans s'incendier ,hein!!


Avatar
J. Mayer
On Wed, 07 Jan 2004 18:57:20 +0000, françois wrote:

ecstasy wrote:
"J. Mayer" a écrit dans le message de
news:

OK, je viens de vérifier, nous faisons tous les deux une erreur:
Toi tu fais des erreurs et tu persistes encore à faire le malin.




Il m'arrive de le reconnaitre. Quand à faire le malin,
je ne vois pas pourquoi je perdrais mon temps à celà...


je pensais que, par défaut, gcc utilisait des optimisations plus
poussées pour se compiler. Or il semble qu'il n'en est rien.
Donc, dans le meilleur des cas, ce que tu fait ne change rien.
Quand aux infos de debug, si tu parles du flag "-g" rajouté lors
de la compil, il ne peut pas ralentir le code:
le code produit est strictement le même. Il y a effectivement des
infos de debug générés mais:
- elles ne sont pas dans le code et sont suppprimées lors de l'install
( les binaires et les librairies sont strippées).


Si tu dis ça, c'est que tu n'as jamais programmé et / ou compilé gcc...



Tu n'as pas l'air bien renseigné sur les formats binaires....

- en imaginant que l'install "oublie" celà, le fichier sera plus
gros, mais ça ne change rien à l'execution: les infos de debug
ne sont pas chargées en mémoire lors de l'execution (sauf quand
gdb lance le programme, bien sur...).



En informatique et comme partout, on évite de donner son avis sur des choses
que l'on ne connaît pas.



C'est vrai, écoutes toi, donc :-)

Prends un bon cours de programmatio C et tu reviendras me parler de -g. (
pour info, j'ai enseigné C++ pendant quelques années )



Ca devait être beau.
Lit la spec du format ELF, digère là, regarde le code du kernel
Linux qui charge un executable ELF, celui de BSD, en passant,
aussi, et tu verras ce que je dis est exact.
Les informations de debug ne sont pas dans le code et ne sont chargées
ni par le loader du kernel, ni par le linker dynamique.
Il n'y a que les programmes de debug qui s'en servent.
Je ne parle pas de code instrumenté, mais bien des infos de debug
(flag -g de gcc).

Enfin, pour changer les flags de compils d'un outil GNU, il faut
le faire *avant* configure:
export CFLAGS="mes flags" ; export CXXFLAGS="mes flags"
export LDFLAGS="mes flags"
./configure ...
./make bootstrap
Il est dangereux de forcer des variables de make,
ça peut faire échouer certaines compils ou produire des binaires
invalides dans certains cas...



Je vois que tu connais *bien* les étapes classiques d'installation standard.
Sauf que là, il s'agit de gcc, et que ce que j'ai conseillé se trouve dans
la doc de gcc ; ce qui prouve si besoin est que tu ne sais pas de quoi tu
parles et que t'utilises un vocabulaire de pseudo-spécialiste pour faire le
malin.



Tiens, 5 minutes avant, je n'avait jamais compilé...
Je prends donc la doc de gcc (gcc 3.3, la version actuelle)
et je fait un petit grep CFLAGS dans la doc pour aller plus vite.
Et on ne trouve qu'un cas ou on passe des flags par make,
et ce n'est pas du tout ce que tu as écrit, désolé:
make BOOT_CFLAGS="xxx" bootstrap
Il doit y avoir de la doc entre les octets visibles que je n'arrive
pas à percevoir, sans doute...

Oh la
on peut discuter sans s'incendier ,hein!!


Ce serait bien...



Avatar
ecstasy
"J. Mayer" a écrit dans le message de
news:

Tiens, 5 minutes avant, je n'avait jamais compilé...
Je prends donc la doc de gcc (gcc 3.3, la version actuelle)
et je fait un petit grep CFLAGS dans la doc pour aller plus vite.
Et on ne trouve qu'un cas ou on passe des flags par make,
et ce n'est pas du tout ce que tu as écrit, désolé:
make BOOT_CFLAGS="xxx" bootstrap
Il doit y avoir de la doc entre les octets visibles que je n'arrive
pas à percevoir, sans doute...


fichier INSTALL/build.html. Faire man grep si tu as du mal.
Se trouve aussi ici :

http://gcc.gnu.org/install/build.html

si tu mets 5 mins pour faire le tour d'une question, tu dois être un vrai
génie de l'informatique toi.

Si ça peut t'aider, j'ai fait un copier-coller :
"If you want to save additional space during the bootstrap and in the final
installation as well, you can build the compiler binaries without debugging
information as in the following example. This will save roughly 40% of disk
space both for the bootstrap and the final installation. (Libraries will
still contain debugging information.)

make CFLAGS='-O' LIBCFLAGS='-g -O2'
LIBCXXFLAGS='-g -O2 -fno-implicit-templates' bootstrap
"

Avatar
Qing Liu
"ecstasy" writes:

fichier INSTALL/build.html. Faire man grep si tu as du mal.
Se trouve aussi ici :

http://gcc.gnu.org/install/build.html

si tu mets 5 mins pour faire le tour d'une question, tu dois être un vrai
génie de l'informatique toi.


Ça commence à devenir pénible ce ton agressif. Ce n'est pas
le genre d'attitude qui fait convaincre de la validité de
tes propos.

Sur le fond, à mon avis cette enfilade a plus sa place dans
fr.comp.lang.c.

--
Liu

Avatar
no_spam
On Fri, 09 Jan 2004 10:39:11 +0100, Qing Liu wrote:

"ecstasy" writes:

fichier INSTALL/build.html. Faire man grep si tu as du mal.
Se trouve aussi ici :

http://gcc.gnu.org/install/build.html

si tu mets 5 mins pour faire le tour d'une question, tu dois être un vrai
génie de l'informatique toi.


Ça commence à devenir pénible ce ton agressif. Ce n'est pas
le genre d'attitude qui fait convaincre de la validité de
tes propos.

Bon, il a quand même raison, je suis passé à coté de ce fichier.

Mais ça ne change rien au problème de fond.
Le commentaire, juste au dessus dit explicitement que ça consome
moins de place disque, puisqu'il n'y a pas d'infos de debug.
Ce qui n'empêche que le code généré sera exactement le même
(puisque les infos de debug ne sont pas dans le code, dans un fichier
ELF) et que ça ne change strictement rien aux performances...

Sur le fond, à mon avis cette enfilade a plus sa place dans
fr.comp.lang.c.


Sans doute... Pour ma part, je vais arreter là...


1 2