Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/05/2007, à 18:41

general tux

[C++]Utilisation de SDL

voila, j'ai installer Code::blocks, puis j'ai reussi a compiler un petit programme en C

j'ai chercher a installer SDL, j'ai donc suivi la documentation du site pour le faire, et apperemment cette etape est reussi

malgré tout, je n'arrive pas a me serivr de SDL dans mes programme, j'ai esayer avec le petit programme que Code::blocks me genere automatiquement quand je choisit de créer un projet SDL, et ça me retourne

obj/Debug/main.o:(.eh_frame+0x11):: undefined reference to `__gxx_personality_v0

j'ai cru comprendre par mes recherche que la cause probable du problem serai que code::block utilise gcc pour compiler au lieu de g++, mais je n'ai pas trop compris

quelqu'un peut-il m'aider?

#2 Le 04/05/2007, à 19:13

Link31

Re : [C++]Utilisation de SDL

Probablement un problème d'extension de fichiers : quelle est l'extension de tes fichiers sources, et correspond-elle au langage utilisé (C ou C++) ?
Si tu ne veux/peux pas changer les extensions, essaie d'ajouter l'option -lstdc++

Dernière modification par Link31 (Le 04/05/2007, à 19:14)

Hors ligne

#3 Le 04/05/2007, à 19:18

slapierre

Re : [C++]Utilisation de SDL

dans ton Makefile, tu dois ajouter un lien vers les librairies - statiques ou dynamiques -  de la SDL. Fais une recherche avec les mots clefs "sdl Makefile" ... Par exemple, pour la GSL, je dois faire :

# Lier les fichiers objets : la cible est 'out', appel de la librairie 'gsl'
    out : seqh.o
        cc -o out -lgsl -lgslcblas -lm seqh.o

# Compiler le fichier 'seqh.c' : créer le fichier objet 'seqh.o'

    seqh.o : seqh.c
        cc -c seqh.c

    clean : rm *.o *.~ *.gch out

Simon


"Le spectre de la folie nous empêchera-t-il de hisser l'étendard de l'imagination?" - André Breton

Hors ligne

#4 Le 04/05/2007, à 19:19

general tux

Re : [C++]Utilisation de SDL

c'est code::blocks qui a genere le fichier main.cpp

et quand je compile, j'essai d'utiliser code::blocks, je debute en C++ il serai plus simple pour moi de tout faire avec un IDE (a moin que vous me disiez qu'il soit plue simple d'utiliser la console, j'ai pas tester)

je vais essayer avec la console

#5 Le 04/05/2007, à 19:21

general tux

Re : [C++]Utilisation de SDL

pour le makefile, je vais aller me renseigné, j'ai encore jamais pensser a créer ce genre de fichier (je debute vraiment en C++) ^^

#6 Le 04/05/2007, à 19:30

slapierre

Re : [C++]Utilisation de SDL

Je ne connais pas C::B en particulier, mais tous les IDE fonctionne de la même façon. Soit un fichier Makefile.am à configurer, soit une fenêtre "Option du projet" dans lequel tu peux ajouter des options de configuration. Dans KDevelop, toujours pour la GSL :

   > Project Options > Configure Options > Onglet C++ : Compiler Flags

Ajout de -lgsl -lgslcblac

Dans Anjuta, il faut ajouter les deux dernières lignes dans le fichier Makefile.am, soit dans la section AM_CFLAGS :

 AM_CFLAGS =\
	 -Wall \
	 -g \
	 -lgsl \
	 -lgslcblas

EDIT : l'option gras ne fonctionnae pas dans un bloc de code!
Simon

Dernière modification par slapierre (Le 04/05/2007, à 19:32)


"Le spectre de la folie nous empêchera-t-il de hisser l'étendard de l'imagination?" - André Breton

Hors ligne

#7 Le 04/05/2007, à 19:39

Link31

Re : [C++]Utilisation de SDL

slapierre a écrit :

dans ton Makefile, tu dois ajouter un lien vers les librairies - statiques ou dynamiques -  de la SDL.

Désolé, mais... ça n'a rien à voir avec son problème wink

Les erreurs lorsqu'il manque des bibliothèques particulières sont immédiatement reconnaissables :

/tmp/ccHlc0oK.o: dans la fonction « main »:
testsdl.c:(.text+0x40): référence indéfinie vers « SDL_Init »
testsdl.c:(.text+0x49): référence indéfinie vers « SDL_GetError »
testsdl.c:(.text+0x71): référence indéfinie vers « SDL_Quit »
testsdl.c:(.text+0x8b): référence indéfinie vers « SDL_RWFromFile »
testsdl.c:(.text+0x98): référence indéfinie vers « SDL_LoadBMP_RW »
testsdl.c:(.text+0xa8): référence indéfinie vers « SDL_GetError »
etc...
collect2: ld a retourné 1 code d'état d'exécution

@general tux : veille à programmer en C dans un fichier .c, et à programmer en c++ dans un fichier .cpp. Après une rapide recherche il semblerait que ce soit la cause de ton problème.

De plus, il est infiniment plus facile d'utiliser la console (pour des projets petits ou moyens). Sous Linux, les IDE demandent plus de configuration que sous windows.

1) Crée un fichier testsdl.c dans ton dossier personnel
2) Tape ton code dans ce fichier
3) Dans une console :

gcc testsdl.c -o testsdl `sdl-config --libs --cflags`

4) Pour tester le programme :

./testsdl

Rien de compliqué.

Dernière modification par Link31 (Le 04/05/2007, à 19:39)

Hors ligne

#8 Le 04/05/2007, à 20:10

Piwaï[INSA]

Re : [C++]Utilisation de SDL

L'utilisation de Code::Block sous Linux n'est pas vraiment une nécessité. Il est très utile sous Windows, en tant qu'outil libre qui peut remplacer avantageusement Dev C++ par son côté moderne.

Le makefile reste un outil très simple à utiliser.

Un petit exemple de Makefile fait pour un programme qui utilise la SDL, et SDL_image :

CC = gcc
prefix = build
srcdir = src
options_compilation = -Wall -pedantic -g

all :  compile link execution

compile : main.o



main.o :
	$(CC) -c $(options_compilation) $(srcdir)/main.c
	mv main.o $(prefix)


link : 
	$(CC) `sdl-config --libs` -lSDL_image -o nomDuProgramme $(prefix)/*.o

clean :
	rm $(prefix)/*

Après il suffit de taper Make via une console, dans le dossier ou se situe le Makefile, pour compiler le programme. Rien de plus simple à mon goût smile .


http://www.piwai.info
Découvrez 2H4U (Too Hard For You) : http://www.sourceforge.net/projects/toohardforyou
et OpenGF : http://www.sourceforge.net/projects/opengf

Hors ligne

#9 Le 04/05/2007, à 20:13

slapierre

Re : [C++]Utilisation de SDL

@ Piwaï[INSA]
Enfin un sujet sur lequel nous ne risquons pas de nous prendre le bec! cool


"Le spectre de la folie nous empêchera-t-il de hisser l'étendard de l'imagination?" - André Breton

Hors ligne

#10 Le 04/05/2007, à 20:14

general tux

Re : [C++]Utilisation de SDL

ok, je vais donc utiliser la console, mais si j'ai besoin d'utiliser des Objet, je suis bien obliger de faire du C++, nan?

dans ce cas je change quo dans la ligne de code que ma conseiller Link31 ?

gcc testsdl.c -o testsdl `sdl-config --libs --cflags

