Hallo Leute!
Hab mich gerade (wieder mal) etwas mit Irrlicht befasst und habe leider ein Problem: Ich kann nichts linken, scheinbar hat er Probleme mit der Funktion createDevice().
Hier der Output von g++/ld:
Code:
g++ -Wall -g -I/usr/local/include/irrlicht/ -I/usr/X11R6/include/ -c main.cpp
g++ -Wall -g -L/usr/local/lib/libIrrlicht.a -L/usr/X11R6/lib/ -lIrrlicht -lm -lGL -lXxf86vm -lXext -lX11 -o main main.o
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: Undefined symbols:
irr::createDevice(irr::video::E_DRIVER_TYPE, irr::core::dimension2d<int> const&, unsigned int, bool, bool, bool, irr::IEventReceiver*, char const*)
collect2: ld returned 1 exit status
make: *** [all] Error 1
Und hier meine Makefile:
Code:
EXECUTABLE=main
CC=g++
CC_FLAGS=-Wall -g
CC_INC=-I/usr/local/include/irrlicht/ -I/usr/X11R6/include/
CC_LIB=-L/usr/local/lib/ -L/usr/X11R6/lib/
OBJ_LIST=main.o
LIB_LIST=-lIrrlicht -lm -lGL -lXxf86vm -lXext -lX11
all: $(OBJ_LIST)
$(CC) $(CC_FLAGS) $(CC_LIB) $(LIB_LIST) -o $(EXECUTABLE) $(OBJ_LIST)
%$(OBJ_END): %$(SOURCE_END)
$(CC) $(CC_FLAGS) $(CC_INC) -c $<
run:
./$(EXECUTABLE)
clean:
rm -f *$(OBJ_END)
rm -f $(EXECUTABLE)
rm -f $(PACKAGE_NAME)
rebuild:
make clean
make all
Der Code den ich kompiliere ist das erste Beispiel der irrLicht-Seite ("0. Hello World").
Ich hab leider keine Ahnung, woran das liegen könnte. Meine libIrrlicht.a liegt unter /usr/local/lib, die dazugehörigen Includes in /usr/local/include/irrlicht
Mfg,
hamZta
edit:Habe das Problem gelöst! Scheinbar hat MacOS X Probleme damit, wenn man g++ die Linkerargumente "zu früh" übergibt

Hier mein neues Makefile:
Code:
(...)
LIB_LIST=-lIrrlicht -lm -lXxf86vm -lXext -lX11 -framework Cocoa -framework OpenGL
all: $(OBJ_LIST)
$(CC) $(CC_FLAGS) $(CC_INC) -o $(EXECUTABLE) $(OBJ_LIST) $(CC_LIB) $(LIB_LIST)
%$(OBJ_END): %$(SOURCE_END)
$(CC) $(CC_FLAGS) -c $< $(CC_INC)
(...)
Bei den Libraries greife ich nun auf die Frameworks Cocoa (für die Fenstererstellung) und OpenGL (anstatt nur die Library zu verwenden). Ausserdem übergebe ich meine LIB_LIST als letztes Argument an g++, scheinbar war das das Problem.