undefined reference to `SDL_GetPlatform' !!!!

Iniciado por <[(x)]>, 8 Julio 2010, 22:30 PM

0 Miembros y 1 Visitante están viendo este tema.

<[(x)]>



Holas estoy empezando a usar esta libreria(SDL), y me llamo la atencion el nombre de esta funcion el tema es que me dice : "undefined reference to `SDL_GetPlatfcompilo conorm'" al tratar de compilarlo.

estoy usando linux..

compilo con:g++ -o app main.cpp `sdl-config --cflags` `sdl-config --libs`


la salida que obtengo es la siguiente:/tmp/ccT5weMr.o: In function `main':
main.cpp:(.text+0x1e): undefined reference to `SDL_GetPlatform'
collect2: ld returned 1 exit status


dejo aca el codigo

main.cpp
Código (cpp) [Seleccionar]
#include <SDL/SDL.h>
#include <SDL/SDL_platform.h>

using namespace std;

int main(int argc, char *argv[])
{
 
  cout << "\n   hola !\n ver :\n" ;

  cout << SDL_GetPlatform() << endl;
 
  cin.sync();cin.get();

  return 0; 
 
}



espero puedan darme una mano, desde ya gracias

<[(x)]>

Ariath

Es curioso... mi SDL_platform.h no tiene esa función, y el caso es que en el Wiki de SDL aparece :P .

Yo solo tengo ahí un montón de #defines.

Salu2


P.D: Digo yo... ¿No te faltará enlazar con la SDL o alguna otra?.

<[(x)]>



  si.. yo al ver la funcion esta aca.
Ttrate de usarla y me salio q no estaba definida. Busque el archivo de cabecera '.h' en 'include/SDL' y al ver q no estaba la funcion, baje esta y la remplace.
Pero sigo con el problema... y no se me ocurre que linkear o hacer... 
<[(x)]>

Ariath

¿Has probado a enlazar la SDL?

Yo al menos en Windows, con el CodeBlocks (y con GCC), tengo que añadir la opción -lSDL para que pueda enlazar bien.

Salu2


P.D: De todas formas, según lo que veo que hace la función, no hace más que intentar hacer varios #define , los cuales solo funcionan si tu plataforma coincide con uno de ellos, y si alguno surte efecto, la función te devuelve a lo que corresponde el #define.

Es decir, en el SDL_Platform.h por ejemplo tienes:

Código (C++) [Seleccionar]

#if defined (WIN32) || defined (_WIN32)
#undef __WIN32__
#define __WIN32__ 1
#endif


Y luego, el código de la función, comprueba si alguno de esos #defines ha funcionado. Si lo hiciera el de __WIN32__, se ejecutaría:

Código (C++) [Seleccionar]

#elif __WIN32__
#ifdef _WIN32_WCE
    return "Windows CE";
  else
    return "Windows";
#endif


Y si el Windows donde estás es Windows a secas, y no Windows CE, pues la función devolvería "Windows".

Incluso podrías tener tu propia función que hiciera esto ...

<[(x)]>



enlazada esta, sino no podría usarla en otras app q ya he hecho...
gracias por responder Ariath.
Entonces veré de hacerme algo  xd ,, aunque lo que mas me interesa es el porq de la falla.
 
<[(x)]>

Ariath

No estoy 100% seguro, pero me acabo de dar cuenta de una cosa.

La SDL que, tanto tu como yo estamos usando, tal y como parece ser no tiene dicha función SDL_GetPlatform por ningún lado.

Tu entonces has encontrado un SDL_platform.h que incluye el prototipo de dicha función.

Sin embargo, antes, mirando los archivos que había en la web que me has enlazado, he alcanzado a encontrar un SDL.c que incluye dicha función.

Ese SDL.c debe formar parte seguro del código fuente de la SDL.

Si nuestra SDL no contiene dicho prototipo de función en el SDL_platform.h, es de suponer que, cuando fue compilada, su SDL.c tampoco incluía la función en sí.

Por lo tanto, lo que estamos intentando hacer (porque yo acabo de probarlo también haciendo un backup previo de mi SDL_platform.h y me he bajado el que has enlazado), es llamar a una función que realmente no existe en nuestro SDL, solo contamos con el prototipo declarado en el SDL_platform.h, no con la función en sí.

Salu2

<[(x)]>

#6
esato... habia pensado en eso...

me (460 en la diversidad xd  
<[(x)]>