Quand on declare une fonction ou une variable en C, le nom du symbole qu'on retrouve (avec nm) dans un objet est le nom donné en C:
toto.c:
void toto(int a) {
return;
}
gcc -c toto.c donne:
toto.o
00000000 t gcc2_compiled.
00000000 T toto
En C++, le nom de la fonction n'est pas suffisant, il faut aussi le type des arguments.
g++-2.95.3 -c toto.c donne:
00000000 ? __FRAME_BEGIN__
00000000 t gcc2_compiled.
00000000 T toto__Fi
gcc 3 utilise une autre convention pour coder le type des arguments.
g++-3 -c toto.c donne:
00000000 T _Z4totoi
Quand un autre fichier objet utilisant la fonction toto doit être créé, il faut savoir quelle convention utiliser. C'est là, je pense, qu'intervient l'incompatibilité entre gcc 2 et gcc 3.
Question pour les curieux: que se passe-t-il si je lie le dernier toto.o avec un titi.c compilé avec gcc contenant la définition suivante:
int _Z4totoi;
[^] # Re: symboles ?
Posté par Johann Deneux . En réponse à la dépêche GCC 3.0.2 est disponible. Évalué à 2.
toto.c:
void toto(int a) {
return;
}
gcc -c toto.c donne:
toto.o
00000000 t gcc2_compiled.
00000000 T toto
En C++, le nom de la fonction n'est pas suffisant, il faut aussi le type des arguments.
g++-2.95.3 -c toto.c donne:
00000000 ? __FRAME_BEGIN__
00000000 t gcc2_compiled.
00000000 T toto__Fi
gcc 3 utilise une autre convention pour coder le type des arguments.
g++-3 -c toto.c donne:
00000000 T _Z4totoi
Quand un autre fichier objet utilisant la fonction toto doit être créé, il faut savoir quelle convention utiliser. C'est là, je pense, qu'intervient l'incompatibilité entre gcc 2 et gcc 3.
Question pour les curieux: que se passe-t-il si je lie le dernier toto.o avec un titi.c compilé avec gcc contenant la définition suivante:
int _Z4totoi;