Hallo,
ich hab mich jetzt mal ein bisschen mit Make und dem dynamischen Linken beschäftigt und möchte mein kleines C++ Projekt gerne dementsprechend umbauen. Da ich ja jetzt die Dateien einzeln in .o Dateien kompiliere, muss ich ja in jede Datei die benötigten (teilw. selbstgeschriebenen) Funktionen mit #include einbauen. Das Problem bei der Sache ist jetzt aber, dass der g++ jetzt wegen mehrfacher Definitionen meckert. Ich hab mir gedacht, ich könnte das vielleicht lösen, indem ich entsprechende .h Dateien schreibe (die nur die Deklarationen enthalten), statt die .cpp - Datei zu includen, was aber auch nicht alle Probleme löst.
Hier erst mal das Makefile:
Und dann z.B. folgendes in der functions.h:
Und in der Hauptdatei, die ja das Herzstück ist, nehme ich dann die .cpp - Dateien:
Andere Dateien benutzen dann nur noch die .h ´s:
Und wenn ich das ganze dann "make", kommen dann haufenweise Fehlermeldungen wie:
Kann mir vielleicht jemand helfen? Eine Seite, die das Linken ausführlich erklärt, wäre event. auch hilfreich
Gruß
jojomp
ich hab mich jetzt mal ein bisschen mit Make und dem dynamischen Linken beschäftigt und möchte mein kleines C++ Projekt gerne dementsprechend umbauen. Da ich ja jetzt die Dateien einzeln in .o Dateien kompiliere, muss ich ja in jede Datei die benötigten (teilw. selbstgeschriebenen) Funktionen mit #include einbauen. Das Problem bei der Sache ist jetzt aber, dass der g++ jetzt wegen mehrfacher Definitionen meckert. Ich hab mir gedacht, ich könnte das vielleicht lösen, indem ich entsprechende .h Dateien schreibe (die nur die Deklarationen enthalten), statt die .cpp - Datei zu includen, was aber auch nicht alle Probleme löst.
Hier erst mal das Makefile:
Code:
CC = /usr/bin/g++
CFLAGS = `sdl-config --cflags` -O2
LDFLAGS = -lSDL -lSDL_ttf -lSDL_mixer
OBJ = functions.o Sprite.o Mesg.o credits.o menu.o main.o
bshooter: $(OBJ)
$(CC) $(CFLAGS) -o bshooter $(OBJ) $(LDFLAGS)
%.o: include/%.cpp
$(CC) $(CFLAGS) -c $<
clean: $(OBJ)
rm $+
Und dann z.B. folgendes in der functions.h:
Code:
// functions.h
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
#include <SDL/SDL.h>
#include <SDL_ttf.h>
#include <SDL_mixer.h>
// irgendwelche Deklarationen
#endif
Und in der Hauptdatei, die ja das Herzstück ist, nehme ich dann die .cpp - Dateien:
Code:
// main.cpp
#include "functions.cpp"
Andere Dateien benutzen dann nur noch die .h ´s:
Code:
// menu.cpp
#include <SDL/SDL.h>
#include <SDL_ttf.h>
#include "functions.h"
Und wenn ich das ganze dann "make", kommen dann haufenweise Fehlermeldungen wie:
Code:
main.o: In function `Mesg::setPos(int, int)':
main.cpp:(.text+0x0): multiple definition of `Mesg::setPos(int, int)'
Mesg.o:Mesg.cpp:(.text+0x0): first defined here
Kann mir vielleicht jemand helfen? Eine Seite, die das Linken ausführlich erklärt, wäre event. auch hilfreich

Gruß
jojomp
Zuletzt bearbeitet: