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 :

A propos des exécutables


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 60
    Par défaut A propos des exécutables
    Bonjour,

    J'ai une question toute bête.
    Je suppose que j'ai un exécutable a.out que j'ai
    obtenu avec un compilateur g++-4.2.4 sous linux par exemple.

    Si je veux le faire marcher sur une autre machine qu'est ce qu'il me
    faut sur cette machine:
    - un compilateur ?
    - un compilateur quelconque ?
    - le meme compilateur ? ....

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    cela dépend, s'il y compatibilité entre les deux machines alors il n'y a rien à faire, c'est d'ailleurs grâce à cela que l'on peut installer des programmes sans les recompiler

    en fait la vrai question est qu'est ce qui pourrait poser problème, et bien par exemple :
    • l'absence de compilateur pour le système/cpu utilisé
    • un code utilisant des spécificités (include, libs) d'un autre système, par exemple si le code utilise les MFC de Windows il sera difficile de le compiler sous Linux
    • un code incompatible avec la version du compilateur utilisé, par exemple il n'est pas possible de compiler Qt2.3 avec g++ 4.x alors que cela était possible avec une version 3.x
    • un code incompatible avec l'architecture, par exemple un code lié à l'ordre des octets dans les mots (Intel : poids faibles en tête, Motorolla : poids forts en tete) ou à la taille d'un adresse ou d'int (32 ou 64 bits par exemple)
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 60
    Par défaut
    Merci Bruno.
    Pourrais tu me conseiller une/des page/s web qui pourraient
    m'aider à comprendre ce qui se passe exactement quand on
    crée un exécutable (compilation, édition de liens, ...) ou
    éventuellement un bon live.

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Le principe est relativement simple:

    La première chose qui est faite, c'est l'interprétation des directives préprocesseur (#define, #include, ...) et la suppression des commentaires.

    Cela pourrait tout à fait prendre la forme d'un fichier temporaire, d'ailleurs, il est possible de demander à gcc d'afficher le résultat , voire d'enregistrer le résultat dans un fichier (qui pourrait parfaitement servir comme un fichier source "classique" ) avec l'option -E

    Les premiers compilateur pasaient par une étape intermédiaire qui consistait en la traduction des instructions (C++) en assembleur.

    Tu peux encore, à l'heure actuelle, utiliser l'option -S avec gcc pour demander de te créer le code assembleur, mais, pour autant que je sache, il n'y a plus création systématique d'un tel fichier dans le processus de compilaton.

    La deuxième étape consiste donc en la compilation proprement dite: le compilateur traduit toutes les instructions qu'il trouve dans le fichier en instructions compréhensibles par le processeur.

    On obtient ce que l'on appelle un "fichier objet" (il a souvent l'extension .o ou .obj, selon le compilateur (cela ne veut absolument pas dire qu'un autre compilateur pourrait utiliser une autre extension ) )

    A ce stade, chaque fichier objet est carrément une partie de l'application, à ceci près que les appels de fonctions ne se trouvant pas dans le fichier objet sont remplacés par des symboles uniques permettant d'identifier la fonction qui devrait effectivement être appelée.

    Enfin, l'éditeur (ld sous linux ) de liens vient terminer le travail; il va:
    • regrouper les différents fichiers objet dans un fichier qui sera... l'exécutable
    • "extraire" le code objet des fonctions présentes dans bibliothèque statiques et qui sont utilisées par le programme
    • remplacer les symboles des différents appels de fonctions par l'adresse à laquelle les fonctions appelées se trouve effectivement dans l'exécutable
    • faire le liens avec les fonctions se trouvant dans les bibliothèques dynamiques (*.dll / *.so)


    Pour ce qui est des bibliothèques statiques, l'éditeur de liens ne sera pas utilisé, par contre un créateur d'archive (ar sous linux) créera une archive pour ainsi dire classique avec tous les fichiers objets, puis il y aura création d'un index permettant de retrouver les différentes fonctions plus "facilement" (sous linux, c'est le role de ranlib)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 60
    Par défaut
    Je n'en demandais pas tant.
    Mais maintenant ...
    Un grand merci Bruno !

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par debutant100 Voir le message
    Je n'en demandais pas tant.
    Mais maintenant ...
    Un grand merci Bruno !
    Si ce n'est que c'est pas Bruno qui a donné les explication
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 60
    Par défaut
    Je viens juste de me faire découper à la tronçonneuse ... oh la la !
    Ce qui reste de moi est confus.
    Mille excuses.
    Merci Philippe !!!

  8. #8
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    Bonjour,

    je me demande qui de Philippe et de moi doit être le plus vexé par la confusion

    Citation Envoyé par koala01 Voir le message
    Les premiers compilateur pasaient par une étape intermédiaire qui consistait en la traduction des instructions (C++) en assembleur.
    mais c'est toujours le cas, simplement le support n'est souvent pas un 'vrai' fichier mais un pipe pour des raisons de performances. Il suffit de lancer une compilation et de regarder la liste des processus pour le voir

    il y a toujours un passage pas l'assembleur, mais ces derniers sont désormais capable de réaliser des optimisations et non simplement faire le passage assembleur symbolique vers binaire, pour certains processeur le code assembleur produit utilise un nombre illimité de pseudo registres, et c'est l'assembleur qui décide de l'utilisation des registres réels.
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  9. #9
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par bruno_pages Voir le message
    Bonjour,

    je me demande qui de Philippe et de moi doit être le plus vexé par la confusion
    Surement les deux
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 60
    Par défaut
    Je constate une ambiance très ... détendue ...
    moi je me sauve de ce post ...

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

Discussions similaires

  1. Question à propos des exécutables
    Par MagStellon dans le forum Scheme
    Réponses: 0
    Dernier message: 04/01/2011, 20h21
  2. format PE des exécutables Windows
    Par GMI3 dans le forum Windows
    Réponses: 3
    Dernier message: 12/12/2003, 02h51
  3. Une question à propos des thread
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/11/2003, 14h03
  4. A propos des 'File management Functions' de Windows
    Par znaidi dans le forum Windows
    Réponses: 3
    Dernier message: 01/04/2003, 16h01
  5. A propos des modèles d'objet (avec sources)
    Par DevX dans le forum C++Builder
    Réponses: 14
    Dernier message: 01/12/2002, 12h22

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