Foros del Web » Programación para mayores de 30 ;) » C/C++ »

SDL C No compila

Estas en el tema de SDL C No compila en el foro de C/C++ en Foros del Web. Hola! Código: #include <SDL/SDL.h> #include <stdio.h> #include <stdlib.h> int main() { SDL_Init(SDL_INIT_VIDEO); SDL_Init(SDL_INIT_AUDIO); if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) { fprintf(stderr, "Error al inicializar SDL: %s\n", ...
  #1 (permalink)  
Antiguo 28/08/2012, 13:10
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 12 años, 4 meses
Puntos: 7
SDL C No compila

Hola!

Código:
#include <SDL/SDL.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
SDL_Init(SDL_INIT_VIDEO);
SDL_Init(SDL_INIT_AUDIO);
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0)
{
fprintf(stderr, "Error al inicializar SDL: %s\n", SDL_GetError());
getchar();
exit(1);
}
printf("Esto anduvo");
getchar();

SDL_Quit();
return 0;
}
He estudiado un largo rato el uso de Winbgim, para programar con graficos. Sin embargo, se me ha recomendado estudiar SDL, y tras leer bastante, he intentado con este codigo.

Tecnicamente, deberia:

Iniciar SDL en modo video y en modo audio.

Luego, si hay errores en el inicio, te avisa
Si no hay errores, te avisa que todo esta bien.

Y cierra SDL
Y termina.

Sin embargo, me aparece este mensaje de error.

Código:
 C:\Dev-Cpp\lib\libSDLmain.a(SDL_win32_main.o)(.text+0x417) In function `console_main': 
  [Linker error] undefined reference to `SDL_main' 
 C:\Dev-Cpp\lib\libSDLmain.a(SDL_win32_main.o)(.text+0x417) ld returned 1 exit status 
 C:\Dev-Cpp\Programacion desde 0\Proyectos\Makefile.win [Build Error]  [SDL.exe] Error 1
Porque?

Saludos y disculpen si es una tonteria, jeje.

Nota: La biblioteca la descargue por el Dev C ++ con el sistema de Actualizaciones, y la instalo el Package Manager (es decir que no tuve nada que ver con la instalacion, asi que dudo que haya errores en eso)

Saludos de antemano!
  #2 (permalink)  
Antiguo 28/08/2012, 22:54
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Respuesta: SDL C No compila

Tienes que enlazar las librerias. creo que son 2. SDL.lib y SDL_main.lib

no recuerdo como se hace eso en Dev-cpp.
Seguro en las FAQs de la pagina de SDL viene como hacerlo.

Saludos
  #3 (permalink)  
Antiguo 29/08/2012, 04:08
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 13 años
Puntos: 46
Respuesta: SDL C No compila

En windows tendras una lucha constante con el uso de librerias, es un infierno.
Con lo facil que es en linux...

Como bien dice Instru tienes que enlazar esas librerias al compilador para que sepa donde estan.

Saludos.
  #4 (permalink)  
Antiguo 04/09/2012, 17:38
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: SDL C No compila

Ya lo intente, de hecho, el compilador lo hace automaticamente, tambien probe de forma manual, no pude.
  #5 (permalink)  
Antiguo 05/09/2012, 20:35
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Respuesta: SDL C No compila

El compilador no hace en enlace automaticamente, seguramente estas confundiendo con otra cosa.

En las FAQs de SDL viene claramente la solucion a este tipo de problemas.

Incluso en linux hay que hace el enlazado manualmente, aunque efectivamenete es mucho mas sencillo.

Saludos
  #6 (permalink)  
Antiguo 09/09/2012, 19:47
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: SDL C No compila

Amigos!!!

Ya lo logre, solo estaba usando el proyecto equivocado, estaba en el modo gl-sdl, ahora en el modo SDL solo anda de lujo.

Lo que si, quisiera saber:

He tenido numerosos problemas. Consegui un tutorial y esta de lujo, explica muy bien todo. Pero no puedo hacer que los programas se detengan. Es decir, que se ejecutan a toda velocidad y terminan, y yo solo alcanzo a ver unos destellos a la velocidad de la luz y se cierra todo (sniffff)

Me podeis explicar como hacerlo, el metodo que me muestran en los tutoriales no me anda.

Cita:
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {done=1;}
if (event.type == SDL_KEYDOWN || event.type == SDL_JOYBUTTONDOWN) {
if (event.key.keysym.sym == SDLK_ESCAPE) {
done=1;
Este metodo es, pero da lo mismo ponerlo o no, saludos!
  #7 (permalink)  
Antiguo 09/09/2012, 19:50
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: SDL C No compila

Amigos!!!

Ya lo logre, solo estaba usando el proyecto equivocado, estaba en el modo gl-sdl, ahora en el modo SDL solo anda de lujo.

Lo que si, quisiera saber:

He tenido numerosos problemas. Consegui un tutorial y esta de lujo, explica muy bien todo. Pero no puedo hacer que los programas se detengan. Es decir, que se ejecutan a toda velocidad y terminan, y yo solo alcanzo a ver unos destellos a la velocidad de la luz y se cierra todo (sniffff)

Me podeis explicar como hacerlo, el metodo que me muestran en los tutoriales no me anda.

Cita:
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {done=1;}
if (event.type == SDL_KEYDOWN || event.type == SDL_JOYBUTTONDOWN) {
if (event.key.keysym.sym == SDLK_ESCAPE) {
done=1;
Este metodo es, pero da lo mismo ponerlo o no, saludos!
  #8 (permalink)  
Antiguo 10/09/2012, 08:31
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 13 años
Puntos: 46
Respuesta: SDL C No compila

Buenas, no se si esto que te voy a decir es el problema que tienes pero creo que ese es.

La solucion a este problema es un bucle, el famoso "game loop"
Código C:
Ver original
  1. int corriendo = 1;
  2. while(corriendo)
  3. {
  4.     todo lo que quieras hacer...
  5.     if(se presiona boton SDL_QUIT) corriendo = 0)
  6.  
  7. }

Esto hara que el programa corra indefinidamente hasta que se presione el boton quit, que es la cruz roja de arriba a la derecha creo recordad.


PD: Si no te gusta lo de usar ints como condiciones, cosa a la que te acostumbras al final, puedes hacer una cosa muy facil, al principio del programa pones
Código C:
Ver original
  1. #define TRUE 1
  2. #define FALSE 0

Y ahora puedes usar este tipo de "booleano"

Saludos
  #9 (permalink)  
Antiguo 10/09/2012, 11:57
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: SDL C No compila

Gracias!

No, en realidad a mi no me gusta manejar valores booleanos (creo que asi se llaman los true-false), prefiero los numeritos jeje.

Voy a probar, pero en realidad, el codigo anterior, deberia hacer lo mismo, o no? revisa si el evento es SDL_Quit, y si lo es, te lo cierra.

Porque no anda entonces?
  #10 (permalink)  
Antiguo 11/09/2012, 02:06
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 13 años
Puntos: 46
Respuesta: SDL C No compila

Buenas, si lo recuerdo bien lo que hace la funcion SDL_PollEvents() es coger todos los eventos que se estan produciendo en ese momento para despues tu poder analizarlos.

Asi que, lo que hace tu codigo anterior es comprobar si hay algun evento en el momento actual, en el inicio del programa, y como no hay ninguno pues se cierra.


Saludos.
  #11 (permalink)  
Antiguo 11/09/2012, 14:04
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: SDL C No compila

Y como podria hacer?, intente hasta poner asi:

int corriendo = 1;
while(corriendo == 1)
{


}

Y sigue cerrandose a la misma velocidad de antes.

Voy a buscar otro tutorial, porque este esta muy prolijo y todo pero los programas de ejemplo no andan, jeje.
  #12 (permalink)  
Antiguo 11/09/2012, 14:17
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: SDL C No compila

Ha, hola, ya descubri porque no andaba, jeje, el programa ponia una imagen de bit en la pantalla y el programa tenia mal escrito el nombre, una simple letra, jeje

Disculpen mi estupidez y las molestias.

Saludos!
  #13 (permalink)  
Antiguo 11/09/2012, 14:31
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 13 años
Puntos: 46
Respuesta: SDL C No compila

Jaja no pasa nada, creo que a todo el mundo le ha pasado una cosa asi. Una vez estube como una semana intentando arreglar una cosa que me hizo reestructurar completamente un programa. Luego resulto que tenia el nombre de una variable mal jaja.

Saludos.
  #14 (permalink)  
Antiguo 14/09/2012, 14:24
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: SDL C No compila

No, que tortura, reestructurar todo un programa por una variable, seguramente te quisiste matar, jeje.

Ahora estoy intentando hacer un juego simple, de naves que se disparan entre ellas. Pero tras hacer un mapa de bits, me gustaria saber como hacer que solo aparezca la nave, no el cuadrado blanco que te genera el paint. Es que la nave la hice en paint.
  #15 (permalink)  
Antiguo 15/09/2012, 10:08
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 13 años
Puntos: 46
Respuesta: SDL C No compila

Creo que se lo que quieres decir, que cuando pones la imagen sale el fondo del paint no?

Creo recordar que existia una funcion de SDL que eliminaba el fondo.

La funcion es SDL_SetColorKey, puedes buscar informacion sobre ella porque la verdad que no me acuerdo de como se usaba del todo y no quiero decirtelo mal :P

Saludos.
  #16 (permalink)  
Antiguo 19/09/2012, 15:32
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: SDL C No compila

Hola!!

Gracias Lemon!!! Esa es la funcion y anda de lujo. Ahora ese cuadrado blanco se ve del color de fondo (por ahora negro). Pero tengo un problema con el sonido. Necesito que reproduzca un simple Wav. Pero no lo hace, trabaja con SDL_Mixer, y juro por mi que esta bien linkeado, ahora aprendi a hacerlo bien. Ya que intente hacer que reproduzca, solo usando el codigo de el audio, y anduvo de lujo.

Dejo Code: //Flier Land Rover por Alejandro*/
/*El programa genera un auto, y permite moverlo por la pantalla. Ademas, prende y apaga la luz de retroceso si retrocede,
y el audio aun no funciona, pero estoy haciendo un code para un juego.*/

#include <stdio.h>
#include "SDL.h"
#include <SDL_mixer.h>
const int WINDOW_WIDTH = 1020;//altura de ventana
const int WINDOW_HEIGHT = 709;//ancho de ventana
const char* WINDOW_TITLE = "Flier Land Rover";//titulo de ventana

int main(int argc, char **argv)
{
int x, y;//posicion inicial de el vehiculo
x = 100;
y = 100;


//Idea: Hacer el vehiculo fuera de la pantalla y que entre con el sonido actual
SDL_Init( SDL_INIT_VIDEO |SDL_INIT_AUDIO);
//Inicia el Sonido y el Video
SDL_Surface *image;
//Buffer de Imagen
SDL_Rect dest;
//Posicion de superficie cuadrada que contiene el BMP
SDL_Surface* screen = SDL_SetVideoMode( WINDOW_WIDTH, WINDOW_HEIGHT, 0,SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN);//Inicia la ventana
SDL_WM_SetCaption( WINDOW_TITLE, 0 );
//Titulo de ventana
SDL_Event event;
//Deteccion de eventos
Mix_Chunk *sonido;
//apuntador a variable que contiene el sonido.
bool luz_blanca = false;
//Variable Booleana que maneja la luz trasera
bool gameRunning = true;
//Variable Booleana que maneja el cierre del bucle loop.
int canal;
//Variable de Canal de Sonido

if(Mix_OpenAudio(22050, AUDIO_S16, 2, 4096)) {
printf("No se puede inicializar SDL_mixer %s\n",Mix_GetError());
exit(1);
}
//Inicia los parametros de el sonido
sonido = Mix_LoadWAV("car-ignition-2.wav");
//La variable sonido ahora contiene el archivo car-ignition-2.wav
while (gameRunning)//Inicio del Loop
{

if(luz_blanca == false)
{
image = SDL_LoadBMP("LandRover.bmp");

canal = Mix_PlayChannel(-1, sonido, 0);
}
else
{
image = SDL_LoadBMP("LandRover1.bmp");
luz_blanca = false;
canal = Mix_PlayChannel(-1, sonido, 0);
if(Mix_Playing(canal) == 1)
{
printf("Se esta reproduciendo");
getchar();
}
}

SDL_SetColorKey(image,SDL_SRCCOLORKEY|SDL_RLEACCEL ,SDL_MapRGB(image->format,255,255,255));
dest.x = x;
dest.y = y;
dest.w = image->w;
dest.h = image->h;


SDL_BlitSurface(image, NULL, screen, &dest);


SDL_Flip(screen);

SDL_FreeSurface(screen);

dest.x = x;
dest.y = y;
dest.w = image->w;
dest.h = image->h;
SDL_FillRect(screen,&dest,SDL_MapRGB(screen->format,0,0,0));


Uint8 *keys;
keys=SDL_GetKeyState(NULL);
if (keys[SDLK_UP] == 1)
{
y = y - 1;
}
if (keys[SDLK_DOWN] == 1)
{
y = y + 1;
}
if (keys[SDLK_LEFT] == 1)
{
x = x - 1;
luz_blanca = true;
}
if (keys[SDLK_RIGHT] == 1)
{x = x + 1;}


if (SDL_PollEvent(&event))
{
if (event.type == SDL_QUIT)
{
gameRunning = false;
}

}


keys=SDL_GetKeyState(NULL);
if (keys[SDLK_ESCAPE] == 1) {gameRunning = false;}

}


SDL_Quit();
return 0;
}
  #17 (permalink)  
Antiguo 21/09/2012, 07:22
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: SDL C No compila

Alguna idea del porque?
  #18 (permalink)  
Antiguo 21/09/2012, 08:04
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 13 años
Puntos: 46
Respuesta: SDL C No compila

Cual es el problema que tienes? Es que en tu mensaje no me queda del todo claro y si es un tema de sonido yo no lo he tocado demasiado y no creo que pueda ayudarte.

Saludos
  #19 (permalink)  
Antiguo 22/09/2012, 20:05
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: SDL C No compila

Es que simplemente el sonido no se reproduce. Y por lo que vi en todos lados, deberia hacerlo. Yo tampoco no se absolutamente nada de sonido, por eso preguntaba, jeje.

Sospecho que estoy errando en algo logico, porque no veo errores de sintaxis.

Nota: Las funciones, por si solas, probadas en un programa aparte, andan de lujo, reproduce y todo.
  #20 (permalink)  
Antiguo 23/09/2012, 09:53
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 13 años
Puntos: 46
Respuesta: SDL C No compila

Bueno cuando a mi me pasa una cosa de estas lo que hago es lo que yo digo ir comiendote trocitos de codigo(curioso nombre que invente xDD).

Simplemente lo que haces es donde crees que puede haber un error borras una lines(o la comentas, que es mas sensato) ejecutas y miras que pasa y asi hasta que o encuentres un error o algo pase.

Haciendo esto he conseguido arreglar muchas cosas, y mira que parece una tonteria xD

Saludos.
  #21 (permalink)  
Antiguo 23/09/2012, 10:09
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Respuesta: SDL C No compila

Cita:
Iniciado por harryarcoiris Ver Mensaje
Es que simplemente el sonido no se reproduce. Y por lo que vi en todos lados, deberia hacerlo. Yo tampoco no se absolutamente nada de sonido, por eso preguntaba, jeje.

Sospecho que estoy errando en algo logico, porque no veo errores de sintaxis.

Nota: Las funciones, por si solas, probadas en un programa aparte, andan de lujo, reproduce y todo.
Revisa que se cargue correctamente el archivo wav. Tu solo llamas a la función, pero no revisas si efectivamente se cargo el archivo correctamente.

Saludos
  #22 (permalink)  
Antiguo 23/09/2012, 11:05
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: SDL C No compila

Vale, me fijare con un if, en SDL si la funcion te devuelve un valor negativo, quiere decir que hubo un error.

Gracias, pronto te aviso si anduvo o no.

Etiquetas: compila, int, programa, sdl
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:30.