Cross compilation avec SDL

Résolu
Pico51 Messages postés 716 Date d'inscription   Statut Membre Dernière intervention   -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai créer une application en SDL sous Linux et j'aimerais la cross compiler pour qu'elle fonctionne aussi sous Windows.
J'ai réussi à cross compiler une application qui n'utilise que les bibliothèques standards comme stdio et stdlib mais je ne sais pas du tout comment faire avec la SDL.
Je vous remercie de votre aide.
A voir également:

29 réponses

Pico51 Messages postés 716 Date d'inscription   Statut Membre Dernière intervention   69
 
Non, c'est tout aussi lent sur XP mais je me demande si ce n'est pas due à une fuite de mémoire de mon programme bien que je me demande pourquoi ça ne ralentit pas sous Ubuntu.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
D'après ce que j'ai lu sur le OOM killer de Linux, il est possible que la gestion optimiste de Linux sur la mémoire fasse que le programme va vite, et inversement sur Win, qui gère la mémoire différemment.
Utilise un profiler (gprof) pour voir où tu passe le plus de temps sous Win et sous Linux, tu pourra ensuite en tirer les conclusion (compilation avec l'option -q si je me souviens bien)
regarde là pour oom : https://linuxfr.org/forums/linux-redhat/posts/raisons-susceptibles-du-d%C3%A9clenchement-doom-killer ;)
0
Pico51 Messages postés 716 Date d'inscription   Statut Membre Dernière intervention   69
 
J'ai ajouté l'option -Q en compilant avec gcc puis avec i586-mingw32msvc-gcc et je vois que, avec gcc, ça prend plus de temps qu'avec mingw32 (2 ms secondes de plus, au total). Mais, je voudrais plutôt trouver où a lieu ma fuite de mémoire et j'aimerais savoir comment utiliser un compilateur avec gcc qui me dit, quand je le demande, la mémoire qui est allouée : par exemple, dans une fonction, je mets plusieurs breakpoint et à chaque fois, j'ai un message qui s'affiche avec la mémoire allouée ce qui me permet de savoir où se trouve le problème. Ou alors, il existe une fonction avec stdio.h ou stdlib.h qui permet de faire ça (je ne sais pas, je demande).
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
J'ai pas tout compris à tes histoires de gcc et mingw32. là tu me parle de temps de compilation.
En fait, ce n'est pas l'option -Q, mais -pg qu'il faut ajouter. Ensuite, tu exécute le programme et tu regarde la différence avec gprof grace au fichier qui est créé : "gmon.out".
une fuite de mémoire, si elle est différente sur Linux et Win, c'est que le problème est dans une bibliothèque, car ton programme est le même.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pico51 Messages postés 716 Date d'inscription   Statut Membre Dernière intervention   69
 
Sous Linux, j'ai compilé avec -pg et exécuter le programme mais je n'ai pas réussi à lire gmon.out avec gprof : j'obtiens une erreur : gmon.out n'est pas un exécutable.
Bref, j'ai tout de même trouvé d'où venait la fuite et je l'ai corrigée, j'ai compilé pour Windows et Linux mais j'obtiens des résultats étranges.
Sous Linux, la vitesse est normale et le programme utilise 3,4 Mio de mémoire vive.
Sous Windows XP, la vitesse est lente et le programme utilise 8,3 Mo de mémoire vive.
Et sous Vista, le programme fait planter tout le système !!!!
Pourquoi ces différences ???
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Bon, déjà, fait un effort, lit la notice de gprof ! (man gprof)
il faut lui donner le nom du programme, gmon.out ne se suffit pas à lui même.
Comme je t'ai dit, MS et Linux gère la mémoire de façon un peu différente, donc c'est normal d'avoir des différences.
Moi, j'ai remarque é que mes exécutable windiws était plus volumineux, selon la taille du .exe, ça peut expliquer la différence. Ensuite, les bibliothèques peuvent aussi être différentes, et programmer du graphique sous wi, c'est normalement plus compliqué, donc peut être plus couteux en mémoire.
Sur la vitesse, concentre toi sur gprof, selon que la perte de temps est global ou localiser, il faudra aviser.
là, c'est le contraire :
https://openclassrooms.com/forum/sujet/sdl-fluidite-28699

Tu mets bien -O3 sous windows lors de la compilation ?
0
Pico51 Messages postés 716 Date d'inscription   Statut Membre Dernière intervention   69
 
Quand j'utilise, gprof pour Linux, ça marche bien mais avec Windows, gprof me dit bien combien de fois les fonctions ont été appelé mais tous les temps sont à 0.00 ms. J'ai voulu essayé de trouver les temps de chaque fonction à l'aide de GetTickCount() mais j'ai un problème à la compilation.
Je ne sais vraiment plus quoi faire.
0
Pico51 Messages postés 716 Date d'inscription   Statut Membre Dernière intervention   69
 
J'ai finalement utilisé la fonction SDL_GetTicks() et je constate que sur XP, une de mes fonctions est 8 fois plus lente et sur Vista, 6 fois plus lente. Les autres fonctions sont trop rapide (< 1 ms) donc SDL_GetTicks n'est pas assez précis.
Cette fonction qui est plus lente contient une boucle et des SDL_BlitSurface. Cette fonction de la SDL serait plus lente sous Windows ?
Parce que si ce serait 1,5 fois plus lente, cela pourrait aller mais là, c'est catastrophique !!!
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
je penses que tu commence à cerner le problème. Il faut que tu trouve une astuce soi pour éviter d'utiliser cette fonction, soit pour améliorer ton algorithme.
0