Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL / Linux] Segmentation fault avec SDL_TTF

un probleme de recompilation windows linux

Sujet résolu
7 juin 2010 à 17:34:43

Bonjour,

J'ai realisé un petit programme en SDL utilisant SDL_ttf, tout ceci sous windows. J'aimerais néanmoins le recompilé sour Linux pour justement apprendre a faire du code plus portable.

A l'execution j'ai une erreur de sergementation, d'apres gdb celle-ci vien de la fonction TTF_OpenFont():

Program received signal SIGSEGV, Segmentation fault.
0x001e53f8 in TTF_SizeUNICODE() from /usr/lib/libSDL_ttf-2.0.so.0
(gdb) bt
#0 0x001e53f8 in TTF_SizeUNICODE() from /usr/lib/libSDL_ttf-2.0.so.0
#1 0x001e55f3 in TTF_RenderUNICODE () from /usr/lib/libSDL_ttf-2.0.so.0
#2 0x001e5ee0 in TTF_RenderText_Blended () from /usr/lib/libSDL_ttf-2.0.so.0
#3 0x080492d1 in main (argc=1, argv=0xbffff3e4 at main.c:166


la ligne 166 contient :

scpl1 = TTF_RenderText_Blender(police, joueur1, color_white);


Je n'arrive pas a trouver pourquoi j'ai une erreur de segmentation.
Merci de votre aide.
  • Partager sur Facebook
  • Partager sur Twitter
7 juin 2010 à 17:47:59

Ça m'est déjà arrivé alors que je compilais le programme de quelqu'un qui est sous Windows. Il avait nommé sa font Police.TTF, et, dans son code, il chargeait Police.ttf(en minuscules).
Le truc, c'est que Linux est sensible à la casse, et pas Windows.

En clair, fais attention aux majuscules dans les noms.
Tu devrais aussi mettre en place un système de vérification du chargement des ressources.
  • Partager sur Facebook
  • Partager sur Twitter
7 juin 2010 à 17:59:42

en ce qui concerne la casse, j'y ai prêté attention du fait que ma police est placée dans mon répertoire courant et se nome "MAGIC.TTF".

Pour la vérification du chargement des ressources, penses-tu que cela pourrais venir d'une ressources mal chargée ou corrompue? car j'ai désinstallé et réinstallé la SDL completement pour en etre sûr et j'ai toujours le même problème.
  • Partager sur Facebook
  • Partager sur Twitter
7 juin 2010 à 18:13:09

Citation : kaham

Pour la vérification du chargement des ressources, penses-tu que cela pourrais venir d'une ressources mal chargée ou corrompue? car j'ai désinstallé et réinstallé la SDL completement pour en etre sûr et j'ai toujours le même problème.


Non, je pense carrément à une ressource non trouvée.
Essaye une gestion des erreurs, et ensuite on avisera. Ne t'inquiète pas, c'est expliqué par M@teo21.
  • Partager sur Facebook
  • Partager sur Twitter
7 juin 2010 à 18:18:15

ok merci a toi. Je relit le cours de M@teo21 et je travail la dessus. Je te tien au courant.

[EDIT]

Voila mon problème est résolut.

Tu avais raison pour la casse de la police d'écriture... j'utilise une variable qui contient le nom d'une police lue dans un fichier et en affichant cette variable elle contenait MAGIC.TTF" (avec " en trop).

Tout ceci du fait que sous windows je devait metres \\ qui est interprté comme un \ dans les répertoires, mais sous linux c'est / ce qui décale mon code de un rang vers la gauche. D'ou le caractere en trop.

Merci pour le systeme d'erreur, c'est vrai que je n'ai pas pris l'habitude de le faire étant donné que j'ai jamais d'erreur de chargement de lib.

Merci a toi !
  • Partager sur Facebook
  • Partager sur Twitter
27 février 2011 à 10:14:55

Citation : Merkil

Ça m'est déjà arrivé alors que je compilais le programme de quelqu'un qui est sous Windows. Il avait nommé sa font Police.TTF, et, dans son code, il chargeait Police.ttf(en minuscules).
Le truc, c'est que Linux est sensible à la casse, et pas Windows.



merci j'avais le même problème sur mon ubuntu a case du .TTF qui était en minuscule dans mon code et lors de la compilation Windows sa marchais et je ne comprenait pas .

  • Partager sur Facebook
  • Partager sur Twitter
2 février 2017 à 0:50:51

bonjour a vous j'ai lu toute la discussion mais mon problème n'a pas été resolu
  • Partager sur Facebook
  • Partager sur Twitter
11 février 2022 à 21:07:51


A l'execution j'ai une erreur de sergementation, d'apres gdb celle ci vien de cet erreur :

(gdb) where

#0  0x00007ffff7939e9a in TTF_SizeUNICODE ()

   from /usr/lib/x86_64-linux-gnu/libSDL_ttf-2.0.so.0

#1  0x00007ffff793a2b4 in TTF_RenderUNICODE_Solid ()

   from /usr/lib/x86_64-linux-gnu/libSDL_ttf-2.0.so.0

#2  0x00007ffff793a6da in TTF_RenderText_Solid ()

   from /usr/lib/x86_64-linux-gnu/libSDL_ttf-2.0.so.0

#3  0x0000000000400fc6 in displayText (t=..., screen=0x637fe0) at texte.c:23

#4  0x0000000000400d29 in main (argc=1, argv=0x7fffffffdd48) at main.c:26

voici main.c la ligne 26

displayText(t,screen);

et voici texte.c la ligne 23

t.surfaceTexte =TTF_RenderText_Solid (t.font,"Neymar", t.textColor );

et merci d avance

-
Edité par widedbenaissi 11 février 2022 à 21:12:58

  • Partager sur Facebook
  • Partager sur Twitter
11 février 2022 à 22:40:32

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter

Pas d'aide concernant le code par MP, le forum est là pour ça :)