Instalando SFML en Codeblocks (SOS)

Me estoy volviendo loco para instalar esta librería en CodeBlocks (Windows):

- Primero me descargo el full SDK de aquí:
http://www.sfml-dev.org/download.php
- Copia las carpetas lib y include a la carpeta de Mingw
- Creo un proyecto en blanco, voy a build options y pongo:

Imagen

- Introduzco la macro SFML_STATIC tal como sale en el tutorial:

Imagen

Añado un archivo al proyecto y pongo un código de ejemplo:

#include <SFML/Window.hpp>

int main()
{
sf::Window window(sf::VideoMode(800, 600), "My window");

// run the program as long as the window is open
while (window.isOpen())
{
// check all the window's events that were triggered since the last iteration of the loop
sf::Event event;
while (window.pollEvent(event))
{
// "close requested" event: we close the window
if (event.type == sf::Event::Closed)
window.close();
}
}

return 0;
}


Clico en compilar, errores:

c:\mingw\bin\..\lib\gcc\mingw32\4.7.2\..\..\..\libsfml-window-s.a(VideoMode.cpp.obj):VideoMode.cpp|| undefined reference to `__gxx_personality_sj0'|
c:\mingw\bin\..\lib\gcc\mingw32\4.7.2\..\..\..\libsfml-window-s.a(VideoMode.cpp.obj):VideoMode.cpp|| undefined reference to `_Unwind_SjLj_Register'|
c:\mingw\bin\..\lib\gcc\mingw32\4.7.2\..\..\..\libsfml-window-s.a(VideoMode.cpp.obj):VideoMode.cpp|| undefined reference to `_Unwind_SjLj_Unregister'|
c:\mingw\bin\..\lib\gcc\mingw32\4.7.2\..\..\..\libsfml-window-s.a(VideoMode.cpp.obj):VideoMode.cpp|| undefined reference to `_Unwind_SjLj_Resume'|
||=== Build finished: 4 errors, 0 warnings (0 minutes, 0 seconds) ===|


Pruebo ahora a enlazar con las librerías dinámicas, elimino la macro STATIC y compilo. Ahora compila correctamente, copio las DLL a la carpeta y ejecuto el programa. Me da error:

Imagen

Me estoy volviendo loco, LOCO
Para empezar, saliendo fuera del contexto de SFML, un consejo:

Cuando estés desesperado por hacer algo y no te salga de ninguna forma, lo último que debes hacer es seguir presionando si con ello consigues enfadarte o desesperarte. Haz una pausa y continúa cuando estés más relajado (de otra forma corres el peligro de convertir la programación en algo tedioso y eso hará que empiece a disgustarte).

Bueno, dicho esto, empezamos. Lo primero de todo, Utiliza SFML 2.0, jamás uses la versión 1.6, no solo está anticuada, sino que todas las carencias y bugs que tiene esa versión estan solventados en 2.0, ni que decir que es mil veces más eficiente y fácil de usar. Ya que no lo has especificado, asegurate de estar usando la versión 2.0. Ahora mismo está en release candidate (RC) sin embargo es estable, libre de bugs y prácticamente terminada (realmente lo unico que queda es cambiar la página web y su documentación, cosa que van a terminar de hacer para el mes que viene)

Luego, para configurar el compilador y el linker, utiliza las siguientes directivas (no te saco capturas porque yo lo hago casero, usando .bat):

Para el COMPILADOR:
-I%SFML%\include\
-DSFML_STATIC

Nota: Ya que utilizo línea de comandos, he de poner -I para hacer includes y -D para directivas, imagino que eso no debes de ponerlo en codeblocks

Para el LINKER:
-mwindows -lmingw32 -lsfml-graphics-s-d -lsfml-window-s-d -lsfml-system-s-d -lopengl32 -lglu32 -static-libgcc -static-libstdc++

Nota: Ídem con los guiones

La primera directiva úsala solo si vas a utilizar windows, yo la necesito para compilar los resources para la información del binario (iconos y detalles).
La segunda directiva úsala para compilar usando mingw
La tercera-cuarta-quinta directiva son de SFML (2.0), nota que la librería está dividida en SUBSISTEMAS, así que si no necesitas alguno de los que he puesto o necesitas otros no tienes más que añadirlos o quitarlos.
La sexta y séptima directiva son para poder utilizar funciones de OpenGL y Glu en el proyecto (esto es algo más avanzado, igual no necesitas de ello)
Las dos últimas directivas son para solventar un problema de GCC, y es que no incluye ciertas librerías en el ejecutable y por tanto falla en equipos que no tengan GCC instalado en su ejecutable. Con estas directivas incluyes las librerias necesarias para que el ejecutable funcione si o si en todos los equipos

Te recomiendo visitar la wiki que hay en Github, pues esa si está más actualizada (la web como te he dicho van a cambiarla el mes que viene)

https://github.com/LaurentGomila/SFML/wiki/FAQ
Léete esa página entera, te despejará muchas dudas

PD: Para poder compilar y linkear la librería de forma estática como pretendes, tendrás que compilarla tu mismo primero (esos ficheritos .a que deberían estar en la carpeta LIB de SFML, deberías tener los que tienen incluido en el nombre del fichero la cadena -s (static). La -d significa development, no dinamic por lo que pueden existir -s-d), para ello utiliza cmake http://www.cmake.org/ Esto es algo más complejo así que te recomiendo dejarlo para el final, es decir, empieza teniendo el proyecto funcional de forma dinámica (con la .dll al lado del ejecutable) y una vez te funcione, pasas a intentar vincularla estáticamente
Gracias por responder, he intentado esos comandos de linkado (salvo -static-libstdc++ que me dice que no existe).

El resultado es identico, me da error de ejecución (sin embargo los samples de SFML si funcionan).

He hecho una prueba con una maquina virtual con Windows XP, el resultado es idéntico. Es como si el SFML no funcionase bien con CodeBlocks (lo cual me extraña, pongo todos linkers literalmente).
Igualmente tienes que compilar la librería con cmake. En el FAQ del ultimo link que he pasado viene como hacerlo. Leete la sección "Building and Using SFML" entera
3 respuestas