Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cross compilation avec SDL

Sujet résolu
    4 août 2008 à 14:48:51

    Bonjour,
    j'essaie de compiler un projet pour Windows depuis linux avec mingw32 et lorsque je compile, j'ai beaucoup d'erreurs dont voici une partie :
    $ i586-mingw32msvc-gcc -o brik.exe afficherBrique.c afficherScore.c deplacerBalle.c deplacerBarre.c main.c toucheBrique.c zeroBrique.c -lmingw32 -lSDLmain -lSDL -lSDL_image -lSDL_ttf
    In file included from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/SDL/SDL_main.h:26,
                     from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/SDL/SDL.h:28,
                     from afficherBrique.c:3:
    /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/SDL/SDL_stdinc.h:72:20: error: iconv.h: Aucun fichier ou dossier de ce type
    /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/SDL/SDL_stdinc.h:169:22: error: alloca.h: Aucun fichier ou dossier de ce type
    In file included from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/SDL/SDL_main.h:26,
                     from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/SDL/SDL.h:28,
                     from afficherBrique.c:3:
    /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/SDL/SDL_stdinc.h:579: error: expected ‘)’ before ‘cd’


    Je pense que je n'ai pas installé quelque chose mais je ne vois pas quoi.
    Merci de m'aider à résoudre mon problème.
    • Partager sur Facebook
    • Partager sur Twitter
      6 août 2008 à 16:10:02

      AMHA ce n'est pas sur ce forum que tu trouveras de l'aide. La cross compilation n'est pas vraiment une affaire de "zéros".

      As tu pensé à poster sur des forum de communautées linuxiennes ? Ou tout simplement developpez.com par exemple ?


      Sinon tu peux toujours contourner ton problème en compilant sous Windows (toi même si tu as un Windows, ou en passant par quelqu'un d'autre). Ce n'est pas super, mais ça peut dépanner si tu ne t'en sors pas.
      • Partager sur Facebook
      • Partager sur Twitter
        6 août 2008 à 16:27:59

        Salut,

        error: iconv.h: Aucun fichier ou dossier de ce type
        error: alloca.h: Aucun fichier ou dossier de ce type

        Manifestement, il te manque une version cross-compilée de la libiconv, il te suffit d'en compiler une.

        Pour alloca, un petit tour dans le fichier d'en-tête SDL_stdinc :
        #if defined(HAVE_ALLOCA) && !defined(alloca)
        # if defined(HAVE_ALLOCA_H)
        #  include <alloca.h>
        # elif defined(__GNUC__)
        #  define alloca __builtin_alloca
        # elif defined(_MSC_VER)
        #  include <malloc.h>
        #  define alloca _alloca
        # elif defined(__WATCOMC__)
        #  include <malloc.h>
        # elif defined(__BORLANDC__)
        #  include <malloc.h>
        # elif defined(__DMC__)
        #  include <stdlib.h>
        # elif defined(__AIX__)
          #pragma alloca
        # elif defined(__MRC__)
           void *alloca (unsigned);
        # else
           char *alloca ();
        # endif
        #endif
        #ifdef HAVE_ALLOCA
        #define SDL_stack_alloc(type, count)    (type*)alloca(sizeof(type)*(count))
        #define SDL_stack_free(data)
        #else
        #define SDL_stack_alloc(type, count)    (type*)SDL_malloc(sizeof(type)*(count))
        #define SDL_stack_free(data)            SDL_free(data)
        #endif
        

        permet de constater que les développeurs de la SDL ont prévu l'éventualité de l'absence de cette fonction (qui n'est pas standard). Il faut juste faire en sorte, lors de la compilation, de faire définir les bons symboles par le préprocesseur (Autoconf peut faire ça tout seul, si tu es prêt à t'investir dans les Autotools).
        • Partager sur Facebook
        • Partager sur Twitter
          6 août 2008 à 20:20:07

          Je n'ai pas compris ce qu'il faut que je fasse ! Comment cross compiler libiconv ? C'est quoi Autocont, autotools ?
          • Partager sur Facebook
          • Partager sur Twitter
            6 août 2008 à 20:25:58

            Comment cross-compiler libiconv ? Ben, comment tu as fait pour cross-compiler la SDL ?
            • Partager sur Facebook
            • Partager sur Twitter
              6 août 2008 à 20:40:23

              Bah ce doit être ça le problème, j'ai jamais cross compiler la SDL. J'ai fait de la même manière que les programmes qui n'utilisent pas la SDL. J'ai compiler avec les lib de la SDL comme quand je compile sous Linux.
              • Partager sur Facebook
              • Partager sur Twitter
                6 août 2008 à 21:15:02

                Alors il ne faut pas t'étonner que ça ne marche pas...

                Un des principes de base de la cross-compilation, c'est qu'avant de pouvoir cross-compiler un programme utilisant une bibliothèque X, il faut disposer d'une version de X elle-même cross-compilée (et récursivement, si X dépend d'une bibliothèque Y, etc.).

                Avec les bibliothèques utilisant les Autotools, c'est en principe assez simple, il suffit de faire
                $ ./configure --build=i586-pc-linux-gnu --host=i586-pc-mingw32msvc
                make

                pour construire une version Windows ("i586-pc-linux-gnu" et "i586-pc-mingw32msvc" étant une notation désignant respectivement le système sur lequel sur tu compiles --- ici, GNU/Linux --- et le système pour lequel tu compiles).

                Je viens de tester avec la SDL, ça fonctionne parfaitement.
                • Partager sur Facebook
                • Partager sur Twitter
                  6 août 2008 à 22:26:54

                  Citation : gouttegd

                  Alors il ne faut pas t'étonner que ça ne marche pas...

                  Un des principes de base de la cross-compilation, c'est qu'avant de pouvoir cross-compiler un programme utilisant une bibliothèque X, il faut disposer d'une version de X elle-même cross-compilée (et récursivement, si X dépend d'une bibliothèque Y, etc.).


                  Ce n'est pas exactement vrai.
                  Il est tout à fait possible de cross-compiler un projet SDL depuis Linux1 en ayant comme target Windows en utilisant les DLL/headers de la SDL prévues pour Windows.

                  Mais en effet, tu n'utilisera pas les bibliothèques pour Linux mais celles de tu target.

                  1 si j'arrive à retrouver la procédure exacte j'en ferait part ici.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 août 2008 à 22:34:06

                    @ Nab : À condition que la DLL ait été compilée avec la version Windows de GCC. Si elle a été compilée avec Visual C++, je ne suis pas sûr que ça marche. À ma connaissance, les fichiers objets générés par GCC et ceux générés par Visual C++ ne sont pas compatibles entre eux.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 août 2008 à 23:33:44

                      Oui mais où je trouve le fichier "configure" ? Et je l'exécute où ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 août 2008 à 23:45:18

                        ... Dans les sources de la SDL. Pour compiler quelque chose (que ce soit avec un cross-compilateur ou un compilateur normal), il faut partir des sources, tu ne crois pas ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          7 août 2008 à 0:38:05

                          Dans les sources de la SDL, je ne trouve qu'un fichier "sdl-config" dans le dossier "usr/" et quand je rentre la commande que tu m'as donnée, j'obtiens une erreur car les paramètres ne sont pas corrects.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            7 août 2008 à 0:46:17

                            Bon, ne le prends pas mal, mais si tu ne peux même pas aller récupérer les sources d'une bibliothèque sur le site de ladite bibliothèque, je pense que la cross-compilation est pour l'instant au-delà de ta portée...

                            Pour info, une fois l'archive des sources décompressée, tu dois avoir un répertoire dont le contenu ressemble plus ou moins à ça (en fonction de la version --- ici, c'est la 1.2.13) :
                            $ ls SDL-1.2.13
                            BUGS                README.CVS      README.Watcom     autogen.sh
                            Borland.html        README.DC       README.WinCE      build-scripts
                            Borland.zip         README.MacOS    README.wscons     configure
                            COPYING             README.MacOSX   SDL.qpg.in        configure.in
                            CREDITS             README.MiNT     SDL.spec          docs
                            CWprojects.sea.bin  README.NDS      SDL.spec.in       docs.html
                            INSTALL             README.NanoX    TODO              include
                            MPWmake.sea.bin     README.OS2      VisualC.html      sdl-config.in
                            Makefile.dc         README.PicoGUI  VisualC.zip       sdl.m4
                            Makefile.in         README.Porting  VisualCE.zip      sdl.pc.in
                            Makefile.minimal    README.QNX      Watcom-OS2.zip    src
                            README              README.Qtopia   Watcom-Win32.zip  symbian.zip
                            README-SDL.txt      README.RISCOS   WhatsNew          test
                            README.AmigaOS      README.SVN      Xcode.tar.gz
                            README.BeOS         README.Symbian  acinclude.m4


                            Familiarise-toi d'abord avec la compilation d'un programme sous GNU/Linux, pour GNU/Linux. Après, tu pourras t'attaquer à la cross-compilation pour Windows ou autre chose.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              7 août 2008 à 0:57:45

                              Bah désolé mais bon, quand je télécharge la SDL, je prend toujours dans "Development Libraries" et je n'ai pas pensé à prendre dans les sources !!! Bon, cela n'empêche que j'ai configuré comme tu me l'as dit et j'ai fait un make et ben, j'ai toujours ces erreurs.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                12 août 2008 à 14:46:09

                                Bon, j'ai réussi à compiler mon projet !!! Mais maintenant, quand je l'exécute avec wine ou sous Windows, la fenêtre de mon programme apparaît et disparaît tout de suite après. J'ai mis des sorties de debug pour savoir où mon programme plantait et aucun de mes printf() ne marchait donc cela voudrait dire qu'il plante avant le main(). Enfin, je ne comprend pas très bien.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  14 août 2008 à 14:40:10

                                  J'ai quand même trouvé une solution à mon problème.
                                  Merci de votre aide tout de même.
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Cross compilation avec SDL

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown