Cemprendre la phase du compilation??

Fermé
Joker_ Messages postés 172 Date d'inscription mardi 13 octobre 2009 Statut Membre Dernière intervention 20 janvier 2023 - 17 févr. 2010 à 09:59
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 17 févr. 2010 à 14:56
Bonjour,
J'ai une choses très compliquèe pour moi, je veux le comprend :

Alors, si j'ai un logiciel .exe que je veux utilisé sous windows xp par exemple : CCleaner
Lors de construction du logiciel, et pour générer le .exe, (1)le développeur a compilé son projet, le processeur se son machine est Intel
(2)Je sais que le compilateur dépend du processeur uilisé (Assembleur) alors il va traduire en une suite d'instruction intelligible par le processeur Intel
Pour moi, j'ai une machine avec un processeur Motorolla qui très différent de Intel.
(3) Le fichier .exe fonctionne normalement chez moi!!!!!
C'est claire que (1)+(2)+(3) donnent une contradiction!!!

Povez vous m'expliquer??

Merci d'avance

12 réponses

Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
17 févr. 2010 à 10:04
en fait, plus que pour un processeur, la compilation est faite pour un jeu d'instructions. Dans nos PC, on utilise le jeu d'isntruction x86 et x86_64. ce jeu a été créé par intel. Il se peut que ton processeur motorola utilise aussi ce jeu d'instruction. Par exemple, els processeurs AMD et VIA utilisent aussi le jeu x86.

Ton ordinateur utilise windows XP. Windows XP n'existe que pour les jeux d'instruction x86 32 et 64 bits, donc ton processeur doit forcement utiliser ce jeu. Quel est la référence de ce processeur ?
3
Joker_ Messages postés 172 Date d'inscription mardi 13 octobre 2009 Statut Membre Dernière intervention 20 janvier 2023 1
17 févr. 2010 à 10:09
Nabla's!! J'ai parlé d'un exemple qui peut bien exister c'est pas une cas qui se passe avec moi!

Est ce que mon question est claire?
0
Tigzy Messages postés 7498 Date d'inscription lundi 15 février 2010 Statut Contributeur sécurité Dernière intervention 15 septembre 2021 582
17 févr. 2010 à 10:12
Salut

La question n'est pas claire, mais la réponse l'est ;)
En général, on compile pour le système cible à partir du système hôte.

Il faut tenir compte à la fois du jeu d'instruction ET de l'OS cible.
Lorsque quelque chose diffère entre la cible et l'hote, on fait alors une CROSS-COMPILATION
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
17 févr. 2010 à 10:12
il existe des emulateurs, qui convertisse les isntructiosn en temps réel, affin qu'elles soient comprise par la machine hote.

Lors de la créationde ton exe, il y a la compilation, mais aussi le link, et cette étape dépend du systeme d'exploitatation. Ainsi, ton exe compilé pour windows ne tournera pas sous linux, mais a priori la compilation aura été la meme (si je ne me trompe pas)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tigzy Messages postés 7498 Date d'inscription lundi 15 février 2010 Statut Contributeur sécurité Dernière intervention 15 septembre 2021 582
17 févr. 2010 à 10:17
@Nabla:

Le linker se charge uniquement de rassembler les .h et .c (dans le cas du C) nécéssaires qui auront été au préalablement compilés en fichier objets par l'assemblage (.o)
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
17 févr. 2010 à 10:20
ok, je sais:
{C, H} ==Compilataion==>> {O} ==Link ==>Exe

et selon toi, à quel moment le code se différencie t il entre linux et windows? Je susi aps sur à 100%, mais je pense bien que c'est au moment du link ...
0
Tigzy Messages postés 7498 Date d'inscription lundi 15 février 2010 Statut Contributeur sécurité Dernière intervention 15 septembre 2021 582
17 févr. 2010 à 10:23
Non, c'est au moment du préprocessing si ça a été bien fait. Tu dois avoir une partie du genre:

#ifdef (x86) ....
#else ifdef (unix) ....
#endif

en entête de certains .h.
Après ça reste compliqué pour moi de comprendre aussi .
Mais il faut savoir que ça existe.En gros le programme détecte l'hote avant la compil.
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
17 févr. 2010 à 10:40
le preprocessing ca permet simplement d'executer un certain code sur unix, un code different sur windows. Ca correspond juste à une "selection" des lignes de code à utiliser
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
17 févr. 2010 à 14:29
c'est pas que j'aime avoir raison, mais:
https://forums.commentcamarche.net/forum/affich-37604426-la-compilation-et-les-modules-en-c-et-en-c

