[RESOLU] Installation Bibliothèque SDL (sous XCODE)

KeihilinKeihilin Membre
juin 2013 modifié dans Coin canapé & détente #1

Hello,


 


Pour ceux qui n'ont pas suivi mon précèdent topic, je débute en programmation C en suivant le livre/TUTO : LE SITE DU ZERO.


 


Le livre est bien, la communauté très sympa, mais faut reconnaitre qu'ils sont plutôt axès PC (Windows et Linux) .. du coup mes questions spécifiques MAC & XCODE 4 ne trouve que peu d'écho..


 


Après avoir fini par obtenir un code qui me convient sur le TP "le PENDU. (voir mon précèdent topic toujours..)


 


J'attaque la partie : "Création de jeux 2D en SDL"


 


1ere étape "installer SDL", dans le livre (pas présent dans la tuto en ligne malheureusement) il y est expliqué comment installer cette bibliothèque.. pour différentes machines et IDE (PC, MAC, XCODE, Code:Blocks, etc..)


 


Seulement voila, soit je suis une tanche (très vraisemblable..), soit il manques des infos dans le tuto, mais à  la fin de l'installation je me retrouve avec 9 erreurs détectés dans le SDLMain.c, principalement a propos d'un certain item : ARC ..


Réponses

  • AliGatorAliGator Membre, Modérateur

    Hello


     


    Alors :


    • ARC, de son nom complet "Automatic Reference Counting", est une fonctionnalité du compilateur Objective-C qui a été ajoutée récemment (enfin ça commence à  dater maintenant, mais bon, ça peut se comprendre que du coup les tutos n'aient pas été mis à  jour). C'est une fonctionnalité qui permet de t'éviter quand tu codes en Objective-C d'avoir à  te prendre la tête avec les retain/release/autorelease, pour te faciliter grandement la gestion de la mémoire. Si tu n'actives pas ARC, il faut écrire les retain/release/autorelease toi-même dans le code pour gérer la mémoire correctement ; si tu actives ARC, le compilateur va les insérer tout seul au bon endroit, et du coup toi tu n'as même plus le droit d'écrire retain/release/autorelease manuellement dans le code (pour éviter de l'embrouiller)
    • Du coup pour ton problème, le tuto doit certainement expliquer les choses du temps où ARC n'existait pas, à  faire les retain/release explicitement dans le code, donc le plus simple est sans doute que tu désactive ARC pour tout ton projet, et qu'effectivement tu gères la mémoire tout seul, du moins pour le moment. Il sera toujours temps de migrer à  ARC un jour quand tu auras bien compris le reste. Pour cela, c'est dans les Build Settings du projet ou du target qu'il faut mettre "NO" en face du setting "Automatic Reference Counting"
    • Concernant les #include <SDL/SDL.h>, c'est une notation propre aux inclusions de headers dans les frameworks. Quand tu écris #include <SDL/SDL.h> il va aussi chercher le header SDL.h dans le dossier "Headers" du framework "SDL.framework" (et c'est là  qu'il va le trouver)
  • Merci ! Réactivité / Efficacité.


    je sens que je vais me plaire ici ;o)


     


    A bientôt, je sens que je vais pas tarder a être bloqué encore.. ;o)


  • Am_MeAm_Me Membre
    juin 2013 modifié #4

    MMmmmh mais pour développer en SDL j'utilisais plutot codeblocks enfin je sais pas si ca change énormément 


    Mais tu es un aventurier a ce que je vois


     


     


     




     


    je sens que je vais me plaire ici ;o)


     




     


    Si tu pouvais marque résolu dans le titre bah quand le post est resolu tout simplement ca aiderai les autres futurs aventuriers ;)


  • Fait ;o)


     


    Aventurier ? parce que j'utilise XCODE au lieu de CODEBLOCK ?


    Disons que je suis sur MAC j'utilise ce qui est proposé ;o)


     


    C'est bien un forum dédié COCOA (mac) ici non ? on est donc entouré d'aventuriers ;o)

  • AliGatorAliGator Membre, Modérateur

    Je pense que Am_Me te qualifiait d'aventurier car tu utilises SDL avec Xcode.


     


    SDL est une bibliothèque crossplateforme pour faire des graphismes et de l'UI. Quand on utilise Xcode, en général c'est pour faire des applications Cocoa plutôt que du SDL. Mais bon, je dis ça parce que quand on utilise Xcode, on est sur Mac, et quand on est sur Mac, souvent on préfère faire du Cocoa. Et quand on fait du SDL, c'est qu'on fait du dev crossplateforme, donc qu'on va sans doute avoir besoin de tester son application sur Mac, Windows et Linux, et donc ça peut avoir du sens d'utiliser un IDE crossplateforme.


     


    En pratique, rien n'empêche en pratique d'utiliser Xcode pour faire du SDL, c'est une librairie comme une autre, et on peut faire du C ou du C++ avec Xcode on est pas obligé de faire que de l'Objective-C ou du Cocoa, c'est juste pas habituel de faire du SDL plutôt que du Cocoa ;)


  • Tiens, tu t'es mis à  ARC Ali?


  • Ok je comprend mieux, en fait j'utilise SDL car c'est ce qui est expliqué dans le TUTO du SITE DES ZERO.


    Et merci pour ton message j'arrive a mieux cerner ce qu'est le COCOA, un autre framework donc ?


     


    Je pensais que COCOA était "quelque chose" qu'on utilisait en Objective-C.

  • AliGatorAliGator Membre, Modérateur


    Tiens, tu t'es mis à  ARC Ali?




    Je ne vois pas trop ce que vient faire la question dans ce topic, mais oui finalement je m'y suis mis ;)


    Réticent au départ car j'aime bien tout contrôler et aimais bien maà®triser mes retain et release pour les balancer l'un l'autre proprement, en pratique j'ai été moi-même surpris à  quel point je l'ai adopté si facilement et ai apprécié d'y passer.


     


    Maintenant je ne m'en passe plus, d'autant que cela apporte un confort non négligeable, en particulier sur le fait de ne plus avoir à  implémenter le dealloc et d'avoir bcp moins de choses rébarbatives à  écrire. Aujourd'hui, si je veux faire juste une classe groupant des propriétés un peu comme je ferais une struct, j'ai juste à  écrire @interface, toutes les @property que je veux, @end et c'est fini. Plus besoin de @synthesize dans le @implementation grâce à  l'Auto-Synthesized Properties et plus besoin d'écrire le dealloc avec ARC...


    Au point que si avant je n'utilisais jamais la méthode "new" car je trouvais qu'elle "cachait" l'usage du alloc et donc risquais de nous faire oublier le release, maintenant j'utilise ce "[MaClasse new]" aussi de temps en temps.


     


    Le confort que cela fait gagner m'a fait oublier mon côté perfectionniste à  vouloir mettre explicitement les retain/release manuellement, en + c'est plus efficace (car ARC optimise ces retain/release, puisqu'il gère tout il va plutôt éviter de mettre un autorelease dans une méthode A et mettre à  la place un simple release dans la méthode B qui appelle cette méthode A, pour réduire l'empreinte mémoire et l'utilisation inutile de l'@autoreleasepool dans ce cas...) et au final si avant j'étais réticent à  y passer je suis surpris moi-même de voir que maintenant je ne peux plus m'en passer ^^

  • AliGatorAliGator Membre, Modérateur

    SDL est une librairie graphique qui a été développée par la communauté dans le but d'avoir une lib OpenSource et CrossPlateforme pour dessiner des choses à  l'écran.


    Il existe des librairies de plus haut niveau pour carrément gérer des composants graphiques (boutons, labels, ...), certaines utilisant certainement SDL sous le capot, d'autres utilisant autre chose


     


    Cocoa quand à  lui est un framework, ou plutôt est un terme utilisé pour regrouper un ensemble des frameworks Apple pour développer sous MacOSX ou iOS (pour iOS, on parle plutôt de CocoaTouch, puisqu'il y a des frameworks qui ont été adaptés pour l'aspect tactile de l'iPhone/iPad là  où sous OSX cette notion est absente). Cocoa regroupe par exemple des frameworks comme AppKit (pour OSX) / UIKit (pour iOS), qui te fournissent des widgets / contrôles comme des boutons, des vues pour afficher des images (NSImageView/UIImageView), des composants pour afficher du texte, voire pour en saisir (TextFields), ... Il y a d'autres frameworks pour tout ce qui est par exemple gestion des vidéos ou du son, d'autres pour tout ce qui est calcul vectoriel ou mathématique, d'autres pour tout ce qui est réseau...


     


    Cocoa est donc un ensemble de bibliothèque, regroupant un nombre conséquent des classes, tant pour faire de l'UI que pour faire du métier, des requêtes réseau ou manipuler des fichiers. Par exemple dans le monde Windows, il existe DotNet (".NET") qui est un peu l'équivalent, puisqu'il regroupe plein de librairies et de classes pour te fournir des fonctionnalités graphiques, des composants comme des boutons, des classes pour gérer le réseau... donc si cela te parle, tu peux dire que "Cocoa" est à  MacOSX ce que ".NET" est à  Windows.


    Objective-C quand à  lui est le langage de programmation avec lequel on code, comme le sont le C, le Java, le C# ou le C++


     


    Tous MacOSX est basé sur Cocoa, et tout iOS est basé sur CocoaTouch. Par exemple le Finder, la plupart des applications Apple ou même des applications tierces parties. Les librairies/frameworks présentes dans Cocoa te fournissent tout ce qu'il faut pour faire les tâches diverses et variées et interagir avec OSX (ou iOS si tu codes pour iOS avec CocoaTouch). Ce qui fait que si tu veux créer des applications pour MacOSX ou pour iOS, tu as tout intérêt à  utiliser Cocoa (ça serait stupide d'utiliser autre chose si tu te restreins à  OSX ou iOS, à  vrai dire). Par exemple dans Cocoa les composants graphiques comme les boutons sont ceux de OSX ; de même dans CocoaTouch, les composants graphiques comme la TabBar ou la NavigationBar sont ceux fournis par Apple et utilisés partout dans iOS.


     


    Tu peux utiliser autre chose si vraiment tu y tiens.


     - Si tu n'as pas besoin d'UI (tu codes un logiciel en ligne de commande que tu vas exécuter par le terminal par exemple) et veut faire un truc portable et n'a pas besoin de fonctionnalités propres à  OSX (genre l'accès au Keychain ou au système de préférences fourni par Apple ou aux librairies audio fournies dans Cocoa...) tu peux par exemple coder en C et n'utiliser aucun framework particulier, juste les fonctions standard du C. Ou utiliser une librairie C qui va te fournir les fonctionnalités dont tu as besoin.


     - Si tu as besoin d'UI, mais que tu veux coder un logiciel crossplateforme, qui aura pour vocation de tourner à  la fois sur OSX mais aussi sur Linux ou WIndows, alors évidemment Cocoa n'existant pas sur ces 2 autres plateformes, il ne conviendra pas. Tout comme le framework .NET de Microsoft ne conviendrait pas car il est restreint à  Windows.


    Tu as alors des frameworks alternatifs. SDL en est un (quoique ça fait longtemps que je me suis pas plongé dans SDL mais il me semble qu'il est surtout orienté graphisme / UI et un peu audio, et codé en C, donc suis pas les paradigmes de la Programmation Orienté Objet et ne fournit pas le nécessaire pour les autres fonctionnalités comme accès disque, requête réseau...), QT en est un autre, et ce ne sont pas les seuls.


     


    Si tu veux juste faire du développement OSX ou si tu veux développer pour iOS, c'est Cocoa qu'il te faut apprendre.


    Si tu veux faire un logiciel crossplateforme, personnellement je te conseillerai à  la limite plutôt QT (qui est assez connu, bien documenté, crossplateforme et plutôt éprouvé) que des choses comme SDL.


    SDL est plutôt orienté à  la limite si tu veux coder un petit jeu où tu n'auras pas besoin de boutons mais juste de dessiner des choses à  l'écran et jouer du son. Et encore, à  ce tarif-là , mieux vaut sans doute directement apprendre OpenGL. Mais bon pour commencer dans tous les cas ces 2 là  ne sont pas une mince affaire, et faire une application Cocoa avec une petite interface graphique sympa est beaucoup plus abordable.


  • Pour SDL, on n'a pas forcément le choix.  Je travaille sur un émulateur Atari multi-plateforme et pratiquement SDL s'impose. Enfin, quand je dis que je travaille, pour l'instant j'ai juste rendu opérationnel l'affichage de l'aide en ligne sur Mac. J'ai pris l'émulation en marche!


  • AliGatorAliGator Membre, Modérateur
    Tout à  fait, mais c'est parce que tu avais des contraintes multi-plateformes aussi. Et que ton projet imposait SDL.

    Mais pour apprendre la programmation sur Mac, ou la programmation en général, commencer par SDL c'est hardu, c'est loin d'être le chemin facile !
    C'est du C relativement bas niveau (dans le sens où il n'y a pas une UI avec des boutons, qui changent d'état quand on clique dessus avec la souris, et un évènement qd on a cliqué sur le bouton et tout... de mémoire c'est juste du "dessine moi un rectangle ici" plutôt), ce n'est pas du tout intégré à  l'environnement (que ce soit MacOSX ou WIndows ou Linux) contrairement aux frameworks dédiés à  chaque plateforme (comme Cocoa pour OSX, CocoaTouch pour iOS, .NET pour Windows, Gnome ou autre pour Linux, ou QT qui est crossplateforme mais fournit quand même un paquet de contrôles graphiques et de quoi faire une UI)...
    Bref avec SDL faut un peu tout faire soi-même. Et utiliser un truc comme SDL pas complètement intégré à  OSX plutôt que d'utiliser Cocoa, pour commencer et débuter et apprendre c'est déjà  se mettre un niveau de difficulté supplémentaire ;)


  • Et quand on fait du SDL, c'est qu'on fait du dev crossplateforme, donc qu'on va sans doute avoir besoin de tester son application sur Mac, Windows et Linux, et donc ça peut avoir du sens d'utiliser un IDE crossplateforme.


     


    En pratique, rien n'empêche en pratique d'utiliser Xcode pour faire du SDL, c'est une librairie comme une autre, et on peut faire du C ou du C++ avec Xcode on est pas obligé de faire que de l'Objective-C ou du Cocoa, c'est juste pas habituel de faire du SDL plutôt que du Cocoa ;)




     


    Bon a savoir mais du coup faut développer sur les trois plateformes avec 3 codes différents je ne savais pas Merci ;)

  • Ok ok ;o)


    Bah je me dis : Si je m'en sors avec le SDL c'est que ca devrait aller par la suite avec COCOA ;o)


    Une fois le TUTO terminé, je vais m'y mettre au COCOA.


     


    A ce moment la, j'aurais plein de nouvelles questions pour vous ;o)

  • CéroceCéroce Membre, Modérateur

    Je ne suis pas très d'accord avec Ali.


    Certes, avec SDL c'est du C pur et dur, mais n'est-ce pas ce qu'on attend d'un tuto sur le langage C ? Dans l'absolu, ça me semble être une bonne école de la programmation.


     


    Et en même temps, programmer Cocoa requiert rarement une connaissance approfondie du langage C. (Mais c'est outil qui te permettra de te sortir de n'importe quelle situation ou presque).


  •  


    de mémoire c'est juste du "dessine moi un rectangle ici"



    de mémoire il me semble que dans le désert quelqu'un a dit "Dessine moi un mouton" (ça marche ni en C ni en ObjC).


     



     


    Et utiliser un truc comme SDL pas complètement intégré à  OSX plutôt que d'utiliser Cocoa, pour commencer et débuter et apprendre c'est déjà  se mettre un niveau de difficulté supplémentaire



    Vrai! et je m'y perds un peu dans SDL   >:(

Connectez-vous ou Inscrivez-vous pour répondre.