Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux

Linux Forum d'entraide sur le système Linux. Avant de poster -> Tutoriels Linux, F.A.Q Linux

Réponse
 
Outils de la discussion
Vieux 01/06/2007, 16h28   #1 (permalink)
Débutant(e)
 
Avatar de ..::snake::..
 
Date d'inscription: mai 2007
Localisation: Toujours en Question
Âge: 22
Messages: 323
Envoyer un message via MSN à ..::snake::..
Par défaut Pourquoi la compilation entre unix et windows est différente ?

Bonjour .

une question un peut newbie , mais quand meme je vous demande .

Lorsqu'on code une source C par example et en la compile sous Unix .

Elle marche normale , mais si en la déplace vers Windows elle marche pas .

Malgré que les synthaxe de codage pour le language sont les memes .


..::snake::.. est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/06/2007, 19h01   #2 (permalink)
Membre Confirmé
 
Avatar de vincent magnin
 
Date d'inscription: juin 2006
Localisation: Lyon
Messages: 205
Envoyer un message via MSN à vincent magnin
Par défaut

Il ne faut pas oublier que les librairies que tu utilises ne sont pas toutes ... "portables"

Donc, dans la stricte utilisation des librairies portables tu ne rencontrera aucun problème (stdio, stdlib... pour ne citer que ces basiques).

Saches qu'il y a également des fonctions dans ces librairies qui ne sont pas portables

Porter un logiciel ce n'est, en gros, pas copier coller la source et la compiler
vincent magnin est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/06/2007, 20h04   #3 (permalink)
Débutant(e)
 
Avatar de ..::snake::..
 
Date d'inscription: mai 2007
Localisation: Toujours en Question
Âge: 22
Messages: 323
Envoyer un message via MSN à ..::snake::..
Par défaut

@vincent magnin

Merci de l'interet que vous portez vers mon poste ,
Mais est ce que vous pouvez mieu m'eclairez ?
..::snake::.. est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/06/2007, 20h50   #4 (permalink)
Membre Expert
 
Avatar de Shugo78
 
Date d'inscription: mars 2007
Localisation: ile-de-france
Âge: 14
Messages: 1 056
Envoyer un message via MSN à Shugo78
Par défaut

La portabilitée est importante.
Les appels systèmes et les normes sont différentes.
__________________
Le savoir est un droit universel, libérez le code source
Mon site
Aidez nous à militer pour l'adoption d'un nouveau smiley
"C'est en s'attardant en bas que l'on monte plus haut "
"Un home qui veut faire de grande chose doit vivre comme s'il ne devait jamais mourrir !"
attention je mords
Bye
Shugo78 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/06/2007, 21h46   #5 (permalink)
Débutant(e)
 
Avatar de ..::snake::..
 
Date d'inscription: mai 2007
Localisation: Toujours en Question
Âge: 22
Messages: 323
Envoyer un message via MSN à ..::snake::..
Par défaut

La portabilitée , c'est quoi ?
..::snake::.. est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/06/2007, 22h21   #6 (permalink)
Membre Expert
 
Avatar de Shugo78
 
Date d'inscription: mars 2007
Localisation: ile-de-france
Âge: 14
Messages: 1 056
Envoyer un message via MSN à Shugo78
Par défaut

En informatique, la portabilité d'un programme est caractérisée par sa capacité à fonctionner plus ou moins facilement dans différents environnements d'exécution tels que Windows, Unix ou encore Mac
__________________
Le savoir est un droit universel, libérez le code source
Mon site
Aidez nous à militer pour l'adoption d'un nouveau smiley
"C'est en s'attardant en bas que l'on monte plus haut "
"Un home qui veut faire de grande chose doit vivre comme s'il ne devait jamais mourrir !"
attention je mords
Bye
Shugo78 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/06/2007, 22h26   #7 (permalink)
Débutant(e)
 
Avatar de ..::snake::..
 
Date d'inscription: mai 2007
Localisation: Toujours en Question
Âge: 22
Messages: 323
Envoyer un message via MSN à ..::snake::..
Par défaut

Je comprend bien maintenat !

Et pour ma question ,
Pourquoi ce n'est pas le meme programme si en le compile sous windows ou sous linux ?


Est ce que c'est les bibliotheque et library qui sont différente depuis l'un a l'autre ?.
..::snake::.. est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/06/2007, 23h20   #8 (permalink)
Membre Expert
 
Avatar de Shugo78
 
Date d'inscription: mars 2007
Localisation: ile-de-france
Âge: 14
Messages: 1 056
Envoyer un message via MSN à Shugo78
Par défaut

Peut être utilise t-il des librairies qui ne sont pas portables ?
Ou des appels systèmes, ou de la programmation systèmes spécifiques à Unix(threads, sockets, etc...) ?
Ou encore des normes de fichiers différentes(POSIX, API windows) ?
__________________
Le savoir est un droit universel, libérez le code source
Mon site
Aidez nous à militer pour l'adoption d'un nouveau smiley
"C'est en s'attardant en bas que l'on monte plus haut "
"Un home qui veut faire de grande chose doit vivre comme s'il ne devait jamais mourrir !"
attention je mords
Bye
Shugo78 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/06/2007, 00h13   #9 (permalink)
Débutant(e)
 
Avatar de ..::snake::..
 
Date d'inscription: mai 2007
Localisation: Toujours en Question
Âge: 22
Messages: 323
Envoyer un message via MSN à ..::snake::..
Par défaut

Encore est ce que les biblio de Linux et windows leur contenu synthax est le meme ?

Merci , parce que je ne comprend pas trop bien avec tes explication Shugo78.

je sais que tu fait des effort pour m'expliquer , mais bon ....
..::snake::.. est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/06/2007, 14h27   #10 (permalink)
Responsable Algorithmes
 
Avatar de millie
 
Date d'inscription: juin 2006
Localisation: Luxembourg
Âge: 23
Messages: 5 442
Par défaut

Le compilateur ne génère pas du tout le même code tout simplement.

Les fichiers exécutables ont des formats différents (format ELF sous Linux / format PE sous windows, bibliothèque partagée .so sous Linux, bibliothèque dynamique .dll sous Windows). Il y a des formats différents pour les autres systèmes (solaris...)

De plus, la plupart du temps, ces programmes font des appels systèmes qui peuvent être différents suivant le système.

Les architectures sont différentes, ça peut pas marcher :
Exemple code assembleur d'un hello world sur un SPARC :

Code :
        .file   "test.c"
        .section        ".rodata"
        .align 8
.LLC0:
        .asciz  "Chaine"
        .section        ".text"
        .align 4
        .global main
        .type   main, #function
        .proc   04
main:
        !#PROLOGUE# 0
        save    %sp, -112, %sp
        !#PROLOGUE# 1
        sethi   %hi(__iob+32), %g1
        or      %g1, %lo(__iob+32), %o0
        sethi   %hi(.LLC0), %g1
        or      %g1, %lo(.LLC0), %o1
        call    fprintf, 0
         nop
        mov     0, %g1
        mov     %g1, %i0
        ret
        restore
        .size   main, .-main
        .ident  "GCC: (GNU) 3.3.5"
Sous Linux :
Code :
        .file   "test.c"
        .section        .rodata
.LC0:
        .string "Chaine"
        .text
.globl main
        .type   main, @function
main:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $8, %esp
        andl    $-16, %esp
        movl    $0, %eax
        subl    %eax, %esp
        subl    $8, %esp
        pushl   $.LC0
        pushl   stderr
        call    fprintf
        addl    $16, %esp
        movl    $0, %eax
        leave
        ret
        .size   main, .-main
        .section        .note.GNU-stack,"",@progbits
        .ident  "GCC: (GNU) 3.3.2 20031022 (Red Hat Linux 3.3.2-1)"
Ensuite, même sur un même processeur, l'édition des liens va être complétement différente

Sous Windows XP :
Code :
	.file	"test.c"
	.def	___main;	.scl	2;	.type	32;	.endef
	.section .rdata,"dr"
LC0:
	.ascii "Chaine\0"
	.text
.globl _main
	.def	_main;	.scl	2;	.type	32;	.endef
_main:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$24, %esp
	andl	$-16, %esp
	movl	$0, %eax
	addl	$15, %eax
	addl	$15, %eax
	shrl	$4, %eax
	sall	$4, %eax
	movl	%eax, -4(%ebp)
	movl	-4(%ebp), %eax
	call	__alloca
	call	___main
	movl	$LC0, 4(%esp)
	movl	__imp___iob, %eax
	addl	$64, %eax
	movl	%eax, (%esp)
	call	_fprintf
	movl	$0, %eax
	leave
	ret
	.def	_fprintf;	.scl	3;	.type	32;	.endef
__________________
Je ne répondrai à aucune question technique en privé

Dernière modification par millie ; 02/06/2007 à 14h41
millie est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/06/2007, 14h40   #11 (permalink)
Membre Expert
 
Avatar de Shugo78
 
Date d'inscription: mars 2007
Localisation: ile-de-france
Âge: 14
Messages: 1 056
Envoyer un message via MSN à Shugo78
Par défaut

La synthaxe des biblio(standards ou portables) est la même
Mais come l'a dit milie, les formats des fichier éxécutables ne sont pas les mêmes.

Et les programmes peuvent faire des appels systèmes propres à un système(comme fork() sous Unix et Create_Thread sous windows).
__________________
Le savoir est un droit universel, libérez le code source
Mon site
Aidez nous à militer pour l'adoption d'un nouveau smiley
"C'est en s'attardant en bas que l'on monte plus haut "
"Un home qui veut faire de grande chose doit vivre comme s'il ne devait jamais mourrir !"
attention je mords
Bye
Shugo78 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/06/2007, 16h28   #12 (permalink)
Membre éprouvé
 
Avatar de jlliagre
 
Date d'inscription: juin 2007
Localisation: Paris
Messages: 404
Par défaut

Citation:
Envoyé par Shugo78
La synthaxe des biblio(standards ou portables) est la même
Non, on ne peux pas parler de syntaxe pour les bibliothèques puisqu'il s'agit d'un format binaire (ELF pour les bibliothèques et exécutables de tous les Unix actuels). Tu dois confondre avec la syntaxe des fichiers ".h" généralement associés à ces bibliothèques, qui bien sur doivent respecter la syntaxe du langage utilisé (C, C++ ou autre).
Citation:
Mais come l'a dit milie, les formats des fichier éxécutables ne sont pas les mêmes.
Seuls les sources doivent respecter un format commun. Les exécutables, objets et bibliothèques sont spécifiques à une architecture (CPU) et doivent se conformer à une format supporté par les outils et l'O/S.
Citation:
Et les programmes peuvent faire des appels systèmes propres à un système(comme fork() sous Unix et Create_Thread sous windows).
C'est vrai. La portabilité ne se limite pas à ça.
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/06/2007, 17h06   #13 (permalink)
Membre Expert
 
Avatar de Shugo78
 
Date d'inscription: mars 2007
Localisation: ile-de-france
Âge: 14
Messages: 1 056
Envoyer un message via MSN à Shugo78
Par défaut

Citation:
Envoyé par jiliagre
Non, on ne peux pas parler de syntaxe pour les bibliothèques puisqu'il s'agit d'un format binaire (ELF pour les bibliothèques et exécutables de tous les Unix actuels). Tu dois confondre avec la syntaxe des fichiers ".h" généralement associés à ces bibliothèques, qui bien sur doivent respecter la syntaxe du langage utilisé (C, C++ ou autre).
Non je me suis trompé, je parlais de .h à inclure dans le code(stdlib.h).
Citation:
Envoyé par jiliagre
Seuls les sources doivent respecter un format commun. Les exécutables, objets et bibliothèques sont spécifiques à une architecture (CPU) et doivent se conformer à une format supporté par les outils et l'O/S.
On parle de sources qui peuvent s'adapter dans plusieurs OS.
__________________
Le savoir est un droit universel, libérez le code source
Mon site
Aidez nous à militer pour l'adoption d'un nouveau smiley
"C'est en s'attardant en bas que l'on monte plus haut "
"Un home qui veut faire de grande chose doit vivre comme s'il ne devait jamais mourrir !"
attention je mords
Bye
Shugo78 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/06/2007, 18h52   #14 (permalink)
Débutant(e)
 
Avatar de ..::snake::..
 
Date d'inscription: mai 2007
Localisation: Toujours en Question
Âge: 22
Messages: 323
Envoyer un message via MSN à ..::snake::..
Par défaut

Merci a vous tout , mais j'ai rien chopé

C'est pas de votre faute non plus , mais c'est moi

une question :

le format de l'exécution sur windows c'est .exe et sous unix ?
..::snake::.. est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/06/2007, 19h02   #15 (permalink)
Membre éprouvé
 
Avatar de jlliagre
 
Date d'inscription: juin 2007
Localisation: Paris
Messages: 404
Par défaut

Citation:
Envoyé par __snake__
le format de l'exécution sur windows c'est .exe et sous unix ?
Ce n'est pas le format, c'est le suffixe.
Sous Unix, il n'y a pas besoin de suffixe.
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide