• [^] # Re: symboles ?

    Posté par . En réponse à la dépêche GCC 3.0.2 est disponible. Évalué à 2.

    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;