Hola, bien, como estos días los he tenido libres he seguido con mi aprendizaje en C, bien, he seguido este tutorial, todo bien, hasta que a la hora de compilar, sale un error algo así:
main.o: In function 'main':
main.cpp:(.text+0x80): undefined reference to "initGraphics()"
main.cpp:(.text+0xc8): undefined reference to "loadImage(char const*)"
main.cpp:(.text+0xfc): undefined reference to "blitAlphaImageToScreen(int,int,int,int,Image*,int,int)"
main.cpp:(.text+0x124): undefined reference to "flipScreen()"
collect2: Ld returned 1 exit status
make: ***[hello.elf] Error 1
Terminado
Y solo me crea unos archivos .o(obj), pero no el Eboot, he reescrito el main ya 3 veces, y nada, el mismo error, por lo que veo, puede ser error de la libreria graphics o algo por el estilo, pero aun no se como solucionarlo, les dejo mi main:
//Lecion 4, complicando una imagen simple, by B77 #include <pspdisplay.h> #include <pspctrl.h> #include <pspkernel.h> #include <pspdebug.h> #include <pspgu.h> #include <png.h> #include <stdio.h> #include "graphics.h" #define printf pspDebugScreenPrintf #define MAX(X, Y) ((X) > (Y) ? (X) : (Y)) PSP_MODULE_INFO("Prueba Imagen",0,1,1); //Los CallBacks /* Llamada de salida */ int exit_callback(int arg1, int arg2, void *common) { sceKernelExitGame(); return 0; } /* Llamada thread */ int CallbackThread(SceSize args, void *argp) { int cbid; cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL); sceKernelRegisterExitCallback(cbid); sceKernelSleepThreadCB(); return 0; } /* Configura llamada thread y vuelve a su thread id */ int SetupCallbacks(void) { int thid = 0; thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0); if(thid >= 0) { sceKernelStartThread(thid, 0, 0); } return thid; } int main(){ char buffer[200]; //Una cadena de 200 caracteres variables Image* ourImage; //Definimos una variable del tipo imagen, cuyo nombre es ourImage pspDebugScreenInit(); //Iniciamos la pantalla para poder escribir en ella SetupCallbacks(); //Llamamos a los Callbacks initGraphics(); //Iniciamos la pantalla para poder mostrar gráficos sprintf(buffer,"ourImage.png"); //Escribimos en la cuerda con la funcion sprintf, en pocas palabras, almacenamos el "camino" de nuestras imagenes en la cuerda ourImage=loadImage(buffer); //Ahora, cargamos la imagen dentro de las variables, recordar que loadImage recibe como parametro una cuerda que tenga almacenada el "camino" de la imagen a cargar if (!ourImage) { printf("No se ha cargado la imagen correctamente\n"); //Sí la imagen no se carga correctamente, nuestra variable tomara un valor de 0(false) y printeara el mensaje "La imagen no se ha cargado correctamente", si no hay ningun fallo(sino = else), entonces ejecutara el siguiente bloque de codigo }else{ int x=0; int y=0; //Variables integers(int), x e y(coordenadas de nuestra imagen) en 0 sceDisplayWaitVblankStart(); //La pausa.. while(x<480){ //Un loop, si x es menor que 480 entonces correra el siguiente loop while(y<272){ //Y en este loop... blitAlphaImageToScreen(0,0,32,32,ourImage,x,y); //Mostramos nuestra imagen y+=32; //Sumamos 32 a Y en cada pasada del loop, notar se pudo hacer: y=y+32, se incremente en 32 por ser el alto de nuestra imagen }//Cerramos un loop x+=32; //Se aumenta X mas 32(ancho de nuestra imagen) para moverla horizontalmente y=0; //Se vuelve a poner en 0 para que se empieze el recorrido horizontal de nuevo a cada pasada en la parte de la esquina izquierda en el angulo de arriba }//Cerramos el otro loop flipScreen(); //Actualizamos la pantalla(se, como screen.flip(); en Lua) } //Cerramos el else sceKernelSleepThread(); //Hacemos una breve pausa para ver la salida, de no poner esto veriamos muy rapidamente nuestro resultado y inmediatamente seriamos regresados al menu del Psp(XMB) return 0; //Las funciones integers(int) retornan enteros(entre ciertas cantidades, que no recuerdo muy bien), en este caso 0 } //Cerramos la función interger(int) main(cuya cual es la principal)
Y mi makefile:
TARGET = hello OBJS = main.o graphics.o framebuffer.o CFLAGS = -O2 -G0 -Wall CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti ASFLAGS = $(CFLAGS) LIBDIR = LIBS = -lpspgu -lpng -lz -lm LDFLAGS = EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Procesando una imagen simple PSPSDK=$(shell psp-config --pspsdk-path) include $(PSPSDK)/lib/build.mak
Todo lo he echo siguiendo el tutorial, tengo los archivos necesarios a un lado del main y la verdad no se porque seá el error, espero y me puedan ayudar.
Un saludo y gracias de antemano.
Edito: Ahora he movido la libreria graphics.h junto con su archivo c a la carpeta de pspdev/psp/sdk/include/aquilomovi y luego, la incluyo ya con los <> y en el makefile quite de los obj's el de graphics.h, y el error es exactamente el mismo =/.
EDITO2: Ahora he instalado el pssdk(o algo así xD), y sigue el mismo error =(.
EDITO3: Si señores, me lo he solucionado, y el error era con el editor que usaba, el DEV++, y esque guardaba el main con extensión ccp(archivos de c++), y ahora le he dado que lo guarde con extensión c, funciona perfectamente, gracias a todos, se que es un error muy "bobo", pero pues, solo así voy a aprender y a fijarme en esos "detallitos" xD.
Moderadores, no cierren el post, si alguien más tiene el mismo problema, que venga y vea la solucion.
Entonces, nadie sabe como
Entonces, nadie sabe como solucionar lo del compilador =(?
problablemente no es el
problablemente no es el compilador si no el codigo no se de donde estas aprendiendo pero haces todo muy diferente a como yo lo ago creo que te puedo decir como hacerlo de una forma diferente solo quieres mostrar una imagen y texto eso es facil mira si puedes compilar esto viene con todo y compilador solo para que le corras el "compiler" y empiese a trabajar tu maquina para sacar el eboot.pbp tambien viene un archivo que se llama "LIMPIAR" ese lo usas para que ya que salio tu eboot y lo guardaste te quite todo lo innecesario ya que al instalar nuevas librerias o acciones aunque el compilador lo aga bien puede dar fallos a la hora de correrlo en el psp y biene con el code para que tu HB pueda ser firmado.
http://www.megaupload.com/?d=BGCW95IE
espero y te sirva de algo saludos doble 7
Ok, gracias sting, lo
Ok, gracias sting, lo probare, y pues no es el code, Rover me dijo que el ya compilo el code que dejo arriba, pero, probare lo que me dejas, gracias =).
Pd: Aprendo de los tutoriales de aquí de sb.
EDITO: Me ha servido a la perfecion :D, le dí una leida por encimita, pero lo lei(el main), se me hace más facil como lo haces tú que como lo estoy aprendiendo, de donde aprendiste?
EDITO2: Ya lo solucione, y va a la perfeccion, fue cosa de las extensiones(mira arriba he editado el post)
OK doble 7 que bueno que te
OK doble 7 que bueno que te sirvio cualquier cosa ya sabes y que bueno que ya te pasaste a C ;).
A mi me pasó exactamente lo mismo
¿ alguien se acuerda de que posteé un hilo llamado ¿problema del compilador? ?
Pero me pasaba con un prx. Tuve que quitar del makefile el USE_KERNEL_LIBC = 1, y no sé si el USE_KERNEL_LIBS = 1, pero... a lo mejor, deberías ir al directorio $PSPSDK/psp/sdk/include/libc y mirar si ahí está graphics.h. Si no está, cópialo ahí y... mmm... bueno, por probar... pero vamos que no sé, eso fue mi solución para un prx, no un pbp.
Ojalá que se te solucione ;-)
http://www.mhypnok.blogspot.com/
Gracias a Dark_AleX, Total_Noob, VirtuousFlame, Coldbird, Codestation...
Lo probare, gracias.
Lo probare, gracias.
EDITO: Tambien paso su respectivo C?..
EDITO2: Ah, ya estoy harto =(, lo pase a la carpeta del sdk en include, y si la detecto, pero el *** error es el mismo :@
Otra cosa, lo pase a libc, pero no lo detectaba, decia que no encontraba la lib, lo pase a include(todo esto en la carpeta sdk) y si lo detecto, pero el error es el mismo =( =(
Decididamente estás haciendo
Decididamente estás haciendo algo mal. Como puedes ver en esta captura, acabo de compilar sin ningún error el code que dejaste y generó todo lo que debería.
Usé el kit de programación para torpes (nombre raro, pero apropiado en mi caso xD), instalándolo como menciona la noticia.
EDITO: Y funciona bien en el psp =D
Vaya, ese es el que yo uso!,
Vaya, ese es el que yo uso!, y otra cosa, lo probaste con el code que dejo?. Que versión del kit usaste?, yo tengo la v2 creo, ya que esa era la que se recomendaba.
Si, copié y pegué el code que
Si, copié y pegué el code que dejaste arriba. Usé la versión 3 del kit (que es la más nueva colgada en la noticia)
Voy a instalar la V3, ahora
Voy a instalar la V3, ahora te digo que tal me va, gracias bro.
EDITO: =(, me ha salido lo mismo, ya he desactivado el controls de cuentas de usuario, uso windows 7 , y una cosa medio rara, el compilador me aparecio en una carpeta llamada samples by marce82, y compile cuando el compilador estaba en esa carpeta, marco el error, luego, movi el compilador a la carpeta principal y volvi a compilar y lo mismo =(.
Otra cosa, has usado el mismo makefile que deje ahí?
Si, mismo makefile y mismo
Si, mismo makefile y mismo code. Los nombré Makefile y main.c, respectivamente, y los copié en una carpeta llamada TEST que hice en la raíz de mi disco duro principal (unidad C:). Después, descomprimí el archivo que ofrecen en el tutorial en esa misma carpeta, y copié el compilador.bat que estaba en la ruta que mencionas.
Eso he hecho, y ni un solo error. Seguro que está bien instalado el kit? Configuraste bien las variables de entorno antes de instalarlo?
En efecto, configure todo
En efecto, configure todo bien, tu como tienes las variables de entorno, pasamelas ocmo las tienes por fa.
EDITO: Aqui una captura del error que me da, y no creo que sean las variables, ya compile unas cosas que tenia como ejemplos este pack.
Veamos...
Variable Path, editarla. El valor en mi caso empezaba con C:/Program Files..., añadí C:/PSPDev/bin; tal cual al inicio.
Crear dos variables:
Todos los cambios hechos en la sección de variables del sistema. Despúes de hacer esas modificaciones, instalar el kit como administrador.
EDITO: Si ya compilaste correctamente algún ejemplo, entonces debe ser error con los archivos necesarios. Estás copiando TODOS los archivos que facilita el tutorial al lado de tu main.c y tu makefile? Es lo único que se me ocurre que estés haciendo mal con ese mensaje de error :/
Si, todos rober, las dos
Si, todos rober, las dos librerias con sus respectivos archivos C y la imagen, algo que me parece esque me falta el ";" en la variable PATH, pero insisto, ya he compilado correctamnte un ejemplo.
EDITO: :/, puse el ";", ya tengo todas las variables bien, ahora, lo que no habia echo era instalar el kit como administrador, bien, ya lo hice(aunque creo que no había necesidad, ya que había quitado el CUA), pero bueno, lo hize, y exactamente el mismo error de la captura.
Gracias por la ayuda, para más info, mi sistema es windows7 starter y es de 32 bits.
Si alguien más programador en C sabe el error, por favor, digamelo, ya que si sigue esto creo que no podre programar, ya que el blitear una imagen es bien basico y si no puedo compilar... :/.
Yo tambien uso windows 7 de
Yo tambien uso windows 7 de 32 y compilo perfecto http://teammex.ucoz.es/forum/5-11-1
Has compilado agregando
Has compilado agregando librerías del mismo directorio?
si y todo perfecto ;)
si y todo perfecto ;)
Exactamente, así como lo dice
Exactamente, así como lo dice el tuto que me mandaste, así lo instale, solo tenia el ; adelante(en al variable PATH) y no atras, ya lo cambie, y nada sigue igual =(.
en vez de tostring
usa string.format(Variable, %c)
Nada, eso tampoco sirve, de
Nada, eso tampoco sirve, de echo, da error, dice: unexcpetd symbol near %.
Pero en caso de que lo haya escrito mal yo, será lo mismo que dice rober, me lo marcara nil porque es una variable que aún no está definida, lo mejor es dejarlo en comillas. Gracias por la ayuda dioni y rg.
y claro que da error...
si leen la documentación debería decir algo como:
string.format(STRING formato, . ...)
recibe STRING como formato, y luego las variables de acuerdo al formato, en tu caso: string.format("%c", variable)
Al rato leo el post, sólo aclaraba lo de string.format
PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]
07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD
Recuerda: Sé el intérprete -_-
Sobre tu primera duda, sigo
Sobre tu primera duda, sigo sin tener idea (como te dije en la mañana). Sobre la segunda... NO es lo mismo var que "var". Sin las comillas es una variable, con comillas es string. Como escribiste valores sin comillas en la tabla, lo toma como variables, y al no estar definidas antes, te advierte que valen nil.
No se si me entendiste bien,
No se si me entendiste bien, osea, lo de las comillas si lo se, pero te digo, estoy jugando con lua(xD), y queria saber si podria hacer tostring de la manera como lo hago, al parecer veo que no(por eso de las variables, tienes mucha razón).
Gracias rober, tu siempre ayudandome =).