#11 Le 04/05/2007, à 20:25

Scoutone

Re : [C++]Utilisation de SDL

tu mets g++ et la suite ne change pas

et pour code::blocks, a tu mis dans Project/build option/linker SDLmain et SDL??

#12 Le 04/05/2007, à 20:29

Piwaï[INSA]

Re : [C++]Utilisation de SDL

Aucun soucis pour ma part, slapierre smile.

A vrai dire, general tux, je crois que la philosophie objet n'est pas l'apanage du C++. Le C permet sans aucun doute de faire une forme de programmation orientée objet, cela demande simplement un peu plus de rigueur (disons qu'il n'a pas été fait pour ça au départ).

A priori, je dirai que la seule chose à changer pour compiler du C++, c'est renommer ton fichier de .c en .cpp, mais d'autres auront peut-être plus de précision à cet égard. En effet, un petit "man gcc" nous apprend que c'est un compilateur C et C++ (voir même ADA). g++, je crois, est le même programme, mais qui compile directement en C++.

Si tu cherches des cours sur la programmation en C, et C++, je te conseille vivement les cours du site du zéro ( http://www.siteduzero.com/tuto-3-8-0-apprenez-a-programmer-en-c-c.html ), dont j'aime beaucoup la méthode pédagogique, et très orientée pratique.

@++

Piwaï

Dernière modification par Piwaï[INSA] (Le 04/05/2007, à 20:32)


http://www.piwai.info
Découvrez 2H4U (Too Hard For You) : http://www.sourceforge.net/projects/toohardforyou
et OpenGF : http://www.sourceforge.net/projects/opengf

Hors ligne

#13 Le 04/05/2007, à 20:39

general tux

Re : [C++]Utilisation de SDL

c'est sympa pour toute ces precision, j'essaie actuellement de faire un tout petit code pour verifier que gcc est capable de compiler

testsdl.c: In function ‘main’:
testsdl.c:6: erreur: ‘cout’ undeclared (first use in this function)
testsdl.c:6: erreur: (Each undeclared identifier is reported only once
testsdl.c:6: erreur: for each function it appears in.)

apperement j'y suis pas encore ^^

#14 Le 04/05/2007, à 20:48

Link31

Re : [C++]Utilisation de SDL

Rajoute

using namespace std;

quelque part au début du code wink

Au fait, je me répète mais les fichiers sources C++ doivent avoir l'extension .cpp, pas .c.

Dernière modification par Link31 (Le 04/05/2007, à 20:50)

Hors ligne

#15 Le 04/05/2007, à 21:18

general tux

Re : [C++]Utilisation de SDL

testsdl.c:2:22: erreur: iostream.h : Aucun fichier ou répertoire de ce type
testsdl.c: In function ‘main’:
testsdl.c:6: erreur: ‘cout’ undeclared (first use in this function)
testsdl.c:6: erreur: (Each undeclared identifier is reported only once
testsdl.c:6: erreur: for each function it appears in.)
yoshi@yoshi-desktop:~/Desktop$ gcc testsdl.c
testsdl.c:2:22: erreur: iostream.h : Aucun fichier ou répertoire de ce type
testsdl.c:4: erreur: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘namespace’
testsdl.c: In function ‘main’:
testsdl.c:8: erreur: ‘cout’ undeclared (first use in this function)
testsdl.c:8: erreur: (Each undeclared identifier is reported only once
testsdl.c:8: erreur: for each function it appears in.)

c'est pire qu'avant lol, mais ne vous casser pas pour moi, je vais suivre la methode du site du zero, faut bie nque je me debrouille un peu par moi meme, si j'arrive vraiment pas a compiler je reviendrai poster

#16 Le 04/05/2007, à 21:35

slapierre

Re : [C++]Utilisation de SDL

> iostream.h est désuet, c'est tout simplement iostream. (#include <iostream>)

cout, cin & al font parti de l'espace de nommage std. Tu dois donc :
   1. Toujours les précéder du téléscope std:: (std::cout)

Téléscope (vocabulaire perso.) : disont que tu ne peux pas voir Pluton à l'oeil nu, alors tu prend un téléscope car tu sais qu'elle est dans le système solaire. Je crois que le vrai nom est "résolvateur de portée dynamique" ... quelqu'un à le vrai nom et une meilleure métaphore?

   2. ajouter le using namespace std;

Il est suggéré d'utiliser la solution (2) dans ton fichier contenant le main et la solution (1) dans le reste de ton implémentation.

http://fr.wikipedia.org/wiki/Port%C3%A9e_%28informatique%29

Simon


"Le spectre de la folie nous empêchera-t-il de hisser l'étendard de l'imagination?" - André Breton

Hors ligne

#17 Le 04/05/2007, à 22:38

Piwaï[INSA]

Re : [C++]Utilisation de SDL

Heu.. Comme tu l'as si bien dit toi même, ce ne serait pas "espace de nommage" ?? Lol, le "using namespace std" se traduit bien par "en utilisant l'espace de nommage std", std est donc un espace de nommage. Je comprend pas trop l'histoire du téléscope big_smile ??


http://www.piwai.info
Découvrez 2H4U (Too Hard For You) : http://www.sourceforge.net/projects/toohardforyou
et OpenGF : http://www.sourceforge.net/projects/opengf

Hors ligne

#18 Le 05/05/2007, à 00:21

slapierre

Re : [C++]Utilisation de SDL

Pour être sur de ne pas dire de conneries, je me suis résolu à regarder dans le livre de Stroustrup (C++ 3e edition, Stroustrup B. ISBN : 2-7-7440-0609-2).

Précisions : std est l'espace de nommage et :: l'opérateur de résolution (de portée).

Section 8.2.1 (Les noms qualifiés) :
Si X est déclaré dans l'espace de noms Y, alors il faut utiliser le qualifiant Y pour employer X.

Section 11.2.4 (Les opérateurs dans les espaces de noms) :
Sans utilisation de using namespace std; on est dans l'espace de noms global et à l'appel de cout, c'est l'espace de nommage global qui sera parcouru pour la recherche d'une définition appropriée pour <<.

Dans mon allégorie (assez simpliste, trop?) :
   > Le téléscope sert d'opérateur de résolution
   > Pluton est une méthode de l'espace de nommage "Système solaire"
   > On ne peut pas voir Pluton sans utiliser un téléscope...

Simon

Edit: orthographe

Dernière modification par slapierre (Le 05/05/2007, à 00:22)


"Le spectre de la folie nous empêchera-t-il de hisser l'étendard de l'imagination?" - André Breton

Hors ligne

#19 Le 05/05/2007, à 06:25

general tux

Re : [C++]Utilisation de SDL

j'aime bien l'histoire du telescope, ça fait un peu decalé du sujet, mais au moin c'est simple a retenir

sinon, pour l'instant je susi le tuto du site du zero, je n'en sui pas encore a la librairie STD, mais ça marche ien pour l'instant

#20 Le 05/05/2007, à 09:20

Scoutone

Re : [C++]Utilisation de SDL

le std c'est pour le C++, tu verras ca dans la 4ème parti du cours

#21 Le 05/05/2007, à 15:19

general tux

Re : [C++]Utilisation de SDL

je suis arrivé a la partie concernant la SDL dans le tuto (j'avais pas mal de notion de base (ayant programer en JAVA avec Eclipse avant)

apperement il me faut un makefile pour compiler mon programme maintenant, j'ai donc essayer d'utiliser celui du cour.

a cause des erreur qu'il me retourne, j'ai preféré prendre celui de Piwaï :

Piwaï[INSA] a écrit :
CC = gcc
prefix = build
srcdir = src
options_compilation = -Wall -pedantic -g

all :  compile link execution

compile : main.o



main.o :
	$(CC) -c $(options_compilation) $(srcdir)/main.c
	mv main.o $(prefix)


link : 
	$(CC) `sdl-config --libs` -lSDL_image -o nomDuProgramme $(prefix)/*.o

clean :
	rm $(prefix)/*

et là il me retourne :

makefile:13: *** séparateur manquant . Arrêt.

#22 Le 05/05/2007, à 15:46

Link31

Re : [C++]Utilisation de SDL

general tux a écrit :
makefile:13: *** séparateur manquant . Arrêt.

Attention, GNU make est très peu tolérant quand il s'agit des Makefiles. En particulier, l'indentation pour les commandes de chaque cible (les lignes commençant par "$(CC)" et "rm") doit être faite avec des tabulations, et non des espaces. Comme tu as probablement copié/collé le Makefile de Piwaï, ça a dû ajouter des espaces.

Hors ligne

#23 Le 05/05/2007, à 15:48

Scoutone

Re : [C++]Utilisation de SDL

si tu veux te servir de codeblocks, tu rajoutes SDLmain et SDL dans les options du linker, et tu vires tout ce qui y a dans les Others Options

si tu veux compiler avec gcc (ou g++) tu tapes:

gcc -lSDL (pour la librairie SDL) -o .... (tu gardes le reste)

après, le makefile, demande des explications, qu'on t'explique ligne à ligne ce qui est écrit, comme ca tu pourra le modifier une fois que tu voudras rajouter d'autres libraires....

d'ailleurs, où est-ce qu'on peut apprendre à écrire un Makefile ?

#24 Le 05/05/2007, à 15:52

Link31

Re : [C++]Utilisation de SDL

Scoutone a écrit :

d'ailleurs, où est-ce qu'on peut apprendre à écrire un Makefile ?

Ici

Hors ligne

#25 Le 05/05/2007, à 15:59

general tux

Re : [C++]Utilisation de SDL

j'ai un peu de mal a vous suivre, j'ai essayer ce que Link31 a dit :

gcc -c -Wall -pedantic -g src/main.c
gcc: src/main.c : Aucun fichier ou répertoire de ce type
gcc: pas de fichier à l'entrée
make: *** [main.o] Erreur 1

ensuite j'ai essayer de que Scoutone a dit :

$ gcc -lSDL -o main.c

/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld a retourné 1 code d'état d'exécution