PDA

Ver la versión completa : Una ayudita para un pobre que quiere compilar



Mundaka
13/02/2006, 15:12
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)

Mundaka
13/02/2006, 18:36
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

mog_ur
13/02/2006, 20:08
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>?

lemon
13/02/2006, 21:05
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)

Mundaka
13/02/2006, 22:02
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.

lemon
14/02/2006, 04:16
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

miq01
14/02/2006, 05:39
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.