IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Cherche compilateur C vers x86 32bits


Sujet :

C

  1. #1
    Membre actif
    Avatar de daniel06600
    Homme Profil pro
    Ingénieur Temps Réel, Android, Windows et Linux
    Inscrit en
    Décembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Temps Réel, Android, Windows et Linux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 41
    Billets dans le blog
    1
    Par défaut Cherche compilateur C vers x86 32bits
    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.

  2. #2
    Invité
    Invité(e)
    Par défaut
    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.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 407
    Par défaut
    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.

  4. #4
    Membre actif
    Avatar de daniel06600
    Homme Profil pro
    Ingénieur Temps Réel, Android, Windows et Linux
    Inscrit en
    Décembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Temps Réel, Android, Windows et Linux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 41
    Billets dans le blog
    1
    Par défaut
    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

  5. #5
    Invité
    Invité(e)
    Par défaut
    Tout ça donnera un .exe, qui ne marchera que sous Windows (kernel32.dll nécessaire etc.)
    Avec cygwin, tu peux compiler avec gcc non ?

    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 ?

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 407
    Par défaut
    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.

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Le gcc de cygwin compile pour cygwin, c'est-à-dire pour "windows avec cygwin1.dll": C'est plus un MinGW qu'autre chose...
    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).

  8. #8
    Membre actif
    Avatar de daniel06600
    Homme Profil pro
    Ingénieur Temps Réel, Android, Windows et Linux
    Inscrit en
    Décembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Temps Réel, Android, Windows et Linux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 41
    Billets dans le blog
    1
    Par défaut
    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

  9. #9
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    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.

  10. #10
    Membre actif
    Avatar de daniel06600
    Homme Profil pro
    Ingénieur Temps Réel, Android, Windows et Linux
    Inscrit en
    Décembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Temps Réel, Android, Windows et Linux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 41
    Billets dans le blog
    1
    Par défaut
    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

  11. #11
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    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

  12. #12
    Membre actif
    Avatar de daniel06600
    Homme Profil pro
    Ingénieur Temps Réel, Android, Windows et Linux
    Inscrit en
    Décembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Temps Réel, Android, Windows et Linux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 41
    Billets dans le blog
    1
    Par défaut
    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

Discussions similaires

  1. cherche compilateur Perl
    Par ekipmed dans le forum Langage
    Réponses: 4
    Dernier message: 19/10/2006, 10h47
  2. cherche compilateur C++ pour débuts
    Par flamant dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 16/09/2006, 13h27
  3. cherche compilateur C !
    Par M.a.n.u. dans le forum Choisir un environnement de développement
    Réponses: 4
    Dernier message: 12/09/2006, 22h57
  4. [PC] Cherche compilateur pour windows
    Par vincent0 dans le forum Cobol
    Réponses: 3
    Dernier message: 29/09/2005, 15h14
  5. [C#] Cherche compilateur idl
    Par lbosse dans le forum CORBA
    Réponses: 1
    Dernier message: 29/06/2004, 00h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo