Bonjour, je recherche un compilateur C -> x86 32bits, qui tourne sous windows et qui fournit un fichier binaire executable sur une carte équipée d'un processeur Intel Core 2 Duo. Je ne peux pas utiliser de logiciel payant. Je vous remercie d'avance.
Bonjour, je recherche un compilateur C -> x86 32bits, qui tourne sous windows et qui fournit un fichier binaire executable sur une carte équipée d'un processeur Intel Core 2 Duo. Je ne peux pas utiliser de logiciel payant. Je vous remercie d'avance.

Si tu es habitué à Visual Studio, tu as la version Express qui est gratuite. Mais ça te génèrera des .exe, je sais pas si c'est ça qu'il faut pour ta carte.
Sinon en compilateur gratuit, tu as MinGW.
Et si tu es un fanboy de Linux tu peux passer par Cygwin.
Tout ça donnera un .exe, qui ne marchera que sous Windows (kernel32.dll nécessaire etc.)
Si tu veux un code "nu", il me semble que gcc sous linux peut le faire.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Non, ce que je cherche c'est vraiment du code pure, pas du code packager pour un systeme (Windows, linux, Minix,....). Un outil qui converti du langage C vers X86 Intel Core2 Dual. Par contre cet outil doit tourner sur une platforme WindowsXP/Vista. Eventuellement cet outil peut etre presente sous forme de fichier source generique qui peut etre insere dans un dev pour platforme windows.
PSesole pour les accents

Avec cygwin, tu peux compiler avec gcc non ?Tout ça donnera un .exe, qui ne marchera que sous Windows (kernel32.dll nécessaire etc.)
Pour ton problème je ne suis pas sûr que ce soit un compilateur qu'il te faille. Si j'ai bien compris, tu veux exécuteur un programme sur le processeur sans système d'exploitation. Comment tu peux faire à part faire ton programme en assembleur ?
Le gcc de cygwin compile pour cygwin, c'est-à-dire pour "windows avec cygwin1.dll": C'est plus un MinGW qu'autre chose...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.









Euh... MinGW, c'est gcc generant sans autres dependances que ce qui est normalement disponible sous Windows (peut-etre une petite lib en plus); Cygwin c'est toute une couche POSIX.
Le gcc de cygwin compile au choix pour cygwin ou pour mingw.
Il devrait etre possible de compiler gcc pour qu'il compile sous Windows pour d'autres cibles (x86 ou autre, apres tout une partie du financement de gcc est faite par ceux qui en ont besoin pour de l'embarque).
Apparement les GCC qu'ils soient sous cygwin ou minGW ajoutent des accès a une ou plusieurs DLL, donc pas utilisable. A moins qu'il y ai un paramètrage special qui permettrai de créer --target=core2duo, mais là je ne sais pas comment faire. J ai aussi essayé TCC, borland et visual, mais c'est toujours pareil. Intel m'a répondu en me disant qu'il faut créer un cross-compiler avec GCC mais là, la doc de GCC est beaucoup trop complexe et la commande -b core2duo doit être crée. Comment et par où commencer là est la grande question. Merci pour votre aide. Cordialement. Daniel









Le problème n'est vraisemblablement pas que la documentation est trop complexe, c'est que tu n'as pas les prérequis pour la comprendre. Essayons un petit peu, mais c'est difficile de deviner ce que tu sais et que tu ne sais pas (je sais, c'est pas facile non plus pour toi de dire ce que tu ne sais pas, mais les forums ne sont vraisemblablement pas le meilleur moyen pour apprendre ce genre de choses). Le résultat de la compilation d'unité de translation (.obj ou .o) va dépendre de 3 choses:
- que le processeur ait été mis dans un état convenable avant l'appel de ce code (passage en mode protégé pour un X86, alignement correct de la pile, ...)
- il va peut-être y avoir des appels à des fonctions de support (pour compiler du C vers un core2, je doute que ce soit nécessaire, un exemple typique est la gestion des flottants)
- il va y avoir des appels à des fonctions qui ne sont pas définies dans l'unité de compilation (bibliothèque standard par exemple)
Le code généré va aussi respecter diverses conventions pour que l'intégration avec l'OS cible se passe bien.
Quand on linke un programme, l'éditeur de liens combine en fait un code d'initialisation, les TU du programme et les bibliothèques. Certaines de ces bibliothèques sont dynamiques et tu en as besoin à l'exécution (en particulier, la bibliothèque standard l'est souvent).
Si tu vises l'embarqué, il te faut:
- fournir un code d'initialisation (qui va devoir être écrit en assembleur au moins en partie) qui mets tout en place
- t'arranger pour ne pas avoir besoin d'une bibliothèque de support (ou bien la fournir lors de l'édition de lien en vérifiant qu'elle ne suppose pas le support de l'OS, ce qui ne doit pas souvent être le cas pour du C)
- ne pas faire d'appel à la bibliothèque standard ou du moins te restreindre à ce qui ne dépend pas de l'OS et ne pas la lier dynamiquement
- t'arranger pour que le résultat de l'édition de lien soit compréhensible par ta carte (objcopy peut aider). Les formats utilisés par les OS sont rarement directement utilisables par les cartes.
Merci Jean-Marc pour toutes ces bonnes remarques. Juste pour information, le code que j'ai écris (tout en assembleur) tourne déjà sur la carte avec le core2 duo. J'ai fait la traduction de sources assembleurs vers le langage C afin de pouvoir continuer plus facilement sa maintenance, c'est un programme qui évolue au fil du temps et des processeurs Intel. Il faut maintenant que j'étudie avec attention binutils pour paramétrer un gcc si je n'y arrive pas il ne me restera plus qu'a investir dans le cross-conpilateur d'intel. Je remercie tous ceux qui ont essayé d'apporter une réponse à ma question. Cordiales salutations. Daniel
Ce qu'il te faut normalement, c'est ce que l'on appelle un "relogeur absolu", c'est à dire un linker qui produit une image binaire exacte en mémoire et non pas un exécutable relogeable. En gros, il produit de façon statique ce que fait normalement le système d'exploitation après chargement et logement de l'exécutable, juste avant de sauter vers le point d'entrée du programme. Bien entendu, là, pas question d'utiliser des librairies dynamiques, tout est lié en statique.
Après, se pose le problème d'avoir une libc ROMable, et bien entendu de n'utiliser aucune fonction habituellement supportée par le système d'exploitation !
Ton binaire est ensuite claqué dans la ROM de la carte embarquée, exactement comme tu le ferais pour une BIOS ou un bootstrap d'OS.
Essaie peut-être d'aller voir du côté de Paradigm C++, qui est un compilateur de ce genre...
Mac LAK.
___________________________________________________
Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.
Sources et composants Delphi sur mon site, L'antre du Lak.
Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.
Rejoignez-nous sur : ► Serveur de fichiers [NAS] ► Le Tableau de bord projets ► Le groupe de travail ICMO
Bon hé bien j'ai trouvé la solution.
1 installer cygwin sur le pc
2 télécharger les sources de CGG
3 télécharger les sources de binutils
4 telecharger 2 autres souces demandé par binutils et gcc
5 recompiler les un après les autres pour i586-elf
6 faire un makefile qui pointe sur ce nouveau i586-elf-gcc
Et voila, mon cross-compilateur fonctionne très bien.
Il faut compter une bonne journée pour tout faire....
Je remercie beaucoup les auteurs de cette page
http://wiki.osdev.org/GCC_Cross-Compiler
Encore merci a tous. Cordiales salutations
Partager