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 :

Compiler pour autre plateforme


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Par défaut Compiler pour autre plateforme
    Bonjour,

    J'ai developpé un programme en C (qui est compatible multi-plateforme) avec CodeBlocks sous Windows.
    Je suis parvenue à le compiler pour faire le .exe sous windows (et qui fonctionne).

    Mon pb c'est qu'il faut que je livre ce .exe pour qu'il fontionne sous AIX et un autre sous MVS et un autre sous HP-UX... et bien sûr je ne dispose pas de tous ces type de machine pour pouvoir compiler mon source dessus.

    Par contre j'ai un Ubuntu pour pouvoir tester mes .exe des plateformes UNIX.

    Je sais que GCC est un compilateur multi-plateforme, mais à ce que j'ai compris, il faut l'installer et le compiler sur la plateforme sur laquelle on souhaite complier... donc tjrs pb vu que je n'ai pas la plateforme....

    Et à priori, j'ai cru comprendre que même pour mes plateforme UNIX si je compile sous ubuntu, je ne serais pas compatible AIX...
    Alors j'ai lu des chose sur la crosscompil, mais là encore, il faut installer des trucs sur les plateformes... et à vrai dire je m'y perd un peu...

    En fait, n'y aurait-il pas plus simplement un "outil/logiciel/compilateur" (enfin qq chose) qui me permette de générer mes .exe depuis mon windows (ou de mon ubuntu) pour toutes mes plateformes (comme il peut en exister pour le perl).

    Merci de votre aide

    Lilou

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Malheureusement, il n'y a pas d'outil tout prêt afin de compiler pour toute les plateformes existantes.
    Le plus simple, c'est d'avoir une machine de développement (comprendre endroit où on peut compiler) avec le système d'exploitation cible.
    Lorsque ce n'est pas possible, cela se complique légèrement. Il faut faire de la cross compilation.
    La cross compilation, c'est demander à un compilateur d'utiliser un certain format avec certaines bibliothèques (qui ont été compilé pour la plateforme cible) et de compiler.

    Pour Windows vers Unix, on peut utiliser Cygwin, je crois. Peut être Code::Blocks s'il est bien configuré.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut
    Comme le dit LittleWhite, tu va devoir faire de la cross-compilation.

    Donc je te conseille de chercher un cross-compilateur AIX, MVS et HP-UX (donc 3 cross-compilateurs en fait).

    Je pense (mais pas sûr :p) que tu devrais pouvoir les trouver plus facilement sous Linux en tant qu'extension de gcc.

  4. #4
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Salut,

    Je ne sais pas si ça peut t'aider, mais voici un liens pour un cross-compilateur qui supporte beaucoup de plateformes CodeSourcery (G++). Il est disponible sous linux et sous windows.
    Je l'utilise pour faire de la cross-compilation ARM7/9/11 sous linux.

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par lilouwe Voir le message
    En fait, n'y aurait-il pas plus simplement un "outil/logiciel/compilateur" (enfin qq chose) qui me permette de générer mes .exe depuis mon windows (ou de mon ubuntu) pour toutes mes plateformes (comme il peut en exister pour le perl).
    A priori non, pour la simple raison que le ".exe" est fait de traduction en langage machine....

    D'où l'optique de transformer en bytecode de Java par exemple.....


    Maintenant, AIX ou HPUX ont des unixoides...

    Si ton code est totlalement standard, déjà tu gagnes un peu en ayant une compil avec un flag hyper-simple, en gros rien sauf peut-être un -O .. Qui ne nécessitera rien d'autre...

    Si par contre tu as besoin d'optimiser réellement, il faudra alors inclure les flags spécifiques pour ces plateformes (décrits dan les man pages de gcc).



    Mais de toutes façons la solution la plus simple est d'avoir la plateforme sous la main...

    C'est aussi la plus sûre, car même si tu trouvais un outil de "cross-compiling" adéquat (et franchement je ne sais pas si ça existe : EDIT ok le lien cité ci-dessus est intéressant ), il faudrait être certain que les librairies dynamiques utilisées (DLL, .so) soient exactement au même endroit et avec les mêmes versions entre la configuration stockée et celle sur laquelle ce sera déployé....

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Par défaut
    Merci pour vos retours.

    Je suis en pleine recherche sur la cross compil, gcc (ici et ailleurs) ... c'est une horreur : il faut compiler gcc et les utils pour compiler.. : et encore il faut également trouver le lib pour le système cible...

    (j'aurai dû me renseigner avant de choisir mon langage sur comment le compiler ; avec perl c'était super simplement (perl2exe), mais alors les perf de l'exe 0,0)


    Citation Envoyé par ManusDei
    ...je te conseille de chercher un cross-compilateur AIX, MVS et HP-UX (donc 3 cross-compilateurs en fait).
    .. en tant qu'extension de gcc.
    J'ai cherché des cross compiler du genre "cross compiler C AIX on ubuntu" : je crois bien que je ne trouve rien, ou alors j'y comprends rien... ça à l'air super compliqué de mettre en place un système de cross compil.

    Et je ne vois pas trop comment on fait pour utiliser ça avec gcc : il faut que je continue de lire la doc gcc.
    Moi qui suis développeur, mais aussi plutôt end-user, débarquer dans le monde linux n'est pas une mince affaire.

    Citation Envoyé par souviron34
    Mais de toutes façons la solution la plus simple est d'avoir la plateforme sous la main...

    C'est aussi la plus sûre, car même si tu trouvais un outil de "cross-compiling" adéquat (et franchement je ne sais pas si ça existe : EDIT ok le lien cité ci-dessus est intéressant ), il faudrait être certain que les librairies dynamiques utilisées (DLL, .so) soient exactement au même endroit et avec les mêmes versions entre la configuration stockée et celle sur laquelle ce sera déployé....
    Oui, c'est clair que ce serait plus simple, mais malheureusement je n'ai ni les moyens, ni la place d'acheter un AIX par exemple ... il faudrait que je regarde les occas peut-être et pas de bol si mon client et sur HP-UX ?

    Et effectivement j'ai une grosse crainte avec la crosscompil, de passer des jours pour essayer de monter tout ça et enfin m'apercevoir que ça ne va pas ==> soit je change de langage (mais j'avais choisit celui-là pour les perf) ; soit je compile chez le client en espérant qu'il a un compilateur d'installer sur sa machine, mais ça la fou mal quand même et pour livrer des patch et des évo il faut recommencer...c'est pas simple

    Comment font tous les autres programmeurs/éditeurs de logiciel ? Ils n'ont quand même pas toutes les machines dans toutes les config.
    Vous allez me dire, d'où la nécessité de précisez "système supporté" mais quand même, il y en a qui sont multi-plateformes et qui doivent être en C...


    Bon, je retourne à mes recherches et lectures de doc.

    J'espère encore m'en sortir et ne pas devoir tout recommencer

    A+

    Lilou

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Par défaut
    Citation Envoyé par Elijha
    voici un liens pour un cross-compilateur qui supporte beaucoup de plateformes CodeSourcery (G++).
    Merci je vais plancher un peu plus là-dessus : je vais essayer de m'assurer que ça correspond bien à ce que je recherche et comprendre leur système de licences

    Info en plus pour ceux qui ont le même pb :
    Supported host systems
    • GNU/Linux®
    • Microsoft Windows®
    • Sun Solaris®

    Supported target systems
    • ARM®, XScale®
    • ColdFire®
    • IA32, AMD64®, EM64T®
    • MIPS®
    • PowerPC®
    • SPARC®
    • And more!

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    En entreprise, ce que l'on peut retrouver:

    - Cross compilation (Souvent de Linux -> machines cibles) tout cela automatise (cela se compile toutes les nuits)

    Apres, oui les debuts en cross compilation sont un peu durs ... mais apres cela passe mieux (enfin j'ose croire )

    Sinon on puet peut etre imagine compiler le programme sur une machine virtuelle.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Par défaut
    donc si la crosscompil Linux==> autres plateformes se fait par les entreprises je suis quand même sur une bonne piste pour faire qq chose de propre

    oui j'ai bien pensé aux virtual machine (c'est comme ça que je fais tourner mon ubuntu et j'ai un SUN aussi), mais je ne sais pas si je vais trouver qq pour AIX ? et à installer pfuuu

    Bon je pars à la recherche d'une VM AIX déjà ... si qq a déjà une expérience dans ce domaine Merci

  10. #10
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut
    Citation Envoyé par lilouwe Voir le message
    Je suis en pleine recherche sur la cross compil, gcc (ici et ailleurs) ... c'est une horreur : il faut compiler gcc et les utils pour compiler.. : et encore il faut également trouver le lib pour le système cible...
    En fonction de ta distro, il y a moyen d'utiliser le gestionnaire de paquetages pour que ça s'installe presque tout seul (et surtout sans douleur).

    apt-get ou synaptics sous debian, ubuntu, et yum sous fedora.

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par lilouwe Voir le message
    soit je compile chez le client en espérant qu'il a un compilateur d'installer sur sa machine, mais ça la fou mal quand même et pour livrer des patch et des évo il faut recommencer...c'est pas simple

    Comment font tous les autres programmeurs/éditeurs de logiciel ? Ils n'ont quand même pas toutes les machines dans toutes les config.


    La plupart des programmeurs/éditeurs de logiciel développent sur une plateforme, et le jour où ils ont un client qui a une autre plateforme, ils s'adaptent dans les termes prévus par le contrat, donc en général bien sûr que si, ça va se compiler chez le client... puisque c'est à la demande du client que ça doit tourner sur cette machine...(ou le client prête une machine)

    Quand c'est des gros, ils peuvent avoir un certain parc de machines.. Mais on n'a jamais tout...

    La "vraie" cross-compilation "ex-nihilo" est extrêmement rare...

    Maintenant, si tu as fait de la pub mensongère en disant "ça tourne partout", ben.... fallait pas


    C'est bien la raison pour laquelle beaucoup de (tous les ?) "packages" généralistes sont fournis avec les sources et des procédures d'installation...
    (gnuplot, libtiff, lipjpeg, mpeg, ...)

    Fournir des exe est bien plus restrictif...

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Par défaut
    Citation Envoyé par ManusDei Voir le message
    En fonction de ta distro, il y a moyen d'utiliser le gestionnaire de paquetages pour que ça s'installe presque tout seul (et surtout sans douleur).

    apt-get ou synaptics sous debian, ubuntu, et yum sous fedora.

    Je suis sous Ubuntu 8.04 et j'ai récupéré le package de GCC sur apt://gcc/.
    Ca oui, c'est facile à installer

    Mais est-ce qu'un package va me permettre de compiler en binaire pour une autre destination ? J'avais l'impression qu'il fallait justement que je recompile autrement gcc pour pouvoir justement faire de la cross compil.

    Du coup pour essayer, je tente de faire un binaire à partir de mon source C sur mon Ubuntu pour l'exécuter sur mon windows.

    J'ai lancé la commande "gcc monsource.c -mtune=i386 -o monbin.exe".

    1er test : j' exécute mon binaire sur ubuntu : résultat ça tourne bien ==> pas bon signe pour windows

    2ème test : je transfert mon binaire sur mon windows et j'exécute : message du genre "erreur de processeur"

    ==> soit j'ai pas choisit le bon mtune j'ai essayé qq autres : pas mieux !
    ==> soit ma commande n'est pas correct pour faire de la cross compil
    ==> soit le gcc issu d'un package ne permet pas de faire de la cross compil ?

    Merci

  13. #13
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    L'option -mtune ne permet pas de faire de la cross compilation ... mais juste de la compilation (et optimisation) dependante a l'architecture (32 bits / 64 bits).
    Apres, il faut un compilateur specifique (gcc par exemple, mais specifique) pour compiler pour cette plateforme (souvent ce que l'on voit c'est gcc-arm) (Il doit meme avoir un paquet deja pret pour arm)
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Par défaut
    Voilà mon avancement au cas où qq se posent les même questions que mois (déjà 2 jours de recherche ), j'espère que ça pourra aider !


    Avec tout ça j'ai compris les grands principe de la cross compil : donc c'est ce que je craignais, il faut recompiler le compilateur...
    En fait il faut : les sources d'1 compilateur (GCC) + des sources utilitaires appelés binutils + des librairies du système cible target. Et il faut recompiler le compilateur + les binutils avec les lib du système cible.

    J'essaye pour tester (avec bcp bcp de messages d'erreur) de monter un env. de coss compil pour compiler en Win sous Ubuntu avec ça :
    http://www.dumbbell.fr/howto/win32-c...lation.fr.html

    Je me dit que si je parviens à faire ça, je devrais pouvoir le faire pour d'autre "target" que windows !

    Avec GCC 4.4.3 ça n'allait pas du tout message d'erreur de lib... et avec GCC 3.4.0 impeccable, j'ai mon env de cross compil. (bon je vais quand même essayer avec un gcc plus récent)

    Mon bin Windows fonctionne.

    Donc maintenant reste à faire de même pour un target SUN (sur Intel et sur Spark), un AIX (5.3), et un HP-UX 11i et enfin, mais ça c'est la cerise sur le gâteau, MVS.


    Là pour windows c'était "presque" facile car j'avais MinGW (toolkit pour faire des bin windows) !!

    Mais là ça se corse encore ==> où vais-je trouver ce genre d'outils pour SUN et AIX ou HP ?

    Comment ça s'appelle d'ailleurs/Qu'est-ce que c'est : des library de système ?
    (portage minimal de gcc sous le système cible ?)




    ----
    P.S. :
    - pas trouvé de VM pour AIX
    - Je n'ai pas poursuivi les pistes de QT4, pensant que GCC ça devrait le faire
    - liste de soft de compil, mais j'ai pas trouvé mon bonheur : http://www.compilerconnection.com/co.../companies.htm
    - il y a ça aussi apparemment, mais ça ne correspondait pas à mon besoin :
    http://tack.sourceforge.net/about.html
    - téléchargé la version d'évaluation de CodeSourcery, mais pas encore testé et le prix des licences et assez affolent car c'est par type de destination... le ROI de mon appli va être énorme, mais c'est mieux que rien peut être ???

  15. #15
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Citation Envoyé par lilouwe Voir le message
    - Je n'ai pas poursuivi les pistes de QT4, pensant que GCC ça devrait le faire
    Euh ... là je ne vois pas du tout le rapport entre Qt4 (une bibliothèque) et GCC (une suite de logicielle pour la compilation)
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Par défaut
    ha euh désolée , c'est pour ça aussi que je comprenais pas bien : j'en encore du mal à rentrer dans ce monde.

    J'avais vu aussi des trucs "Paquet : toolchain-source", mais j'ai pas bien compris la différence avec mes sources des binutiles et de GCC...

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Par défaut
    Citation Envoyé par lilouwe Voir le message
    Là pour windows c'était "presque" facile car j'avais MinGW (toolkit pour faire des bin windows) !!

    Mais là ça se corse encore ==> où vais-je trouver ce genre d'outils pour SUN et AIX ou HP ?

    Comment ça s'appelle d'ailleurs/Qu'est-ce que c'est : des library de système ?
    (portage minimal de gcc sous le système cible ?)
    Ca s'appelle : headers and libraries from target
    Mais alors par contre à quoi ça correspond exactement ??

    Mais alors comment les obtenir lorsqu'on a pas la machine ?
    (Pour SPARC, ça à l'air de se trouver sur le net)

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/08/2011, 10h08
  2. Compiler pour toutes les plateformes
    Par buzzkaido dans le forum Qt
    Réponses: 4
    Dernier message: 31/10/2009, 02h00
  3. [Free Pascal] Compiler Free Pascal pour cross-compiler vers une autre plateforme
    Par petitprince dans le forum Free Pascal
    Réponses: 5
    Dernier message: 05/10/2009, 17h48
  4. Compiler pour une autre version Office
    Par Pascal Lob dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/12/2008, 18h22
  5. compiler pour d'autre poste
    Par biloute76 dans le forum Visual C++
    Réponses: 2
    Dernier message: 17/06/2007, 22h13

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