DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > OS4 SDK mit SDL: Undefined references | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2010-12-11, 21:03 h Reth Posts: 1858 User |
Hallo zusammen, probiere gerade meinen SDL port manuell mit Hilfe des Porting Guides. Leider noch erfolglos. Der Linker findet wohl keine libs, obwohl ich alle angegeben habe. Hier mal das makefile: C code:CC=g++ CCFLAGS=-O2 -Wall -I. -ISDK: -ISDK:Local/newlib/include/SDL/ -ISDK:Local/common/include/SDL/ CFILES=game.cpp gamestate.cpp gui.cpp image.cpp main.cpp panel.cpp player.cpp resource.cpp screen.cpp sector.cpp sound.cpp utils.cpp HFILES=game.h gamestate.h gui.h image.h panel.h player.h resource.h screen.h sector.h sound.h utils.h OFILES=game.o gamestate.o gui.o image.o panel.o player.o resource.o screen.o sector.o sound.o utils.o main.o APP=gigalomania INC= LINKPATH=-LSDK:Local/newlib/lib LIBS=-lSDLmain -lSDL -lSDL_image -lSDL_mixer all: $(APP) $(APP): $(OFILES) $(HFILES) $(CFILES) $(CC) $(CCFLAGS) $(LINKPATH) $(LIBS) -o $(APP) $(OFILES) .cpp.o: $(CC) $(CCFLAGS) -O2 $(INC) -c $< clean: rm -rf *.o rm $(APP) Die .a-Files sind alle da, dennoch meckert gmake hier: C code:und noch viele mehr!game.o: In function 'createAlphaShadows(Image*, int, int)': game.cpp:(.text+0x1f38): undefined reference to 'SDL_LockSurface' Was fehlt denn noch bei den Linkerangaben? Danke schon mal! Ciao [ - Answer - Quote - Direct link - ] |
2010-12-12, 07:49 h ZeroG Posts: 1487 User |
@Reth: Versuch mal die reinfolge in der die Linklibs angeben sind zu verändern. [ - Answer - Quote - Direct link - ] |
2010-12-12, 09:10 h Reth Posts: 1858 User |
@ZeroG: Hatte ich schon probiert. Gleiches Resultat! [ - Answer - Quote - Direct link - ] |
2010-12-13, 10:50 h Thore Posts: 2266 User |
Wenn Du die Includes und die Libs richtig eingebunden hast, aber immer noch undefined References kommt, passen deine LinkLibs von der Version des Compilers nicht. Hol Dir mal die SDL Sourcen und bau die Libs mit deiner gcc Version neu. Probier dann deine selbstgebauten Libs aus. Gleiches Problem hatte ich auch woanders, recompile war die Lösung bei mir. (PS: Identischer Beitrag zu beiden Fragen von Dir) [ - Answer - Quote - Direct link - ] |
2010-12-28, 18:29 h Reth Posts: 1858 User |
Habe nun mal sämtliche SDL libs aus dem OS4Depot neu geholt und installiert, bekomme immer noch tonnenweise Fehlermeldungen, die ich nicht nachvollziehen kann! Z.B.: C++ code:obj/game.opp: In function 'std::__verify_grouping(char const*, unsigned int, std::string const&)': game.cpp:(.text+0x28c): undefined reference to 'std::string::size() const' game.cpp:(.text+0x2ec): undefined reference to 'std::string::operator[](unsigned int) const' game.cpp:(.text+0x364): undefined reference to 'std::string::operator[](unsigned int) const' game.cpp:(.text+0x3f0): undefined reference to 'std::string::operator[](unsigned int) const' Was will mir denn der Linker damit sagen? Dass er kein C++ kann? In game.h gibt es unter anderem: C++ code:#include <string> using std::string; Und game.h wird in game.cpp included, woraus game.o gemacht wird! Liegt das am makefile? Hier mal das komplette: C++ code:# # Makefile generated by: # CodeBench 0.13 # # Project: GigaLoMania # # Created on: 25-11-2010 22:54:29 # # CC = SDK:gcc/bin/gcc OBJ_DIR = obj OBJ = $(OBJ_DIR)/game.opp $(OBJ_DIR)/gamestate.opp $(OBJ_DIR)/gui.opp $(OBJ_DIR)/image.opp $(OBJ_DIR)/main.opp $(OBJ_DIR)/panel.opp $(OBJ_DIR)/player.opp $(OBJ_DIR)/resource.opp $(OBJ_DIR)/screen.opp $(OBJ_DIR)/SDL_main.o $(OBJ_DIR)/sector.opp $(OBJ_DIR)/utils.opp # -- Original $(OBJ_DIR)/sound.opp # -- Original $(OBJ_DIR)/utils.opp BIN = GigaLoMania INCPATH = -I. -Iheader -ISDK: -ISDK:Local/newlib/include/SDL/ -ISDK:Local/common/include/SDL/ CFLAGS = -Wall $(INCPATH) LDFLAGS = LIBS = -lSDL #-lSDL_image # add any extra linker libraries you want here .PHONY: all all-before all-after clean clean-custom all: all-before $(BIN) all-after all-before: # You can add rules here to execute before the project is built all-after: # You can add rules here to execute after the project is built clean: clean-custom rm $(OBJ) $(BIN) $(BIN): $(OBJ) $(CC) $(OBJ) $(LIBS) -o $(BIN) $(CFLAGS) $(LDFLAGS) $(OBJ_DIR)/game.opp: src/game.cpp $(CC) -c src/game.cpp -o $(OBJ_DIR)/game.opp $(CFLAGS) $(OBJ_DIR)/gamestate.opp: src/gamestate.cpp $(CC) -c src/gamestate.cpp -o $(OBJ_DIR)/gamestate.opp $(CFLAGS) $(OBJ_DIR)/gui.opp: src/gui.cpp $(CC) -c src/gui.cpp -o $(OBJ_DIR)/gui.opp $(CFLAGS) $(OBJ_DIR)/image.opp: src/image.cpp $(CC) -c src/image.cpp -o $(OBJ_DIR)/image.opp $(CFLAGS) $(OBJ_DIR)/main.opp: src/main.cpp $(CC) -c src/main.cpp -o $(OBJ_DIR)/main.opp $(CFLAGS) $(OBJ_DIR)/panel.opp: src/panel.cpp $(CC) -c src/panel.cpp -o $(OBJ_DIR)/panel.opp $(CFLAGS) $(OBJ_DIR)/player.opp: src/player.cpp $(CC) -c src/player.cpp -o $(OBJ_DIR)/player.opp $(CFLAGS) $(OBJ_DIR)/resource.opp: src/resource.cpp $(CC) -c src/resource.cpp -o $(OBJ_DIR)/resource.opp $(CFLAGS) $(OBJ_DIR)/screen.opp: src/screen.cpp $(CC) -c src/screen.cpp -o $(OBJ_DIR)/screen.opp $(CFLAGS) $(OBJ_DIR)/SDL_main.o: src/SDL_main.c $(CC) -c src/SDL_main.c -o $(OBJ_DIR)/SDL_main.o $(CFLAGS) $(OBJ_DIR)/sector.opp: src/sector.cpp $(CC) -c src/sector.cpp -o $(OBJ_DIR)/sector.opp $(CFLAGS) # -- Original $(OBJ_DIR)/sound.opp: src/sound.cpp # -- Original $(CC) -c src/sound.cpp -o $(OBJ_DIR)/sound.opp $(CFLAGS) $(OBJ_DIR)/utils.opp: src/utils.cpp $(CC) -c src/utils.cpp -o $(OBJ_DIR)/utils.opp $(CFLAGS) Bin echt am Verzweifeln, da ich keine Ahnung hab, was hier los ist! Von diesen Fehlermeldungen gibts noch tausende mehr. Wenn ich SDL_image im makefile wieder aktiviere kommen noch ganz andere hinzu, doch dazu ggf. in einem weiteren Post mehr! Kann jmd. von euch hier weiter helfen? Danke schon mal! Ciao [ - Answer - Quote - Direct link - ] |
2010-12-28, 18:57 h ZeroG Posts: 1487 User |
@Reth: Mal versucht gegen libstdc++ zu linken? [ - Answer - Quote - Direct link - ] |
2010-12-28, 19:06 h Reth Posts: 1858 User |
@ZeroG: Klappt leider nicht: Bekomme folgenden Fehler: C++ code:SDK:gcc/bin/gcc obj/game.opp obj/gamestate.opp obj/gui.opp obj/image.opp obj/main.opp obj/panel.opp obj/player.opp obj/resource.opp obj/screen.opp obj/SDL_main.o obj/sector.opp obj/utils.opp -lSDL -llibstdc++ -o GigaLoMania -Wall -I. -Iheader -ISDK: -ISDK:Local/newlib/include/SDL/ -ISDK:Local/common/include/SDL/ ld: cannot find -llibstdc++ Die lib ist aber vorhanden (als .so, innerhalb von newlib und in clib2)! Derzeit nutze ich gmake! [ Dieser Beitrag wurde von Reth am 28.12.2010 um 19:29 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2010-12-28, 20:48 h ZeroG Posts: 1487 User |
@Reth: Natürlich klappt das so nicht, ist dir noch nie aufgefallen das du z.B. die libSDL.a mit dem Kommando -lSDL einbindest und nicht mit -llibSDL... [ - Answer - Quote - Direct link - ] |
2010-12-28, 21:14 h Thore Posts: 2266 User |
Welche gcc Version hast du? [ - Answer - Quote - Direct link - ] |
2010-12-30, 14:17 h gni Posts: 1106 User |
Zitat: Und bei Dir funktioniert Deine angegebene -l<...> Option? Wenn ja müßte die Bibliothek bei Dir "liblibSDL.a" heissen (beachte das doppelte lib!). Wenn die Datei jedoch nur "libSDL.a" heißt, dann ist -lSDL vollkommen richtig! [ - Answer - Quote - Direct link - ] |
2010-12-30, 14:51 h Thore Posts: 2266 User |
Ihr lest am besten den ersten Beitrag. Im Makefile steht: LIBS=-lSDLmain -lSDL -lSDL_image -lSDL_mixer Sieht für mich korrekt aus. Da hätte der Linker schon gemeckert daß die Libs nicht da wären. Wenn die Libs da sind, und eingebunden, aber trotzdem die Referenzen nicht aufgelöst werden hat das andere Gründe: 1. Die Versionen der Libs ist zu alt oder anders und die Funktionen sind schlichtweg nicht enthalten 2. Die Libs sind für eine andere Maschine (z.B. 68k Libs statt PPC Libs) 3. Die Libs sind mit der eingesetzten gcc Version inkompatibel (z.B. 2.95.3 compilierte Lib auf gcc 4.4.4) ... [ - Answer - Quote - Direct link - ] |
2010-12-30, 17:17 h ZeroG Posts: 1487 User |
@gni: Ich glaube du solltest dir nochmal durchlesen was du da Zitiert hast. [ - Answer - Quote - Direct link - ] |
2010-12-30, 17:27 h ZeroG Posts: 1487 User |
@Thore:Zitat:Ist es ja auch. 1: Zu alt werden die nicht sein, aber es wird entweder nicht gegen libstdc++ gelinkt oder der Namespace passt nicht. 2: Da er das zeug aus dem OS4Depot hat ist die wahrscheinlichkeit dafür praktisch bei 0. 3. Sehr unwahrscheinlich - denk dran das es um OS4 geht, da wird der GCC aus dem SDK benutzt und gut. 2.95.3 ist so alt den gab es wahrscheinlich nie für OS4. [ - Answer - Quote - Direct link - ] |
2010-12-30, 17:28 h ZeroG Posts: 1487 User |
@Reth Ohne Rückmeldungen von dir wird das nix. [ - Answer - Quote - Direct link - ] |
2010-12-30, 18:53 h Reth Posts: 1858 User |
@ZeroG: Nur Geduld! Komme leider nicht immer dazu! Das Einbinden von -lSDLmain hat schon mal geholfen! Danke! Allerdings bekomme ich nun aus der Datei SDL_Main.c noch "undefined reference 'SDL_main'". Verstehe ich nicht, da die Lib hinzugelinkt wird und der Include auch angegeben ist! Woran kann denn das nun noch liegen? Der Compiler gibt schon mal ne Warnung aus, dass SDL_main implizit deklariert wäre! Die Include-Anweisungen müssten aber passen, ein anderes SDL-Bsp. compiliert damit, wird gelinkt und läuft auch! GCC-Version ist übrigens 4.2.4 für AOS4. Ciao [ Dieser Beitrag wurde von Reth am 31.12.2010 um 01:15 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2011-01-02, 20:53 h Reth Posts: 1858 User |
So habe nun mal den Aufruf von SDL_main(...) durch main(...) ersetzt. Das behebt die "undefined reference" auf SDL_main (diese wird eigentlich mittels #define main SDL_main innerhalb von SDL_main.h deklariert, hilft aber nichts, auch wenn das Headerfile mittels #include eingebunden ist)! main(...) ist innerhalb von main.cpp (ohne eigenes Headerfile definiert), der Aufruf von SDL_main(...) erfolgt in SDL_main.c des Projektes, das ich zu portieren versuche! Es geht voran! [ - Answer - Quote - Direct link - ] |
2011-01-03, 08:33 h gni Posts: 1106 User |
Zitat:Ups, Du hast recht - tut mir leid. Da war der Satzbau für mich zu kompliziert .-) [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > OS4 SDK mit SDL: Undefined references | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |