Problème avec SDL

alexalex1331alexalex1331 Membre
août 2012 modifié dans Xcode et Developer Tools #1
Bonjour, je suis nouveaux sur ce forum et débutant en C ... !



-J'ai suivit le tuto de Mathieu Nebra (M@teo21) sur le langage C :



http://www.siteduzer...ammer-en-c.html



Je n'ai eu aucun problème jusqu'au ... SDL



J'ai d'abord eu un petit problème avec ARC j'ai donc suivit ce conseil :

http://blog.jeanbapt...-arc-dans-xcode

Ensuite ce problème s'est donc résolu.



Mais voici le problème que j'ai actuellement : je ne comprends pas trop a quoi cela correspond alors je vous montre la capture d'écran :

«1

Réponses

  • Ben c'est écrit : il ne trouve pas le framework SDL.

    Il faut ajouter SDL.framework dans la liste des frameworks de la cible courante.
  • Cela veut bien dire qu'il faut que je le mette dans le dossier : Systeme> bibliothèque>Framework> .... ce que j'ai bien fait



    J'ai tout bien suivit mais il me met encore le message du screenshot précedent !



    Comment faire ??
  • 'alexalex1331' a écrit:


    Cela veut bien dire qu'il faut que je le mette dans le dossier : Systeme> bibliothèque>Framework> .... ce que j'ai bien fait



    J'ai tout bien suivit mais il me met encore le message du screenshot précedent !



    Comment faire ??




    Il faut que tu ajoute dans la liste des frameworks de ton projet, la librarie SDL
    1. Clic sur ton projet dans le navigateur de fichiers à  gauche
    2. Puis clic sur la cible concernée sur la partie centrale de l'écran (ton application)
    3. Clic sur l'onglet Summary de la partie droite de l'écran
    4. Ouvrir la partie Linked Frameworks and Libraries
    5. Clic sur "+" pour ajouter le framework SDL
  • AliGatorAliGator Membre, Modérateur
    Et il j'y avait pas besoin de le mettre dans le dossier Library > Frameworks... et encore moins dans le Library/Frameworks du dossier Système ! o_O
  • CéroceCéroce Membre, Modérateur
    Tu verras par la suite que l'appli ne fonctionne que sur TON ordinateur. Nous t'expliquerons quoi faire alors.
  • alexalex1331alexalex1331 Membre
    août 2012 modifié #8
    D'accord je l'ai bien fait mais en passant par "add other" (cf : photo) car SDL.Framework n'était pas dans la liste.

    Après il s'affiche normalement !!



    alors où est le problème ??
    sdl.png 269.3K
  • alexalex1331alexalex1331 Membre
    août 2012 modifié #9
    'Céroce' a écrit:


    Tu verras par la suite que l'appli ne fonctionne que sur TON ordinateur. Nous t'expliquerons quoi faire alors.


    Pourquoi ? Peut tu m'expliquer ??
  • AliGatorAliGator Membre, Modérateur
    'alexalex1331' a écrit:


    D'accord je l'ai bien fait mais en passant par "add other" (cf : photo) car SDL.Framework n'était pas dans la liste.

    Après il s'affiche normalement !!
    Bah oui évidemment qu'il faut faire via "Add Other", puisque SDL n'est pas un framework système, mais un framework tierce que tu as téléchargé. Seuls les frameworks système sont affichés dans la liste, ainsi que les frameworks produits par tes propres projets du workspace en cours, mais pour intégrer un autre framework que tu as téléchargé et peut avoir mis n'importe où sur ton système, il faut évidemment passer par "Add Other" pour lui indiquer où aller le chercher.


    'alexalex1331' a écrit:
    alors où est le problème ??
    Bah je sais pas, c'est quoi la question ? Y'a encore une erreur une fois que tu as ajouté le framework SDL à  tes Build Phases ?!
  • alexalex1331alexalex1331 Membre
    août 2012 modifié #11
    'AliGator' a écrit:


    Bah oui évidemment qu'il faut faire via "Add Other", puisque SDL n'est pas un framework système, mais un framework tierce que tu as téléchargé. Seuls les frameworks système sont affichés dans la liste, ainsi que les frameworks produits par tes propres projets du workspace en cours, mais pour intégrer un autre framework que tu as téléchargé et peut avoir mis n'importe où sur ton système, il faut évidemment passer par "Add Other" pour lui indiquer où aller le chercher.



    Bah je sais pas, c'est quoi la question ? Y'a encore une erreur une fois que tu as ajouté le framework SDL à  tes Build Phases ?!




    Bon alors j'ai tout recommencer :

    Quand je fait "buid" avant de créer le main.c : pas de problème;

    Par contre après avoir créer un fichier main.c :



    Il me met ces erreurs :
    Undefined symbols for architecture i386:

    "main", referenced from:

    -u command line option

    ld: symbol(s) not found for architecture i386

    clang : error: linker command failed with exit code 1 (use -v to see invocation)




    c'est à  cause de quoi ?


    'Céroce' a écrit:


    Tu verras par la suite que l'appli ne fonctionne que sur TON ordinateur. Nous t'expliquerons quoi faire alors.


    Et tu peut m'expliquer pourquoi ?



    Merci image/wink.png' class='bbc_emoticon' alt=';)' />
  • CéroceCéroce Membre, Modérateur
    'alexalex1331' a écrit:



    'Céroce' a écrit:


    Tu verras par la suite que l'appli ne fonctionne que sur TON ordinateur. Nous t'expliquerons quoi faire alors.


    Pourquoi ? Peut tu m'expliquer ??


    Une framework contient une bibliothèque dynamique et est donc recherchée à  l'exécution. La question est "où ?".

    Si tu places la framework dans library/frameworks comme tu le fais, pas de problème, elle sera trouvée.

    Par contre, dès que tu fileras l'application à  quelqu'un, la framework sera absente de sa machine. Il faudra donc l'incorporer dans le bundle de l'application grâce à  une "Copy phase".



    Ce n'est pas si anodin, parce qu'il faudra pointer sur la bonne framework (celle dans le bundle de l'appli, pas celle dans library/frameworks), et qu'il y a des notions un peu complexes comme l'install path.
  • 'Céroce' a écrit:


    Une framework contient une bibliothèque dynamique et est donc recherchée à  l'exécution. La question est "où ?".

    Si tu places la framework dans library/frameworks comme tu le fais, pas de problème, elle sera trouvée.

    Par contre, dès que tu fileras l'application à  quelqu'un, la framework sera absente de sa machine. Il faudra donc l'incorporer dans le bundle de l'application grâce à  une "Copy phase".



    Ce n'est pas si anodin, parce qu'il faudra pointer sur la bonne framework (celle dans le bundle de l'appli, pas celle dans library/frameworks), et qu'il y a des notions un peu complexes comme l'install path.




    ok merci pour l'info mais pour l'instant je ne suis pas au moment de la distribuer image/wink.png' class='bbc_emoticon' alt=';)' />



    par contre pourrais tu répondre aux questions précédents car je suis vraiment bloqué ....

    merci et c'est une app "copy phase" ?? c'est juste une action non ?
  • CéroceCéroce Membre, Modérateur
    'alexalex1331' a écrit:


    merci et c'est une app "copy phase" ?? c'est juste une action non ?


    C'est une phase du build de l'application, cherche dans la doc de Xcode.
  • 'Céroce' a écrit:


    C'est une phase du build de l'application, cherche dans la doc de Xcode.


    ok merci image/wink.png' class='bbc_emoticon' alt=';)' /> et tu serais répondre a mon problème :


    'alexalex1331' a écrit:


    Bon alors j'ai tout recommencer :

    Quand je fait "buid" avant de créer le main.c : pas de problème;

    Par contre après avoir créer un fichier main.c :



    Il me met ces erreurs :





    c'est à  cause de quoi ?





    Et tu peut m'expliquer pourquoi ?



    Merci image/wink.png' class='bbc_emoticon' alt=';)' />
  • Voici le message d'erreur que j'ai actuellement :



  • AliGatorAliGator Membre, Modérateur
    août 2012 modifié #17
    Quelle est ta version cible de OSX ? OSX 32-Bits n'est pas compatible avec ARC, ARC n'est supporté que depuis OSX 64 bits.

    Donc si tu veux vraiment compiler pour OSX 32-bits, il faut te passer de ARC (à  la fois dans ton code où tu devrais donc gérer la mémoire à  la main, et dans les libs que tu utilises, comme SDL, où il te faudra des libs non-ARC).



    Au passage, quel compilateur utilises-tu dans ton projet ? Apple LLVM Compiler ? ou LLVM GCC ? Quelle version ? Quel SDK utilises-tu ?



    Au passage, cette réponse à  ta question je l'ai trouvée en 30s en cherchant le message d'erreur sur Google...
  • 'AliGator' a écrit:


    Quelle est ta version cible de OSX ? OSX 32-Bits n'est pas compatible avec ARC, ARC n'est supporté que depuis OSX 64 bits.

    Donc si tu veux vraiment compiler pour OSX 32-bits, il faut te passer de ARC (à  la fois dans ton code où tu devrais donc gérer la mémoire à  la main, et dans les libs que tu utilises, comme SDL, où il te faudra des libs non-ARC).



    Au passage, quel compilateur utilises-tu dans ton projet ? Apple LLVM Compiler ? ou LLVM GCC ? Quelle version ? Quel SDK utilises-tu ?



    Au passage, cette réponse à  ta question je l'ai trouvée en 30s en cherchant le message d'erreur sur Google...




    moi aussi j'ai bien trouver ça sur google mais en changeant toutes ces options (compileur et "architectures) cela ne marche pas du moins j'ai toujours une erreur qui s'affiche ...



    Sinon mon mac est 64 bit avec Mountain lion, j'utilise xcode (dernière version) et apple lvm compiler ...



    Merci de ton aide
  • AliGatorAliGator Membre, Modérateur
    Et il te met cette erreur sur quel fichier / quel ligne / à  quelle étape de la compilation ?

    Si ça se trouve c'est ton framework SDL qui est compilé pour 32-bits donc sans ARC d'un côté, et tes réglages de projet qui sont réglés de sorte que ARC soit activé dans ton projet. Du coup il y aurait incompatibilité.
  • AliGatorAliGator Membre, Modérateur
    Bah l'erreur est pourtant plutôt explicite... tu as deux fonctions main() dans ton projet (une dans SDLMain.m et l'autre dans main-machin.m enfin les 2 fichiers cités dans l'erreur quoi) forcément il n'aime pas.
  • 'AliGator' a écrit:


    Bah l'erreur est pourtant plutôt explicite... tu as deux fonctions main() dans ton projet (une dans SDLMain.m et l'autre dans main-machin.m enfin les 2 fichiers cités dans l'erreur quoi) forcément il n'aime pas.




    Ok merci mais lequel dois -je enlever vu que je suppose qu il ne faut pas toucher au sdl et moi ma fonction main je la remplacé par quoi ?
  • zoczoc Membre
    'alexalex1331' a écrit:


    Bonjour, je suis nouveaux sur ce forum et débutant en C ... !


    Je voudrais pas faire mon rabat joie une fois de plus, mais à  mon avis, quand on est débutant, on ne se lance pas directement les yeux fermés dans un projet ambitieux qui nécessite des bibliothèques tierces.



    On commence plutôt par faire des petits programmes pour la console (en mode texte donc), histoire d'apprendre les bases du langage et du processus de compilation / édition de liens...
  • Oui je suis d'accord avec toi image/wink.png' class='bbc_emoticon' alt=';)' /> mais je voulais suivre en entier le tuto du siteduzero qui est quand même un tuto pour débutant. Bien sûre qu'ensuite je ne me lancerais pas dans des trucs impossible ou trop complexe. Utiliser le sdl ouvre beaucoup de solution, non ?

    Est ce que quelqu un pourrais m'expliquer comment utiliser la bibliothèque et comment nommer ma fonction principale ?
  • Personne ?
  • Evite de la nommer main déjà ...

    Appelle-la depuis la fonction main principale...
  • Merci image/wink.png' class='bbc_emoticon' alt=';)' />

    Donc par exemple je l'appelle "maindeux" et dans la fonction main dans sdl main je fais include main.c et je met la commande maindeux();

    C'est bien ça ?





    Dsl pour la mise en forme : écrit sur iPhone ...
  • AliGatorAliGator Membre, Modérateur
    'alexalex1331' a écrit:
    je fais include main.c
    image/crazy.gif' class='bbc_emoticon' alt=' B) ' /> image/wacko.png' class='bbc_emoticon' alt=' :* ' />



    Oulà ... un #include d'un .c, elle est pas mal celle-là ...



    Sinon que fait ce topic dans le forum "Xcode et Developer Tools" ? La question ne porte pas sur comment utiliser Xcode ou une des application Apple de Developer Tools pourtant...
  • Désolé .. Peut tu me dire comment appeller la fonction ?

  • <br />
    /* Main entry point to executable - should *not* be SDL_main&#33; */<br />
    int main (int argc, char **argv)<br />
    {<br />
        /* Copy the arguments into a global variable */<br />
        /* This is passed if we are launched by double-clicking */<br />
        if ( argc &gt;= 2 &amp;&amp; strncmp (argv[1], &quot;-psn&quot;, 4) == 0 ) {<br />
    	    gArgv = (char **) SDL_malloc(sizeof (char *) * 2);<br />
    	    gArgv[0] = argv[0];<br />
    	    gArgv[1] = NULL;<br />
    	    gArgc = 1;<br />
    	    gFinderLaunch = YES;<br />
        } else {<br />
    	    int i;<br />
    	    gArgc = argc;<br />
    	    gArgv = (char **) SDL_malloc(sizeof (char *) * (argc+1));<br />
    	    for (i = 0; i &lt;= argc; i++)<br />
    		    gArgv[i] = argv[i];<br />
    	    gFinderLaunch = NO;<br />
        }<br />
    #if SDL_USE_NIB_FILE<br />
        NSApplicationMain (argc, argv);<br />
    #else<br />
        CustomApplicationMain (argc, argv);<br />
    #endif<br />
        return 0;<br />
    }<br />
    




    Voici la fin de SDLMain.m Je pense qu'il y a quelque chose a faire avec ça mais quoi ?(...)



    Est-ce que quelqu'un pourrait m'expliquer ou me donner un lien vers de la doc ?



    Je ne trouve vraiment rien ...



    merci
  • Bon, vu que t'en es au BABA de la programmation, je t'invite à  tout faire dans la fonction main principale...

    Puis après, tu verras comment appeler d'autres fonctions, même si t'en utilises déjà , mais que tu t'en es pas encore rendu compte (notamment la malloc, auquel je n'ai pas vu de libération de mémoire si je ne me suis pas trompé en lisant vite-fait)...
Connectez-vous ou Inscrivez-vous pour répondre.