Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forums MacBidouille _ Technologies Apple _ Librairie SDL avec Xcode

Écrit par : Bast 22 Apr 2004, 07:28

J'ai telechargé la librairie SDL et l'ai installée: le dossier sdlframework s'est bien ajouté dans ma bibliothèque principale comme précisé dans l'instaleur. Là plus d'erreur de compilation au niveau de toutes les commandes (en c et c++) comme avant mais toujours une erreur empêchant la compilation: il ne reconnait pas la le header SDL/SDL.h ni SDL.h (en include). Savez vous comment l'utiliser ?

Écrit par : Whistle Master 22 Apr 2004, 08:15

perso, j'ai installé SDL avec fink, donc tous les headers se trouvent dans /sw/include/SDL

Essaye plutot avec fink, plutot qu'avec un installeur.

Sinon, je ne vois pas

A+

Écrit par : schlum 22 Apr 2004, 08:57

Faut que tu charges le framework dans xCode ... L'as tu fait ?

Écrit par : Bast 22 Apr 2004, 12:09

Je pense l'avoir chargé: j'ai glissé déposé (avec copie) et il apparait dans framworks le fichier SDLmain.nib
Mais même avec des recherches sur mon disque impossible de trouver un fichier sdl.h ou quoi que ce soit. Et je sais aussi que ce fichier sdl.h appelle plein d'autres headers dont je n'ai pas trouvé trace non plus. Je n'ai jamais installé ce genre de chose, j'ai surement du oublier de faire qqchose... Tout ce que j'ai c'est un fichier SDLMain.nib et un plist qui sont dans la bibliothèque/framworks/sdl

Écrit par : schlum 22 Apr 2004, 22:36

QUOTE (Bast @ 22 Apr 2004, 13:09)
Je pense l'avoir chargé: j'ai glissé déposé (avec copie) et il apparait dans framworks le fichier SDLmain.nib
Mais même avec des recherches sur mon disque impossible de trouver un fichier sdl.h ou quoi que ce soit. Et je sais aussi que ce fichier sdl.h appelle plein d'autres headers dont je n'ai pas trouvé trace non plus. Je n'ai jamais installé ce genre de chose, j'ai surement du oublier de faire qqchose... Tout ce que j'ai c'est un fichier SDLMain.nib et un plist qui sont dans la bibliothèque/framworks/sdl

Ben le SDL.h devrait être dans ton /Library/Frameworks/SDL/Headers/

Écrit par : Bast 26 Apr 2004, 06:53

Salut,
J'ai fait quelques tests ce week end, et tout d'abord impossible d'installer fink. Je suis sous panther, n'existe-t-il pas une version spéciale ?
Ensuite je voulais savoir pourquoi sous mac os X certains dossiers sont invisibles, notamment le /usr/include dans lequel apparaissent tous les headers (dont le sdl.h ne figure toujours pas...).
D'autre part, j'ai bien vérifié et dans /library/frameworks je n'ai qu'un seul dossier relatant le sdl et il se nomme /SDL.framework .
Dans ce dernier j'ai d'autres dossiers qui ne contiennent rien (des alias...), et 2 seuls fichiers intéressants: un SDLMain.nib et un SDL sans extension, pesant 408 Ko et ne voulant pas s'executer même dans le terminal.
Je me demandais si ce fichier SDL de 408 Ko ne contenait pas les headers qui m'intéressent et qui, c'est certain, ne sont toujours pas installés.
Pouvez vous m'aider sur un de ces points ?

Écrit par : Bast 26 Apr 2004, 06:56

Heu... Juste pour préciser à propos de fink: je viens de voir qu'il existait une 0.7.0 pour X.3.

Écrit par : schlum 26 Apr 2004, 07:16

Bah, elle m'a l'air bizarre ton installation de SDL ...
Le dossier Framework doit contenir au minimum :
- La/les librairie(s)
- Le(s) header(s)
Le tout rangé par versions ...

Écrit par : Bast 26 Apr 2004, 11:51

J'ai trouvé ces informations sur un autre forum:

"
>> I'm having trouble getting the OS X SDL-devel-1.2.7.pkg.tar.gz to
>> install the SDL development files and framework.
>>
>> The installer says that it will install the SDL framework (for Project
>> Builder/Xcode) into ~/Library/Frameworks. It correctly creates the
>> directory SDL.framework inside, but doesn't appear to copy anything
>> into it.
>
> I'm having that problem too. I didn't have time yet to find out the
> reason
> and how to fix it,

Same here, what i have done, is I installed the pkg, then installed
SDL from source. That way the includes are at least on the system even
though they are not put into the framework. Still a hassle and a
problem though.
"

et la réponse

"OK, I have found the fix:

In SDL-devel.post_install and .post_upgrade, on line 16 and 17, change
"exec" to "-exec". This makes it work for me on 10.3.3.

The permissions on the html docs are still messed up, so you might want to
extend it to the whole installation directory: "find $ROOT ..." instead of
"find $ROOT/SDL.framework ...". I didn't test this however.

Actually, getting the permissions right should be possible without such
post-install hacking by having the right permissions in the archive and/or
BOM - at least according to the documentation about the 10.3 installer,
but I don't know about backwards compatibility.
"

Je n'ai pas essayé, n'étant pas chez moi avant ce soir.

Écrit par : Bast 26 Apr 2004, 15:52

C'est bon, le sdl est finalement installé... J'ai trouvé un autre installeur sur le net. Cette fois ci, les headers étaient bien copiés dans /library/SDL.frameworks/ et reconny par xcode. Par contre il l'a installé dans ma bibliothèque de session et non dans la principale comme avant. Etant admin et avec une session unique sur le disque, je ne pense pas que les autorisations étaient la source du problème (j'avais vérifié).
Je n'utilisais pas fink tout simplement car je ne suis pas connecté chez moi (même si en faisant le transfert de tous les packages...). Je l'ai tout de même installé pour la prochaine fois... happy.gif.
Désolé de vous avoir dérangé pour si peu, j'étais affolé car le temps me pressait... smile.gif

Écrit par : Bast 28 Apr 2004, 11:47

Salut,
J'ai une erreur que je n'arrive pas à résoudre sur xcode, toujours en lien avec la librairie sdl (je pense). Après compilation (sans erreur ni warning), dès le lancement du programme on m'affiche en gros: Zerolink: impossible de trouver '_main'... N'ayant rien de ce genre dans mon code je ne comprends pas.
Avez vous connaissance de ce type d'erreur ?

Écrit par : schlum 28 Apr 2004, 13:18

C'est qu'il n'y a aucune fonction "main" dans l'exé linké ... C'est gênant !

Écrit par : Bast 28 Apr 2004, 14:10

Pourtant Il y a en une... Mais elle est dans un main.cpp. Faut-il obligatoirement passer par les templates SDL de xcode ? A savoir comme fichier principal SDLmain.m ou .h, etc... ? Si c'est le cas je suis bien embêté: xcode sous panther ne reconnait pas les nouveaux projets installés avec le SDL: quand je fais file->nouveau projet je suis sensé voir apparaître "SDL application" mais je ne le vois pas. Pourtant tout est bien installé quand je vais dans voir dans le dossier correspondant (library->application support->apple->developper->etc...).
J'en ai ras le bol, chaque problème résolu en amène un autre... Et d'après les informations que j'ai trouvé sur le net anglophone, c'est parce que l'installer SDL était prévu pour Project builder plutôt que pour xcode...

Écrit par : chombier 28 Apr 2004, 14:25

Es-tu allé voir du côté des listes de discussion sur http://www.libsdl.org/pipermail/sdl/2004-February/059587.html ?

QUOTE
You need to add -lSDLmain to the link line, which includes the compiled version of SDLMain.m.

Écrit par : schlum 28 Apr 2004, 14:30

Bah, je vois pas l'intérêt d'utiliser xCode pour un projet avec SDL ... xCode c'est bon pour faire du Cocoa, de l'objective-C ... Pour le reste, autant compiler en ligne de commande, on comprend bien mieux ce qui se passe wink.gif

Écrit par : Bast 29 Apr 2004, 07:26

Oui, c'est ce que je fais maintenant: je compile avec le terminal et en y ajoutant SDLmain.h, SDLmain.c (trouvés qqpart sur le disque...), en fait je me suis rendu compte que lors de la déclaration de la fonction main, il fallait ajouter des arguments. l'erreur zerolink était bien due à la déclaration du main:

int main(){
...
}

qui a du être remplacée par

int main (int argc, char *argv){
...
}

Sous PC où je faisais tourner le programe avant ce n'était pas le cas. Là était la différence d'où sortait l'erreur zerolink.

Voila, je pense que, cette fois, c'est la bonne smile.gif happy.gif

Écrit par : Mister euGene 29 Apr 2004, 12:58

Je sais !
Y'a un bug lors de l'install du package SDL : va voir du côté /Library/Application Support/Apple/Developer Tools/Projects Template/Application/

Et alors là, "surprise", il existe 4 dossiers SDL "bridés". Refile leurs les bons droits de lecture, et ensuite sous XCode, lorsque tu créés un nouveau projet, tu peux choisir un projet SDL (Cocoa, OpenGL, "classique").

Ca évite les bidouilles wink.gif

Écrit par : Bast 30 Apr 2004, 12:03

Oui, j'avais remarqué aussi, mais même en changeant les autorisations rien de plus n'apparaissait dans xcode (même sur session admin)... Bizare, mais peut-importe puisque j'ai remarqué qu'il était inutile de passer par "projet application sdl" du moment qu'on intègre les fichiers sdlmain dans ses sources. smile.gif

Écrit par : dj t@l 2 Aug 2004, 18:36

Bon je profite de ce topic pour poser une petite question.

Je voudrai me faire une petit application basé sur la sdl qui soit multi plate forme, donc je decide de la faire en c++.

Mon probleme est que je n arrive pas a utlisé c++ et sdl avec xcode.

Je crée un projet de type c++ Tool donc il me crée mon fichier main.cpp et si dans ce fichier j ajoute

CODE

#include <SDL/SDL.h>


ben l appli ce lance et me dite :

QUOTE
ZeroLink: unknown symbol '_main'

2dEngine has exited due to signal 6 (SIGABRT).


Alors que j ai bien une fonction main, d ailleur si j enleve le #include l application s execute normalement. Je comprend pas pourquoi ? (enfin si il ne trouve pas le main)
D apres ce que vous dites sur ce topic il faut absoument utiliser SDLMain.h et .m mais dans ce cas mon appli ne sera plus portable.

Donc ma question est comment faire pour rester portable dans ce cas la ? Peut faire juste une application avec sdl et c++ sans utiliser ce SDLMain ?

Écrit par : Mister euGene 3 Aug 2004, 11:24

Si ça reste portable, sous linux tu recompileras sans le SDLMain. Sur Mac c'est obligatoire en plus de tes fichiers, de rajouter ce bout de code.

Suffit de faire un makefile avec macosx=true, linux=true, etc...

Écrit par : Bast 4 Aug 2004, 10:08

J'ai moi aussi eu ce problème "zerolink" du main. Pour cela et si je me souviens bien, j'ai du modifier l'appel de la fonction main par:

CODE

int main(int argc, char *argv[])
{
...
}


Écrit par : AceM 12 Apr 2005, 22:30

Je crois que j'ai un peu remonté le topic smile.gif

Voilà, je dois faire un programme en utilisant la librairie SDL. Je suis donc allé voire du coté de libsdl.org, j'ai chargé un pitit jeu pour voire un peu comment c'était. Pour pouvoir le compiler j'ai chargé les librairies pour macos X. en fait j'en ai trouvé deux: sdl.pkg et sdl-devel.pkg. j'ai mis les deux, comme ça...
Mais quand je compile, il ne trouve pas le fichier 'sdl.h'.

D'après ce topic, j'ai cru comprendre que l'installation est un peu foireuse mais par contre j'ai pas bien saisie comment on corrigeait ça.

Sinon j'ai vu qu'on pouvait directement compiler le code source (./configure; make; make install (héhé je découvre tongue.gif )) mais si ça se trouve ça revient au même, on a pas les headers installés au bon endroit.
Bref quest-ce que je dois faire?

Écrit par : schlum 12 Apr 2005, 23:38

Moi je l'ai installé avec fink --> aucun problème smile.gif

Écrit par : AceM 13 Apr 2005, 15:54

Bon bah c'est parti alors, je vais me remettre à fink. La dernière fois que j'y avais touché je m'étais embrouillé et j'avais fini par laché le truc.
Mais allez je suis motivé et peut être qu'avec les quelques connaissances glanées par ci par là je vais y arriver.

Écrit par : schlum 13 Apr 2005, 20:30

QUOTE(AceM @ 13 Apr 2005, 15:54)
Bon bah c'est parti alors, je vais me remettre à fink. La dernière fois que j'y avais touché je m'étais embrouillé et j'avais fini par laché le truc.
Mais allez je suis motivé et peut être qu'avec les quelques connaissances glanées par ci par là je vais y arriver.
[right][snapback]1099431[/snapback][/right]

Si tu as besoin d'aide, poste ici smile.gif

Écrit par : AceM 14 Apr 2005, 08:06

Ok, alors c'est bon, fink est installé. Avec finkcomander j'ai fais Selfupdate-cvs pour voire les paquets. J'en ai trouvé plusieurs qui m'intérraissait, j'ai pris celui nommé tout simplement SDL. Et enfin j'ai fait 'install package from source". Tout c'est alors enchainé normalement semble-t-il.
Alors est-ce que c'est il installé SDL là? Je vois une floppé de headers sdl dans /sw/include/sdl. Je dl une demo sur sdl.org our voire. Je compile et il ne me dis plus qu'il me manque sdl.h, déjà ça c'est bon smile.gif . Par contre il a besoin de sdl_mixer. Donc là, présentement j'installe sdl_mixer. [...] Ok c'est bon, j'ai pus compiler la démo. Ca fait vachement plaisir tongue.gif .
Donc fink c'est pas trop compliqué et ça marche bien, même mieux que les .pkg. Mais pour désinstaller, il faut garder les fichiers sources (/sw/src) et utiliser finkcomander?

Écrit par : schlum 14 Apr 2005, 12:51

Les fichiers source n'ont aucune autre utilité que constituer une archive de sources tongue.gif
Pour désinstaller, finkcommander ou directement avec la commande "sudo fink remove xxx"

Écrit par : alex15 13 Aug 2007, 11:49

salut! J'apprend la sdl sur le site du zero et j'ai du telecharger la sdl et les extras pour mac os X et j'ai eu les elements suivants : sdl.framwork, devel lite,Templates for Xcode,SDLmain,documentation



alors que sur le site du zero on ma dit que je devrais avoir

Image IPB


j'ai quand meme continué à prorammer mais au moment d'afficher une image ça ne fait q'une fenetre noire blink.gif et ce n'est pas mon code qui est faux : je l'ai recopier du site du zero pour etre sur






si vous pouviez m'eclairer... tongue.gif

Écrit par : SkyJedi 14 Aug 2007, 16:13

J'ai un petit problème avec SDL et Xcode moi aussi tongue.gif
Je crée un nouveau projet Xcode (SDL Cocoa application) et puis je mets, dans main.c, ce code :

CITATION

#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>

void pause();

int main(int argc, char *argv[])
{
SDL_Init(SDL_INIT_VIDEO); // Initialisation de la SDL

SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE); // Ouverture de la fenêtre

pause(); // Mise en pause du programme

SDL_Quit(); // Arrêt de la SDL

return EXIT_SUCCESS; // Fermeture du programme
}

void pause()
{
int continuer = 1;
SDL_Event event;

while (continuer)
{
SDL_WaitEvent();
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
}
}
}

Quand je de compile, il affiche une fenêtre toute noire, mais quand j'appuie sur un boutton, il ne se passe rien.

D'ou vient le problème ?

Écrit par : hubeert 16 Aug 2007, 21:29

coucou;
que veux tu quil se passe? ton switch ne prevoit aucun autre cas.; un switch est toujours avec un breaK bon ici ca ne sert a rien mais bon. il es ou ton bouton?? et laction du bouton? et que voudrais tu quil se passât?

CODE
while (continuer)
{
SDL_WaitEvent();
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
}
}



Écrit par : SkyJedi 17 Aug 2007, 10:46

Dans le tuto de siteduzero, il est écrit qu'avec ce code, ça affiche une fenêtre noire et quand on appuie sur un touche du clavier, l'application s'arrete...

Écrit par : hubeert 17 Aug 2007, 11:22

CODE
  case SDL_QUIT:
            continuer = 0;
            break;

ca cest lorsque tu clique sur la case rouge de ta fenetre.. pour les touches cest ca;
CODE
case SDL_KEYDOWN: // Si appui d'une touche
switch(event.key.keysym.sym) { // un switch pour teste differente touche
case SDLK_RIGHT: // ici la touche fleche droite.;


j'ai fait le tuto du site du zero et tout ceci est bien mieux explique que ce que je peux t'expliquer..
en plus je sais pas mais je crois quil est interdit de poster ici ..

Écrit par : schlum 17 Aug 2007, 11:41

Non, il est juste interdit de créer des nouveaux sujets wink.gif
Ca c'est un vieux sujet de 2004 qui n'a pas été déplacé...

Écrit par : Simlink 25 Jun 2008, 20:04

CITATION(alex15 @ 13 Aug 2007, 12:49) [snapback]2308045[/snapback]

salut! J'apprend la sdl sur le site du zero et j'ai du telecharger la sdl et les extras pour mac os X et j'ai eu les elements suivants : sdl.framwork, devel lite,Templates for Xcode,SDLmain,documentation



alors que sur le site du zero on ma dit que je devrais avoir

Image IPB


j'ai quand meme continué à prorammer mais au moment d'afficher une image ça ne fait q'une fenetre noire blink.gif et ce n'est pas mon code qui est faux : je l'ai recopier du site du zero pour etre sur






si vous pouviez m'eclairer... tongue.gif


Si il y a encore des personne pour suivre ce sujet, j'aimerais dire que j'ai le même bug mais quand j'essaie de la fermer (la fenêtre) ça ne marche pas et je suis oubliger d'éteindre le MAC, je suis sous leopard.

Écrit par : Alex_abc 24 Jul 2008, 20:05

bonkour,

j'ai le même problème au niveau de l'affichage d'une image, j'ai le framework "SDL_image.framework" j'ai fait exactement ceux qui est dit dans le site du zero. J'ai remarqué que les variables images son vide, voici ce que fait :imageDeFond = IMG_Load("lf_air.app/Contents/Resources/fond.bmp");
Cette variable ne pointe vers rien même après avoir passé cette ligne de code.

Perso je n'y comprend plus rien.

SVP si vous avez une solution, je suis sur leopard 10.5.4


Écrit par : SkyJedi 20 Aug 2008, 10:16

Je pense que ton lien vers l'image est mauvais :

CITATION
imageDeFond = IMG_Load("lf_air.app/Contents/Resources/fond.bmp");


Essaie :
CODE
imageDeFond = IMG_Load("fond.bmp");

En mettant l'image dans le dossier où se trouve ton .app.

Écrit par : misterjn 23 Aug 2008, 21:01

J'ai déjà eu le même problème des images avec la SDL : ton image doit se trouver à coté de l'exécutable qui doit être exactement dans NomDeTonDossierProjet/build/Debug/
C'est l'endroit de point de départ lorsque tu souhaite accéder à des ressources. wink.gif

Écrit par : Toom-Toom 3 Dec 2008, 10:44

N'oubliez pas non plus que si vous mettez un titre à votre fenêtre, ENLEVEZ LES ACCENTS. Par exemple la ligne de code :

CODE
SDL_WM_SetCaption("Gestion des évènements en SDL", NULL);


donnera une fenêtre noire, alors que celle-ci marchera :
CODE
SDL_WM_SetCaption("Gestion des evenements en SDL", NULL);

wink.gif


Écrit par : Vin's 4 Dec 2008, 21:40

Il est quand même bien vieux ce sujet biggrin.gif
Si on veut placer les ressources de son jeu directement dans le .app, c'est assez simple :
- Ouvrez SDLMain.m.
- Cherchez les lignes :

CODE
/* Set the working directory to the .app's parent directory */
[self setupWorkingDirectory:gFinderLaunch];

- Remplacez les par :
CODE
NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
[[NSFileManager defaultManager] changeCurrentDirectoryPath:resourcePath];

A partir de là, un SDL_LoadBMP/IMG_Load/SDL_LoadWav/fopen/... ("mon_fichier") chargera /chemin/vers/Mon Application.app/Contents/Resources/mon_fichier.
Pour que Xcode copie certains fichiers/dossiers dans ce dossier Resources à la compilation, il suffit de les glisser dans l'étape "Copy Bundle Resources" de la cible ("Target") de l'application.

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)