amiga-news 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:
game.o: In function 'createAlphaShadows(Image*, int, int)':
game.cpp:(.text+0x1f38): undefined reference to 'SDL_LockSurface'

und noch viele mehr!

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... :O

[ - 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:
ZeroG:
@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... :O


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:
Sieht für mich korrekt aus.
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:
ZeroG:
@gni:
?( Ich glaube du solltest dir nochmal durchlesen was du da Zitiert hast.

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.
.