IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[Linux/gcc] Fichier de mapping


Sujet :

C++

  1. #1
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut [Résolu][Linux/gcc] Fichier de mapping
    Bonjour,

    J'ai parcourus l'aide de gcc mais je n'ai pas reussi à touver comment générer un fichier de mapping (liste et adresse des variables globales et static).

    Je l'ai deja fait avec d'autres compilateurs mais jamais avec gcc...

    Est ce que c'est possible ?

    Merci

  2. #2
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Et bien après relecture du man de gcc, ca ne semble pas possible... Je suis quand meme très étonné qu'une fonctionnalité aussi basique ne soit pas présente... C'est bizarre mais vu que le man n'en parle pas...

  3. #3
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Salut,

    Pardonne mon ignorance, mais c'est quoi un fichier de mapping exactement ? A quoi ça sert ? Sur quels environnements tu en utilisais ?

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Ca ne serait une fonctionnalité du linker plutôt que de donner les adresses finales dans un binaire ?

    man ld
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Salut,

    Citation Envoyé par Noxen Voir le message
    Pardonne mon ignorance, mais c'est quoi un fichier de mapping exactement ? A quoi ça sert ?
    Le fichier de mapping, c'est le fichier qui te donne l'adresse de tes variables (static et globales). Cela permet d'aider au debug, notamment pour des programmes sans symbols (ou seul les adresses sont disponibles).

    Citation Envoyé par Noxen Voir le message
    Sur quels environnements tu en utilisais ?
    Linux aussi mais c'etait de la cross compilation. La, c'est une compilation pour linux.

    Citation Envoyé par ram_0000 Voir le message
    Ca ne serait une fonctionnalité du linker plutôt que de donner les adresses finales dans un binaire ?

    man ld
    Ca a l'air bien ca... Mais c'est gcc qui genere mon executable. Il fait un appel à ld ? Ou il a aussi un linker intégré ? En tout cas, merci j'ai l'impression que je vais pouvoir m'en tirer comme ca

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 190
    Par défaut
    Salut,

    Tu devrais regarder du côté de nm et de objdump.

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Mais c'est gcc qui genere mon executable. Il fait un appel à ld ?
    Oui. La structure traditionnelle des compilateurs sous Unix est d'avoir des executables separes pour:
    - le preprocesseur
    - le compilateur (parfois plusieurs executables)
    - l'assembleur
    - le linker
    Des que les machines ont eu assez de memoire pour le faire, les differents executables du compilateur ont ete fusionne car ils n'avaient pas d'autres raisons d'etre. GCC a meme, plus recemment, fusionne le preprocesseur dans le compilateur mais continue a utiliser un assembleur et un editeur de liens externe (et sur des platerformes autres que Linux, pas necessairement fournis par le projet GNU).

  8. #8
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Ok, merci hwoarang . Va falloir que je me trouve de la littérature sur le fonctionnement des ordinateurs

  9. #9
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Salut,

    Merci pour vos réponses.

    Citation Envoyé par Montag Voir le message
    Tu devrais regarder du côté de nm et de objdump.
    Le probleme c'est que ces 2 programmes vont chercher dans l'executable les symbols (qui n'existent pas sur une version release). Donc c'est pas ce que je veux.

    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Oui. La structure traditionnelle des compilateurs sous Unix est d'avoir des executables separes pour:
    - le preprocesseur
    - le compilateur (parfois plusieurs executables)
    - l'assembleur
    - le linker
    Des que les machines ont eu assez de memoire pour le faire, les differents executables du compilateur ont ete fusionne car ils n'avaient pas d'autres raisons d'etre. GCC a meme, plus recemment, fusionne le preprocesseur dans le compilateur mais continue a utiliser un assembleur et un editeur de liens externe (et sur des platerformes autres que Linux, pas necessairement fournis par le projet GNU).
    Merci pour ces explications. Mais il y a quelque chose que je ne comprends pas. J'ai regardé le man de ld et il y a le parametre -Map qui fait ce que je veux. Mais ce parametre ne marche pas avec g++. Comment ca se fait ?

    Sinon, j'ai essayé de linker avec ld mais il semble qu'il ne me trouve pas beaucoup de symbols... Il faut inclure toutes les librairies necessaires ??? J'ai essayé de mettre un repertoire (option -L) mais ca ne marche pas

  10. #10
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Merci pour ces explications. Mais il y a quelque chose que je ne comprends pas. J'ai regardé le man de ld et il y a le parametre -Map qui fait ce que je veux. Mais ce parametre ne marche pas avec g++.
    Comment est-ce que tu appelles g++ (avec -Wl,-Map?).

  11. #11
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Merci pour ces explications. Mais il y a quelque chose que je ne comprends pas. J'ai regardé le man de ld et il y a le parametre -Map qui fait ce que je veux. Mais ce parametre ne marche pas avec g++. Comment ca se fait ?
    g++ -Xlinker option
    Permet de passer une option au linker (au moins avec la dernière version de gcc; je suppose que cette option fonctionne depuis déjà un certain temps).

    Quand à ton option -Map, ne serait-ce pas plutôt celle-ci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    -M
    --print-map
        Print a link map to the standard output. A link map provides information about the link, including the following:
     
            * Where object files are mapped into memory.
            * How common symbols are allocated.
            * All archive members included in the link, with a mention of the symbol which caused the archive member to be brought in.
            * The values assigned to symbols.
     
              Note - symbols whose values are computed by an expression which involves a reference to a previous value of the same symbol may not have correct result displayed in the link map. This is because the linker discards intermediate results and only retains the final value of an expression. Under such circumstances the linker will display the final value enclosed by square brackets. Thus for example a linker script containing:
     
                                foo = 1
                                foo = foo * 4
                                foo = foo + 8
     
     
              will produce the following output in the link map if the -M option is used:
     
                                0x00000001                foo = 0x1
                                [0x0000000c]                foo = (foo * 0x4)
                                [0x0000000c]                foo = (foo + 0x8)
     
     
              See Expressions for more information about expressions in linker scripts.
    Pour ma part, il me semble me rappeler que j'utilisait objdump. Rappelle toi que tu peux tout simplement ne pas virer les symboles debug, faire un objdump sur le produit obtenu, et faire un strip après, afin de virer toute ce qui est inutile.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  12. #12
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Merci pour ces réposnes.

    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Comment est-ce que tu appelles g++ (avec -Wl,-Map?).
    J'ai essayé avec -Map. Mais ca n'a pas marché.

    Citation Envoyé par Emmanuel Deloget Voir le message
    g++ -Xlinker option
    J'ai essayé mais ca fait exactement la meme chose que quand j'utilise ld :
    - Il faut entrer chaque librairie utilisée
    - Au final, je me retrouve avec un symbole _init et je ne sais pas ou il est ...

    Citation Envoyé par Emmanuel Deloget Voir le message
    Rappelle toi que tu peux tout simplement ne pas virer les symboles debug, faire un objdump
    Oui mais avant ca, je vais faire des tests pour verifier les performances entre version avec et sans symboles (taille, vitesse d'execution, ...). Et meme si cela etait possible, j'aimerais bien savoir s'il est possible d'obtenir ce fichier de mapping lors de la generation d'un executable sans symboles pour ma culture personnelle...

  13. #13
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Merci pour ces réposnes.

    J'ai essayé avec -Map. Mais ca n'a pas marché.
    Ceci a le comportement que je crois que tu veux.
    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ cat hwoarang.cpp 
    #include <iostream>
    #include <ostream>
     
    int main()
    {
        std::cout << "Hello world!\n";
        return 0;
    }
    $ g++ -Wl,-Map,hwoarang.map -o hwoarang hwoarang.cpp

  14. #14
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Ceci a le comportement que je crois que tu veux.

    $ g++ -Wl,-Map,hwoarang.map -o hwoarang hwoarang.cpp
    Merci, effectivement, c'etait bien ca Je l'ai raté dans le man...

    Merci de votre aide à tous

  15. #15
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Au fait, puisqu'on en est aux fichiers de mapping, est ce que quelqu'un sait s'il est possible d'exporter dans ces fichiers les variables et fonctions statiques ?

    Merci

  16. #16
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Bon, tant pis c'est peut etre pas faisable. En tout cas, merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [gcc] Fichier linux/limits.h introuvable
    Par Trap D dans le forum SUSE
    Réponses: 2
    Dernier message: 21/09/2009, 21h48
  2. Réponses: 4
    Dernier message: 10/11/2005, 11h45
  3. [HIBERNATE] Fichier de mapping
    Par SEMPERE Benjamin dans le forum Hibernate
    Réponses: 2
    Dernier message: 20/10/2005, 10h40
  4. [Hibernate] [Eclipse] Création du fichier de mapping
    Par Willy7901 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 11/08/2005, 17h54
  5. [linux][gcc] Comment travaille t-on avec plusieurs fichiers?
    Par kaygee dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 02/04/2004, 17h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo