Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utilisation de plusieurs compileur

    23 novembre 2014 à 11:45:13

    Bonjour,

    Je me demendais pourquoi etait-il necesaire d'utiliser different compilateur pour different systeme d'exploitation ? Normalement le meme processeur ne suffit pas ?

    • Partager sur Facebook
    • Partager sur Twitter
      23 novembre 2014 à 11:47:09

      Bonjour.

      Ton programme doit s'interfacer avec l'OS. Il y a différents formats d'exécutables, différentes conventions pour appeler une fonction, ou différentes manières de communiquer avec la console par exemple.

      • Partager sur Facebook
      • Partager sur Twitter
        23 novembre 2014 à 12:31:17

        Le code natif generee par le compilateur sera le meme pour les differents os  s'ils ont  le meme processeur ? Mais par exemple si on veut compiler un systeme d'exploitation, le programme n'aura pas besoin de s'interfacer.
        • Partager sur Facebook
        • Partager sur Twitter
          23 novembre 2014 à 14:46:18

          Il faut bien que le PC ou tu compiles puisse au minimum exécuter l'exécutable du compilateur !

          • Partager sur Facebook
          • Partager sur Twitter
            23 novembre 2014 à 17:33:21

            Lucien63, ca veut dire que le code natif produit et le meme par les compilateurs sur les differents os mais que leur executable est different ? 

            • Partager sur Facebook
            • Partager sur Twitter
              23 novembre 2014 à 17:57:57

              Oui il est différent. Windows gère les fichiers à la façon de Windows. Linux les gère autrement. Le processeur est le même, mais l'OS qui gère est différent, donc le code qui gère est différent.
              • Partager sur Facebook
              • Partager sur Twitter
              Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
                24 novembre 2014 à 3:13:55

                Salut,

                A vrai dire, le code binaire qui sera exécuté sous linux n'a absolument pas la "même tête" que le code binaire qui sera exécuté sous windows et ce, même si, au final, c'est toujours le même processeur qui anime la machine sur laquelle tu aurais un dual boot pour ces deux systèmes.

                Le problème ne vient pas des différentes instructions binaires exécutées pour les différentes fonctions, mais bien "tout ce qu'il y a autour" car il y a "beaucoup à faire" pour que le système d'exploitation soit en mesure de lancer ton application.

                En plus, il faut aussi savoir que deux compilateurs différents sont tout à fait susceptibles de générer du code binaire différents au départ d'un code C++ (ou de n'importe quel autre langage compilé), "simplement" parce que, si on peu écrire un test proche de si condition alors ... sinon ..., on peut très bien écrire un autre code proche de si pas condition alors ... sinon ... et que ce qui se trouve entre alors et sinon peut très bien se retrouver après sinon (et inversement).

                En deux mots, dis toi qu'il existe toujours plusieurs solutions pour obtenir un résultat donné, et que chaque compilateur peut très bien choisir une solution différente des autres (ce qui explique, entre autres, pourquoi certains compilateurs ont la réputation de fournir des binaires plus rapides que d'autres ;).

                Bref, tout cela pour dire que, comme il existe plusieurs recettes pour faire des crêpes, il existe aussi plusieurs recettes pour créer des binaires exécutables par le processeur.  Même si c'est toujours le même type de processeur qui est utilisé ;).

                De plus, certains compilateurs ne pourront travailler sur un système d'exploitation donné et générer des binaires pour le système d'exploitation en question.  D'autres seront moins "sectaires" et pourront être compilés (hé oui, un compilateur est d'abord et avant tout un programme qui doit être ... compilé :p ) pour fonctionner sur différents systèmes d'exploitations et parfois même pour générer des binaires qui seront utilisables sur d'autres systèmes d'exploitations que celui sur lequel ils fonctionnent (on appelle cela des compilateurs croisés).

                Mais, tout cela n'a pas énormément d'importance : tout comme tu peux aimer ou non une friandise, tu es tout à fait en droit d'aimer ou non un compilateur particulier et de le préférer (ou non) à un autre.  Ce n'est pas moi qui te dirai lequel choisir.

                Au final, ce qu'il y a de plus important, c'est qu'il existe une norme qui définit ce que tu peux faire et ce que tu ne peux pas faire et que, dans l'idéal, le compilateur que tu décidera d'utiliser devrait respecter cette norme le mieux possible.

                Et surtout, tu devrais veiller toi à écrire du code qui respecte le mieux possible cette norme, de manière à ce que le compilateur utilisé n'ait aucune incidence sur le fait que ton code produit un binaire de qualité ou non (évidemment, si tu utilise des fonctionnalités de la norme que ton compilateur ne connait pas, tu risque d'avoir un léger problème  :p )

                • Partager sur Facebook
                • Partager sur Twitter
                Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                  24 novembre 2014 à 11:45:02

                  Sous Unix, tout est fichier. Tu peux donc accéder à tout via des fichiers. Ce n'est pas le cas sous Windows. Du coup, il faut que ça soit modifié en conséquence. Même s'il doit être possible d'utiliser le même code pour une même architecture de processeur, il ne faut pas oublier tout ce qu'il y a derrière géré par l'OS : entrées/sorties, affichage, gestion de la mémoire, gestion des processus, gestion des threads,... Au final, l'OS permet de s'affranchir de ces contraintes matérielles (au moins en partie) en ayant un code générique pour un OS donné. Il ne faut pas oublier quand-même que l'OS est le chef-d'orchestre de l'ordinateur, le matériel sont les instruments et les programmes qui tournent sont les partitions de musique.

                  -
                  Edité par anolya 24 novembre 2014 à 11:45:16

                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 novembre 2014 à 11:57:15

                    Salut,

                    Je te donne un exemple simple : le "Hello Word" dans une console.

                    déjà, ce ne sont pas les mêmes fonctions pour ouvrir la console sous Windows que sous Linux : déjà changement !

                    Le printf est une fonction qui va interpréter ce que tu lui donnes, mais va appeler en dessous fputc (fonction qui n'affiche qu'un caractère). L'interprétation de la chaine pourra être la même, mais par contre, les fonctions fputc seront radicalement différentes !

                    Car fputc, sous un OS graphique, va demande de dessiner littéralement la lettre, en fonction de la font par défaut de la console (donc selon comment elle a été paramétrée), et va appeler les fonctions de l'OS.

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                      24 novembre 2014 à 14:42:37

                      Merci beaucoup a tout le monde de m'avoir eclairer sur ce sujet :)

                      J'aurais bien aimer maintenant savoir comment peut-on faire pour avoir uniquement le code natif pour un type de processeur ?

                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 novembre 2014 à 14:48:22

                        Merci beaucoup a tout le monde de m'avoir eclairer sur ce sujet :)

                        J'aurais bien aimer maintenant savoir comment peut-on faire pour avoir uniquement le code natif pour un type de processeur ?

                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 novembre 2014 à 15:11:16

                          lagesseadrien a écrit:

                          Merci beaucoup a tout le monde de m'avoir eclairer sur ce sujet :)

                          J'aurais bien aimer maintenant savoir comment peut-on faire pour avoir uniquement le code natif pour un type de processeur ?

                          La plupart des compilateurs sont capables de générer du code binaire pour différents processeur, car il n'y a en définitive que le jeu d'instructions du processeur qui change.

                          Par défaut, le compilateur générera le code binaire pour le type de compilateur qu'il considère comme "le plus fréquent /le plus générique ou le plus efficace", mais il est possible de le forcer à générer du code binaire pour un processeur différent.

                          Par exemple Je ne sais plus quel est le processeur pour lequel Gcc compile son binaire, mais, une chose est sure, il utilise par défaut le jeu d'instructions commun à une des générations "ancienne" de AMD et de INTEL. En 32 bits, il me semble qu'il choisi par défaut le jeu d'instruction du PIII (ou similaire).

                          Mais il est possible de lui faire générer du code binaire pour un antique i386 avec l'option --march=i386, ou de lui demander de générer du code spécifique à toutes les générations de processeurs en changent la valeur de cette option (par exemple, pour le intel core i7, ce serait --march=corei7)

                          Grâce à cette option, le compilateur sera en mesure de choisir les instructions les mieux adaptées (y compris parmi SSE-XXX, et autres extensions 64 bits)

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                            24 novembre 2014 à 15:16:13

                            ???

                            Un processeur dispose de nombre important de mode de fonctionnement (ring0, ...X, configuration des registres de la mémoire virtuelle, etc...)

                            Votre programme, il ne peut pas venir comme une fleur et prendre la main complète sur tous les registres du CPU (et de tout l'hardware qui l'entoure, comme les niveaux de cache, gestionnaires d'interruptions matériel, gestionnaires de bus etc...).

                            Pour ça, l'OS fait un énorme travail que votre programme n'a pas à faire. Le hic, c'est que chaque OS construit un environnement d'exécution différent, même si le CPU est le même.

                            Si vous voulez être indépendant de l'OS, faudra commencer par faire un bootloader et gérer ce travail de Titan qu'est le configuration d'un CPU from scratch.

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                              24 novembre 2014 à 17:48:00

                              Merci :)

                              Connaissez-vous un tutoriel qui pourait m'expliquer les bases pour creer un bootloader ? meme un qui en explique que les principes ?

                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 novembre 2014 à 18:01:07

                                Oula, c'est velu la chose.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                                Utilisation de plusieurs compileur

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown