Aktuelle Zeit: 13.05.2025, 13:57

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 09.06.2008, 18:07 
Offline

Registriert: 09.06.2008, 18:01
Beiträge: 1
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.


Nach oben
 Profil  
 
BeitragVerfasst: 10.06.2008, 15:30 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Kurzer Kommentar zur technischen Seite:
Hast du eine statische Library von Irrlicht?
Statische Libraries werden zumindest mit gcc immer an der Position ausgewertet, an der sie im Befehl stehen. Alle Dateien danach werden nicht mehr mit den Funktionen in der Library gelinkt. Dies tritt nicht auf, wenn dynamische/shared libraries benutzt werden.

Gilt alles nur für GCC und evtl nur f+r *nix.

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de