donc c'est bien au moment du link que le choix réel de l'OS se fait
0
Tigzy Messages postés 7498 Date d'inscription lundi 15 février 2010 Statut Contributeur sécurité Dernière intervention 15 septembre 2021 582 > Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014
17 févr. 2010 à 14:47
Non tu n'a pas compris.
En fait, la seule chose qui diffère, c'est l'utilisation de linux.h ou windows.h par exemple.
Genre le bluetooth, tu as blueZ ou windowsstack. Le choix de l'une ou l'autre des libraries se fait bien dans le préprocesseur.
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193 > Tigzy Messages postés 7498 Date d'inscription lundi 15 février 2010 Statut Contributeur sécurité Dernière intervention 15 septembre 2021
17 févr. 2010 à 14:56
certes, tu vas pas te taper l'initialisation de la pile unix si t'es sous windows. Cependant, le moment ou tu te connectes à la librairie est fait lors du link:
Je cite:

3) Le linkage

Enfin, le compilateur agrège chaque fichier .o avec les éventuels fichiers binaires des librairies qui sont utilisées (fichiers .a et .so sous linux, fichiers .dll et .lib sous windows).


Je suis informaticien, je ne connais pas tout, mais je sais que l'étape la plus importante dans la decision du systeme de destination est faite lors du link... car c'est la que tu lies les librairies...

si tu fais une sortie ecran, ton code ne changera pas que tu sois sous linux ou windows, par contre, la librairie que tu utilisera sera isntanciée lors du link, et c'est à ce titre que ej persiste et signe.
Il faudrait faire un test sous windows et linux: faire un hello world, le compiler sous linux et windows, et comparrer les .o
0
Joker_ Messages postés 172 Date d'inscription mardi 13 octobre 2009 Statut Membre Dernière intervention 20 janvier 2023 1
17 févr. 2010 à 10:47
{C, H} ==Compilataion==>> {O} ==Link ==>Exe

mais ça manque une étape très intérrésante, là ou on obtient un fichier .ASM
Donc c'est :
{C, H} ==Compilataion==>>{.ASM} ===>Assembleur===>{.OBJ} ==Link: éditeur de lien ==>Exe

Mon problème est au niveau de fichier .ASM : qui contient les instructions intelligibles au point de vue processeur!
0
Tigzy Messages postés 7498 Date d'inscription lundi 15 février 2010 Statut Contributeur sécurité Dernière intervention 15 septembre 2021 582
17 févr. 2010 à 11:00
Oui tu veux savoir quoi?
0
Joker_ Messages postés 172 Date d'inscription mardi 13 octobre 2009 Statut Membre Dernière intervention 20 janvier 2023 1
17 févr. 2010 à 11:06
Tigzy, les instructions Assembleur dépend fortement de type du processeur et
consulter le sujet principale de cette discussion en cours!!

vous pouvez ainsi comprendre mon problème ;-)
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
17 févr. 2010 à 11:23
je t'ai répondu avec les "jeux d'instruction".

dis nous de quel processeur motorola tu parles, et on te dira s'il accèpte ton exe.
de toute facon: exe = windows (généralement, meme si je sais que les symbian aussi utilisent exe) =>windows = x86

dopnc en gros, comme windows ne tourne que sur des plateformes x86, si tu lance ton exe sous windows, c'est que t'es sur du x86. Y a pas a chipoter !

la compilation dépend de l'OS et de la machine ....
donc bon, si tu précises pas mieux le cas de ton utilisation, qui d'après ce que j'ai compris n'est pas un cas réel, on ne pourra pas t'aider plus
0
Tigzy Messages postés 7498 Date d'inscription lundi 15 février 2010 Statut Contributeur sécurité Dernière intervention 15 septembre 2021 582
17 févr. 2010 à 11:07
Mais justement j'ai déjà répondu!
Voir post 7
0
Tigzy Messages postés 7498 Date d'inscription lundi 15 février 2010 Statut Contributeur sécurité Dernière intervention 15 septembre 2021 582
17 févr. 2010 à 11:27
=>windows = x86

Ou x64 ;)
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
17 févr. 2010 à 11:34
quand tu dis x64, tu veux dire x86_64: les extentions 64 bits des processeurs de série x86 (les core 2 duo,, les i3, i5, i7 et tous les processeurs commerciaux.

Il ne faut pas confondre x86_64 et IA64 (processeurs ITANIUM), qui ne sont pas compatibles !!!!!

windows est aussi disponible pour les IA64 mais c'est uen version spéciale
0
Joker_ Messages postés 172 Date d'inscription mardi 13 octobre 2009 Statut Membre Dernière intervention 20 janvier 2023 1
17 févr. 2010 à 11:33
Oui Nabla's tu as compris tous,
c'est une cas que j'ai imaginé,

Je pense que toutes les réponses peut m'aider à s'avancer et me guider pour comprendre le phénoménes
et peut m'aider aussi à n'imaginer pas n'importe de quoi :-)

Merci tegzy et Nabla!
0