Ver la versión completa : Una ayudita para un pobre que quiere compilar
Muy buenas.
Esto teniendo problemas para poder compilar algo para la GP2X. Os cuento un poco, compilo bajo windows con "DEV-C++" y las SDL que existen en forma de paquete para esta aplicacion, tengo creada una nueva configuracionde compilador para que me tire de "devkitGP2X". Todo va bien pero a la hora de compilar me da un monton de errores que yo creo que son de linkado de SDL pero que no tienen mucho sentido ya las librerias estan añadidadas al proyecto.
main.o In function draw()
main.c undefined reference to `SDL_MapRGB'
main.c undefined reference to `SDL_FillRect'
main.c undefined reference to `SDL_MapRGB'
main.c undefined reference to `SDL_MapRGB'
main.c undefined reference to `SDL_MapRGB'
main.c undefined reference to `SDL_MapRGB'
main.c undefined reference to `SDL_MapRGB'
main.c undefined reference to `SDL_FillRect'
main.c undefined reference to `SDL_Flip'
main.c undefined reference to `SDL_Delay'
main.o In function `main':
main.c undefined reference to `SDL_Init'
main.c undefined reference to `SDL_GetError'
main.c undefined reference to `SDL_SetVideoMode'
main.c undefined reference to `SDL_GetError'
main.c undefined reference to `SDL_WM_SetCaption'
main.c undefined reference to `SDL_PollEvent'
main.c undefined reference to `SDL_Quit'
Haber si me podeis hechar una manita.
KaosOverride
13/02/2006, 15:34
En las opciones de proyecto prueba a mirar si estan incluidos los -lSDL de rigor para el linkado, y las rutas de directorio de los includes
NoobLuck
13/02/2006, 16:51
Mira en los hilos, en un post se incluyen unas SDL con un makefile de ejemplo.
KaosOverride
13/02/2006, 17:18
El problema es que el DEV-C++ se crea los makefiles el solito :( (A no ser que le especifiques otro por donde andan las mismas opciones que comentaba antes)
El makefile lo tengo como bien dices cambiado para que me coja uno creado por mi y todas las librerias estan supuestamente añadidas.
Este es mi makefile:
# Project: PruebaGP2X
CPP = C:\Dev-Cpp\devkitGP2X\bin\arm-linux-g++.exe
CC = C:\Dev-Cpp\devkitGP2X\bin\arm-linux-gcc.exe
OBJ = main.o $(RES)
LINKOBJ = main.o $(RES)
LIBS = -L"C:/Dev-Cpp/lib" -L"C:/Dev-Cpp/devkitGP2X/lib" -L"C:/Dev-Cpp/lib" -L "../../lib/libSDL.a" -L "../../lib/libSDL_image.a" -L "../../lib/libSDL_image.dll.a" -L "../../lib/libSDLmain.a"
INCS = -I"C:/Dev-Cpp/devkitGP2X/include" -I"C:/Dev-Cpp/Proyectos/PruebaGP2X"
CXXINCS = -I"C:/Dev-Cpp/devkitGP2X/include" -I"C:/Dev-Cpp/devkitGP2X/lib/gcc/arm-linux/4.0.2/include" -I"C:/Dev-Cpp/devkitGP2X/include/c++/4.0.2/backward" -I"C:/Dev-Cpp/devkitGP2X/include/c++/4.0.2/arm-linux" -I"C:/Dev-Cpp/devkitGP2X/include/c++/4.0.2" -I"C:/Dev-Cpp/Proyectos/PruebaGP2X"
BIN = PruebaGP2X.exe
CXXFLAGS = $(CXXINCS)
CFLAGS = $(INCS)
RM = rm -f
.PHONY: all all-before all-after clean clean-custom
all: all-before PruebaGP2X.exe all-after
clean: clean-custom
${RM} $(OBJ) $(BIN)
$(BIN): $(OBJ)
$(CPP) $(LINKOBJ) -o "PruebaGP2X.exe" $(LIBS)
main.o: main.c
$(CPP) -c main.c -o main.o $(CXXFLAGS)
Whitehat
13/02/2006, 19:43
Te recomiendo que utilizes Minsys para compilar ya que el DEV-C++ tiene un fallo
y es que crea sus propios Makefile y entonces no funciona.
Para el Makefile haztelo tu con esta estructura:
CROSS_COMPILE = C:/devkitGP2X/bin/arm-linux-
SDL_BASE = C:/devkitGP2X/bin/arm-linux-
LDFLAGS = -static
CC = $(CROSS_COMPILE)gcc
CXX = $(CROSS_COMPILE)g++
STRIP = $(CROSS_COMPILE)strip
CFLAGS = `$(SDL_BASE)sdl-config --cflags` -O2 -Wall
CXXFLAGS = `$(SDL_BASE)sdl-config --cflags` -O2 -Wall
LIBS = `$(SDL_BASE)sdl-config --libs`
SDLTEST_TARGET = <- Aqui ponle el nombre del q qieres. Ej: nombre.gpe
SDLTEST_OBJS = <- Aqui ponle los .o
all : $(SDLTEST_TARGET)
$(SDLTEST_TARGET) : $(SDLTEST_OBJS)
$(CXX) $(LDFLAGS) -o $(SDLTEST_TARGET) $(SDLTEST_OBJS) $(LIBS)
$(STRIP) $(SDLTEST_TARGET)
clean:
rm -f $(ALL_TARGETS) *.o *~
Con ese tipo de Makefile nunca me ha fallado ^^
Espero que te sirva de ayuda
Mundaka yo uso DEV-C++ esta tarde/noche te miro mi configuración y te respondo
KaosOverride
13/02/2006, 20:34
LIBS = -L"C:/Dev-Cpp/lib" -L"C:/Dev-Cpp/devkitGP2X/lib" -L"C:/Dev-Cpp/lib" -L "../../lib/libSDL.a" -L "../../lib/libSDL_image.a" -L "../../lib/libSDL_image.dll.a" -L "../../lib/libSDLmain.a"
Probaria a llamarlos por este orden...
SDLmain SDL_image SDL_mixer SDL
INCS = -I"C:/Dev-Cpp/devkitGP2X/include" -I"C:/Dev-Cpp/Proyectos/PruebaGP2X"
CXXINCS = -I"C:/Dev-Cpp/devkitGP2X/include" -I"C:/Dev-Cpp/devkitGP2X/lib/gcc/arm-linux/4.0.2/include" -I"C:/Dev-Cpp/devkitGP2X/include/c++/4.0.2/backward" -I"C:/Dev-Cpp/devkitGP2X/include/c++/4.0.2/arm-linux" -I"C:/Dev-Cpp/devkitGP2X/include/c++/4.0.2" -I"C:/Dev-Cpp/Proyectos/PruebaGP2X"
Te falta el -I"C:/Dev-Cpp/devkitGP2X/include/SDL" o los includes los llamas como #include <SDL/SDL.h>?
que yo sepa, en los Makefiles normales, -L (mayúscula) se usa para especificar la ruta de las bibliotecas, y -l (minúscula) para especificar la biblioteca en si... Y no veo que tengas especificada ninguna biblioteca... pero puede que me equivoque porque nunca he usado el DEV-C++ (no uso windows)
que yo sepa, en los Makefiles normales, -L (mayúscula) se usa para especificar la ruta de las bibliotecas, y -l (minúscula) para especificar la biblioteca en si... Y no veo que tengas especificada ninguna biblioteca... pero puede que me equivoque porque nunca he usado el DEV-C++ (no uso windows)
He probado a dejarlo asi sin -L ni -l y me da el mismo error:
LIBS = -L"C:/Dev-Cpp/lib" -L"C:/Dev-Cpp/devkitGP2X/lib" -L "C:/Dev-Cpp/lib" ../../lib/libSDLmain.a ../../lib/libSDL.a ../../lib/libSDL_image.a ../../lib/libSDL_image.dll.a
Tambien he probado haber si el orden afectaba a la compilacion pero nada.
He probado a dejarlo asi sin -L ni -l y me da el mismo error:
LIBS = -L"C:/Dev-Cpp/lib" -L"C:/Dev-Cpp/devkitGP2X/lib" -L "C:/Dev-Cpp/lib" ../../lib/libSDLmain.a ../../lib/libSDL.a ../../lib/libSDL_image.a ../../lib/libSDL_image.dll.a
Tambien he probado haber si el orden afectaba a la compilacion pero nada.
yo veo unas "-L" exactamente igual que antes (supongo que correctas pues especifican una ruta), pero sigo sin ver ningun "-l" que, en teoria, es lo que te falta...
En un sistema operativo decente (por ejemplo GNU/Linux ;-) harias
LIBS = -L /usr/lib/SDL -lSDL -lSDL_image...
o sea que imagino que deberias hacer
LIBS = -L"C:/Dev-Cpp/lib" -L"C:/Dev-Cpp/devkitGP2X/lib" -L "C:/Dev-Cpp/lib" -lSDLmain -lSDL -lSDL_image
o si acaso
LIBS = -L"C:/Dev-Cpp/lib" -L"C:/Dev-Cpp/devkitGP2X/lib" -L "C:/Dev-Cpp/lib" -l "../../lib/libSDLmain.a" -l "../../lib/libSDL.a" -l "../../lib/libSDL_image.a" -l "../../lib/libSDL_image.dll.a"
pero como digo, al no usar windows no puedo asegurartelo
yo veo unas "-L" exactamente igual que antes (supongo que correctas pues especifican una ruta), pero sigo sin ver ningun "-l" que, en teoria, es lo que te falta...
Cierto. Y seguro que el make que utiliza Dev-C++ para Windows utiliza exactamente el mismo formato que el de Linux.
Mundaka, aquí tienes mi línea LIBS:
LIBS = -L"C:/Informatica/devkitGP2X/lib" -lSDL_image -lpng12 -lz -ljpeg -lm -ldl -lSDL_mixer -lvorbisidec -lmikmod -lsmpeg -lSDL -lpthread
Si no usas SDL_mixer, te puedes cargar desde -lSDL_mixer hasta -lsmpeg.
Por cierto, me acabo de dar cuenta de que en tu LIBS
LIBS = -L"C:/Dev-Cpp/lib" -L"C:/Dev-Cpp/devkitGP2X/lib" -L "C:/Dev-Cpp/lib" ../../lib/libSDLmain.a ../../lib/libSDL.a ../../lib/libSDL_image.a ../../lib/libSDL_image.dll.a
no debería haber los -L"C:/Dev-Cpp/lib" (a parte de que están repetidos), a menos que ahí tengas librerías compiladas para GP2X.
Saludos y suerte.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.