La SDL, ce que j'en pense.

Sous Linux, SDL est en général bien packagé (attention aux versions foireuses, la 1.2.11 ne pose plus de problèmes).

Cette lib cède du terrain face aux initiatives comme OIS pour le controle des périphériques ou encore OpenAL pour l'audio. Il est toutefois bon de la connaitre un minimum, ne serait-ce que pour les projets déja en place.

Elle possède également l'interet d'avoir beaucoup de bibliothèques associées.

Et encore une fois, quelque chose de codé en C ne peut pas être entièrement mauvais. Non ?


Arriver au bout de sa compilation

Sous windows, il est impératif de déclarer la fonction main de cette manière:

int main(int argc, char **argv)

Dans le cas contraire, le code ne pourra pas être lié à SDLmain et la compilation s'arrêtera avec le plus cryptique des messages d'erreur.

Utiliser sdl-config (une variante dédiée SDL inspirée de pkg-config, déja présenté dans ce blog).

On peut également utiliser pkg-config si disponible (je crois que c'est intégré pour de bon, maintenant).

Après une installation, toujours compiler quelques exemples pour vérifier que rien ne cloche, avant de commencer à compiler votre propre code.


Exemple de compilation avec Mingw

gcc test.c -o testalpha -I/mingw/include/SDL -lmingw32  -lSDLMain -lSDL

Attention, si vous utilisez sdl-config / pkg-config (méthode conseillée), car le script ajoute par défaut le flag -mwindows

le flag -mwindows signale que l'on ne veut pas qu'une fenêtre Dos surgisse à l'exécution du programme.


Cygwin

  • Le flag bien connu -mno-cygwin vous permettra de profiter de vos programmes sans dépendance à la DLL Cygwin.


Quelques astuce pour MSVC

  • Pour enlever l'énervante boite dos qui poppe au lancement d'un programme SDL (normal, on ne compile pas avec la CRT de Windows, quand on a un int main(...) comme point d'entrée)
cl youpi.c sdl.lib sdlmain.x.y.z.lib /MD /link /entry:WinMainCRTStartup /subsystem:windows



  • Pour compiler la lib-SDL si vous avez ces erreurs:
\include\winnt.h(222) : error C2061: syntax error : > identifier 'PVOID64'
\include\winnt.h(222) : error C2059: syntax error : ';'


  • Il suffit de remplacer #include <basetsd.h> par #include "basetsd.h" dans winnt.h.
    • Attention, c'est bien sûr un workaround pas très propre, mais bien pratique.
    • Pour ceux qui veulent faire les choses dans les rêgles, voir le changement de winver dans le MSDN.