![]() |
| 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é. | |||||||
|
|||||||
| Linux Forum d'entraide sur le système Linux. Avant de poster -> Tutoriels Linux, F.A.Q Linux |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Débutant(e)
|
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 . |
|
|
|
|
|
#2 (permalink) |
|
Membre Confirmé
![]() |
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 |
|
|
|
|
|
#4 (permalink) |
|
Membre Expert
![]() |
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
|
|
|
|
|
|
#6 (permalink) |
|
Membre Expert
![]() |
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
|
|
|
|
|
|
#8 (permalink) |
|
Membre Expert
![]() |
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
|
|
|
|
|
|
#10 (permalink) |
![]() Date d'inscription: juin 2006
Localisation: Luxembourg
Âge: 23
Messages: 5 442
|
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"
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)"
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 |
|
|
|
|
|
#11 (permalink) |
|
Membre Expert
![]() |
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
|
|
|
|
|
|
#12 (permalink) | |||
|
Membre éprouvé
![]() Date d'inscription: juin 2007
Localisation: Paris
Messages: 404
|
Citation:
Citation:
Citation:
|
|||
|
|
|
|
|
#13 (permalink) | ||
|
Membre Expert
![]() |
Citation:
Citation:
__________________
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
|
||
|
|
|
![]() |
![]() |
||
Pourquoi la compilation entre unix et windows est différente ?
|
||
| Outils de la discussion | |
|
|