Pages : 1
#1 Le 18/11/2015, à 23:56
- timmit42
Impossible afficher image SDL
Bonjour à tous, je dois actuellement réaliser un projet. Et j'ai quelques problèmes et je viens vers vous pour avoir des conseils
En fait, je possède une BeagleBoneBlack et une camera Cap A2 qui va me servir à prendre des photos. Actuellement, je n'ai pas réussi à récupérer l'image de la caméra mais la question n'est pas là. Mon soucis réside dans le fait qu'une fois l'image récupérée de la camera je vais devoir l'afficher sur une Debian qui tourne sous "Linux version 3.2.0-4-486 (debian-kernel@lists.debian.org) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 Debian 3.2.68-1+deb7u5". Afin d'arriver à cela nous avons divisé le problème en sous partie :
1. Afficher une image stockée sur le PC et l'afficher en utilisant SDL
2. Afficher une image .bmp stockée sur la Beagle et l'afficher sur le PC
3. Récupérer l'image de la camera et l'afficher sur le PC
Or, lors de la première étape nous avons un problème. Nous utilisons le code suivant :
/*This source code copyrighted by Lazy Foo' Productions (2004-2013)
and may not be redistributed without written permission.*/
//Include SDL functions and datatypes
#include "SDL/SDL.h"
int main( int argc, char* args[] )
{
//The images
SDL_Surface* hello = NULL;
SDL_Surface* screen = NULL;
//Start SDL
SDL_Init( SDL_INIT_EVERYTHING );
//Set up screen
screen = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
//Load image
hello = SDL_LoadBMP( "hello_world.bmp" );
//Apply image to screen
SDL_BlitSurface( hello, NULL, screen, NULL );
//Update Screen
SDL_Flip( screen );
//Pause
SDL_Delay( 2000 );
//Free the loaded image
SDL_FreeSurface( hello );
//Quit SDL
SDL_Quit();
return 0;
}
Lors de la compilation tout fonctionne correctement. Cependant à l'exécution du programme il y un "segmentation fault" qui apparaît, j'ai pu voir sur le forum que ceci pouvait venir du retour des fonctions mais il me semble que tout est ok. Pour en être sur nous avons décidé de tester ce code sous une autre version de linux, Ubuntu 14.04, et la tout fonctionne correctement nous avons bien une fenêtre qui apparait avec notre image affichée. Alors ma question est : comment peut-on faire pour afficher cette image sur Debian (version que nous devons obligatoirement utilisé car elle nous est imposée par le projet). Je rappel que nous utilisons SDL car dans la librairie SDL il existe des fonctions qui nous permettront d'accéder au buffer de la Camera Cape.
Merci d'avance pour toutes vos réponses !
Dernière modification par timmit42 (Le 19/11/2015, à 00:01)
Hors ligne
#2 Le 19/11/2015, à 06:22
- Compte anonymisé
Re : Impossible afficher image SDL
Salut.
Peut-on voir la ligne de commande pour compiler ?
#3 Le 19/11/2015, à 07:30
- timmit42
Re : Impossible afficher image SDL
Merci d'avoir répondu aussi vite !
J'utilise un makefile :
# Chemin Lib SDL :
CLSDL = /usr/local/lib
# Chemin Includes SDL :
CISDL = /home/tpuser/Test_SDL/SDL-1.2.15/include/
aff_img : aff_img.o
gcc -L$(CLSDL) -o aff_img -lSDL -lSDLmain aff_img.o
aff_img.o : lesson01.c
gcc -c -I$(CISDL) -o aff_img.o lesson01.c
Mais bon je n'ai aucun message d'erreur à la compilation..
Dernière modification par timmit42 (Le 19/11/2015, à 07:32)
Hors ligne
#4 Le 19/11/2015, à 17:10
- grigouille
Re : Impossible afficher image SDL
Pourquoi ne compiles-tu pas avec sdl-config comme c'est indiqué dans la page sdl ?
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#5 Le 19/11/2015, à 17:40
- Compte anonymisé
Re : Impossible afficher image SDL
Resalut.
Ne pas avoir d'erreurs de compilation ne garantit pas qu'il y ait pas de segfaults.
Mais pour en éviter un max, tu peux toujours ajouter l'option -Wall (Warning All) comme indiqué en dessous. Le compilateur devrait un peu plus râler sans pour autant qu'il y ait des erreurs de compilation.
# Chemin Lib SDL :
CLSDL = /usr/local/lib
# Chemin Includes SDL :
CISDL = /home/tpuser/Test_SDL/SDL-1.2.15/include/
aff_img : aff_img.o
gcc -Wall -L$(CLSDL) -o aff_img -lSDL -lSDLmain aff_img.o
aff_img.o : lesson01.c
gcc -Wall -c -I$(CISDL) -o aff_img.o lesson01.c
EDIT : Pour des cas de segmentation fault, tu peux toujours utiliser un debugger comme GDB .
Dernière modification par Compte anonymisé (Le 19/11/2015, à 18:10)
#6 Le 19/11/2015, à 18:12
- timmit42
Re : Impossible afficher image SDL
Merci à vous deux pour vos réponses, c'est vrai jojo81 tu as raison mais ce que je ne comprend pas c'est pourquoi le même programme fonctionne sur Ubuntu 14.04 et pas sur la debian..
J'ai tenté vos deux solutions pour compiler et aucunes d'elles ne fonctionnent. Je n'ai aucun changement, j'ai toujours "Erreur de segmentation" qui apparaît !
Hors ligne
#7 Le 19/11/2015, à 18:13
- derderder
Re : Impossible afficher image SDL
Je suis sûr à 99% que la segfault vient de hello qui vaut toujours null. Toujours tester si le pointeur n'est pas nul. Remplace
hello = SDL_LoadBMP("test.bmp");
par
hello = SDL_LoadBMP("test.bmp");
if (!hello) {
printf("Error when loading bitmap %s\n",SDL_GetError());
exit(-1);
}
Dernière modification par derderder (Le 19/11/2015, à 18:14)
Hors ligne
#8 Le 19/11/2015, à 18:23
- timmit42
Re : Impossible afficher image SDL
Tu as raison Derderer, mais apparemment ce n'est pas au niveau u hello qu'il y un problème mais c'est au niveau du pointeur screen.
//Set up screen
screen = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
if (!screen) {
printf("Error when loading screen %s\n",SDL_GetError());
exit(-1);
}
En effet, j'ai donc testé comme tu l'as dit si le pointeur était NULL pour screen aussi et voici le résultat mais je n'ai pas de message d'erreur pour le chargement de l'image :
Error when loading screen No available video device
Hors ligne
#9 Le 19/11/2015, à 18:43
- derderder
Re : Impossible afficher image SDL
Comment est exécuté le programme ? Sur un emulateur de terminal genre xterm ou dans un tty ? Sur la machine ou via ssh ?
Hors ligne
#10 Le 19/11/2015, à 18:51
- timmit42
Re : Impossible afficher image SDL
En fait, la Debian est montée sur une machine virtuelle. Pour lancer l'exécution, je la lance à partir d'une console c'est à dire que j'accède à Application -> Accessoire -> Terminal. Je ne sais pas si j'ai bien répondu à ta question car je ne connais pas la différence entre xterm ou tty.
Hors ligne
#11 Le 19/11/2015, à 19:07
- derderder
Re : Impossible afficher image SDL
Quel solution de virtualization utilise tu ?
Avec quel environemment de bureau vu qu'il n'y as pas de menu accessoir sous gnome...
Le probleme ne vient pas de Debian ton code marche sur mon pc sous Debian.
Hors ligne
#12 Le 19/11/2015, à 19:18
- grigouille
Re : Impossible afficher image SDL
Il faut tester les pointeurs et les retours de fonction :
if(SDL_Init( SDL_INIT_EVERYTHING ) != 0)
{
std::cerr << "can't initialize SDL libray\n";
return -1;
}
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#13 Le 25/11/2015, à 00:03
- timmit42
Re : Impossible afficher image SDL
Désolé pour le retard, mais j'avais des examens
Pour en revenir à mon problème, j'ai fait ce que tu m'a dit grigouille et j'ai bien un problème à ce niveau la. Le retour de la fonction est nul donc comment corriger ce problème?
Sinon pour répondre à ta question derderder, j'utilise virtualbox. Mais la version de DEBIAN qui est chargée n'est pas la dernière version mais une ancienne version :
Linux version 3.2.0-4-486 (debian-kernel@lists.debian.org) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 Debian 3.2.68-1+deb7u5
Hors ligne
#14 Le 25/11/2015, à 13:13
- grigouille
Re : Impossible afficher image SDL
Comment as-tu installé la sdl ? Je te recommande la lecture de la page sdl.
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#15 Le 25/11/2015, à 14:24
- claudius01
Re : Impossible afficher image SDL
Bonjour,
... Il faut tester les pointeurs et les retours de fonction
... Le retour de la fonction est nul donc comment corriger ce problème?
et donc pour aller dans le sens de grigouille, compléter dans le cas d'un retour nul de SDL_Init() par un appel à SDL_GetError() (exemple parmi tant d'autres et non testé ;-) pour en savoir plus:
if(SDL_Init( SDL_INIT_EVERYTHING ) != 0)
{
std::cerr << "can't initialize SDL libray because:\n";
std::cerr << "SDL_Init failed: [" << SDL_GetError() << "]\n";
return -1;
}
Hors ligne
#16 Le 05/12/2015, à 15:25
- timmit42
Re : Impossible afficher image SDL
Alors voilà j'ai fait ce que vous m'avez demandé de faire et voici le message d'erreur que j'ai eu :
No available video device
J'ia pu voir sur internet que cette erreur pouvait venir du fait qu'il manque la librairie suivante ia32-libs-sdl mais je ne parviens pas l'installer :
root@sec2014:/home/tpuser/Test_SDL# apt-get install ia32-libs-sdl
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
E: Impossible de trouver le paquet ia32-libs-sdl
Merci de votre aide encore une fois
Hors ligne
#17 Le 05/12/2015, à 15:32
- grigouille
Re : Impossible afficher image SDL
Tu ne m'as pas répondu : comment as-tu installé la sdl ?
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#18 Le 05/12/2015, à 15:50
- timmit42
Re : Impossible afficher image SDL
J'ai utilisé le lien suivant mais je n'ai pas fait la première partie qui consistait à installer certaines bibliothèques car :
* Lors de l'installation de SDL sur Ubuntu 14.04 je n'ai pas eu besoins de les utiliser
* Je n'ai pas réussis à les installer car j'obtenais quasi les même erreurs qu'indiquer précédemment comme quoi il ne trouvait pas les paquets
Hors ligne
#19 Le 05/12/2015, à 17:02
- grigouille
Re : Impossible afficher image SDL
Si tu n'installes pas la sdl via les dépôts, tout devient plus difficile.
Je ne peux t'aider si tu as choisis de l'installer à ta façon.
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#20 Le 05/12/2015, à 17:08
- timmit42
Re : Impossible afficher image SDL
Je veux bien le faire a ta manière mais comment faire ? En effet, si je suis ta méthode via les dépôts officiel avec l'apt-get il ne trouve pas le paquet ..
Hors ligne
#21 Le 05/12/2015, à 18:43
- claudius01
Re : Impossible afficher image SDL
Bonsoir,
Ton erreur ressemble à [Résolu] Instalaltion paquet ia32-libs et au post #9 on peut lire "Ce paquet [ia32-libs-xxx] permet d'installer des bibliothèques 32 bits sur un système 64 bits, ce dont tu n'as logiquement pas besoin."
@timmit42: Quel le type 32 ou 64 bits de ton Ubuntu ?
Maintenant, entièrement d'accord avec grigouille, faut repartir de zéro @ SDL car je crains que ton installation soit bancale maintenant ;-(
Hors ligne
#22 Le 05/12/2015, à 23:57
- derderder
Re : Impossible afficher image SDL
Pour installer des libs en 32 bits sur un systeme 64 bits, il faut utiliser apt-get install nomdupaquet:i386.
Dans ton cas apt-get install libsdl-1.2-dev:i386.
Hors ligne
Pages : 1