Probleme de compilation flat binary ou plain binary sur windows [Résolu]

Signaler
Messages postés
32
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
26 septembre 2005
-
Messages postés
32
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
26 septembre 2005
-
Salut,
j'essaye de compiler un fichier C en binaire plat, c'est a dire le bytecode pur sans entete ni ajout de library.
J'ai essayé sous Linux ca marche tres bien, j'ai essayez sous windows et la impossible !!!
je ne comprend pas tous , quelqu'un peut il m'aider ?

cliquez ici pour voir la procedure d'essais

Sous linux:


Sous windows



Message d'erreur:
undefined reference to '_alloca' -> _alloca non définis, bah c'est pas moi qui à mis ça dans le source !!!
undefined reference to '__main' -> _main non définis, bah c'est pas moi qui à mis ça dans le source !!!




Lorsqu'on essaye d'aller plus loin, linkage directement en binaire on a le message d'erreur :
ld: PE operations on non PE file. -> Bah je ne veux pas faire de PE moi justement !!!!
(Les PE sont les formats d'exécutables sur windows)







Je ne comprend pas cette différences entre les deux OS sur une même appli portée.




D'ou viennent ces underscore '_' ? Comment s'en débarrasser ?

D'ou vient ce __main ? Comment s'en débarrasser ?

D'ou vient ce __alloca ? Comment s'en débarrasser ?

Pourquoi dois je passer "_main" au lieu de "main" comme point d'entrée ?

Bref comment compiler plain binary sous Windows avec gcc et lg ?.

Pourquoi ces différences entre les versions portées gcc et ld ?

Quelqu'un a t'il déja réussi a faire ca sous windows ?




Quelqu'un peut il maider ?

Merci d'avance

Hexanium

5 réponses

Messages postés
32
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
26 septembre 2005

Salut,



Bien en postant sur plusieurs forum j'ai trouvé des reponces a mes questions:

la synthese est ici en bas de l'article:

http://www.hexanium.com/hexatronic/other/binary_c_compile/binary_c_compile.htm

Merci à vous pour le coup de main !



Hexanium
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
"Pourquoi dois je passer "_main" au lieu de "main" comme point d'entrée ?"



Ben sous Windows la convention C (la __cdecl quoi) veut que les noms
des fonctions et des variables globales/statiques soient précédés d'un
underscore...



Pour ton problème c'est curieux...peut-être que la comparaison des
fichiers assembleurs générés avec l'option -S pourrait t'aider à
trouver?


---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Wah c'est cool que tu détailles problème et solution, si seulement tout le monde faisait ça ^^



Peitte remarque, dans ton code source du début, tu fais un int main() qui n'a pas de return 0, c'est mâl ;)



Le -S du objcopy peut aussi être remplacé par un -s dans ld non?



PS : Tout ça c'est pour un projet d'OS?

---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
"Bienvenue sur le site Hexatronic,

Un site dédié à l'électronique orienté robotique et programmation.

Vous y trouverez une partie avec des conseils et explications techniques ainsi
qu'une partie avec mes réalisations personnelles."



Bon jcrois que j'ai compris l'intérêt pour toi de faire du flat binary :D


---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/
Messages postés
32
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
26 septembre 2005

Salut Funto66,



En effet pour le return dans le main, c'est pas tres jolie mais c'est
plus facile a regarder le code C compilé puis désassembler apres. C'est
un code tres simple dont le but est d'analyser le code desassemblé.
Mais en effet c'est pas tres propre sans return.



Pour le 'S' en effet sur objcopy ou ld cela a le meme effet.



En enfin, en effet c'est un petit OS. :D !



Je le développais sur Linux mais pendant les vacances j'avais pas de Linux sous la main, un XP familliale c tout !

J'ai pas mal géléré avant de trouver la methode de compile flat sous windows.



Merci pour tous les coup de paluches et remarques.



Hexanium