undefined reference to...
-
Hallo zusammen,
Ich habe eines dieser Standardprobleme beim Kompilieren und brauche wirklich dringend Hilfe!!!
Mein Programm umfasst eine Header-Datei PLY.h, eine Datei PLY.cpp und eine main.cpp.
In der Header Datei wird das Objekt PLYObject definiert und in PLY.cpp wird es implementiert.
In der main-Datei habe ich eine Funktion die folgendermassen aussieht:PLYObject *obj;
void loadPLYObject(char *ply_file_name)
{
obj = new PLYObject(ply_file_name);
}Nun erhalte ich mit folgendem make-file,
-------------------------------------------------------------------------
CPP = g++
LDLIBS = -lglut -lGL -lGLU -lX11 -lm -L/usr/X11R6/lib.cpp:
$(CPP) $@.cpp $(LDLIBS) -o @
-------------------------------------------------------------------------
folgende Fehlermeldung:
-----------------------------------------------------------------------------------
klimawandel@IBMX41:~/Dokumente/Computer Graphics/Lab/ex04/4.2$ make main
#g++ -c main.cpp
# g++ -o main main.cpp -lglut -lGL -lGLU -lX11 -lm -L/usr/X11R6/lib
g++ main.cpp -lglut -lGL -lGLU -lX11 -lm -L/usr/X11R6/lib -o main
/tmp/ccIz1iVX.o: In functionloadPLYObject(char*)': main.cpp:(.text+0x21): undefined reference toPLYObject::PLYObject(char*)'
/tmp/ccIz1iVX.o: In functionunloadPLYObject()': main.cpp:(.text+0xd6): undefined reference toPLYObject::~PLYObject()'
collect2: ld gab 1 als Ende-Status zurück
make: *** [main] Fehler 1
-------------------------------------------------------------------------------------------Ich nehme mal an dass dies ein klassisches Linker-Problem sein wird?!
Oder wie genau muss ich beim Kompilieren dieser Klassen vorgehen?
Ich danke für jede Hilfe...
Gruss
-
Warum combilierst du deine anderen Dateien nicht mit?
Also PLY.cpp...
Wenns dann nciht geht musst du mal etwas code posten.
-
Ich habe die PLY.cpp auch kompiliert und gelinkt und anschliessend dasselbe mit der main.cpp gemacht und erhalte trotzdem diese Fehlermeldung.
Oder muss ich die PLY.h und PLY.cpp (wo ja eben das PLYObject definiert und implementiert wird) irgendwo angeben in der make-datei, damit main.cpp diese Klasse findet?!
Ich würde gerne Code posten, aber leider ist es unheimlich viel...
...schade kann man keine files uploaden...gruss
-
Dein Output sagt eindeutig dass ins Executable nur die main.o gelinkt wird. Dort müssen alle vorher compilierten Objekte gelinkt werden.
BTW:
Wenn Du Code postest sollst Du auch nicht "unheimlich viel" posten sondern ein Minimalbeispiel, welches den Fehler aufzeigt. Oder glaubst Du wir arbeiten uns in ein mittelgroßes Projekt ein um einen Anfänger- (sorry) Fehler zu beheben?
EDIT:
Dein Output sagt sogar dass Du erst main.cpp nach main.o compilierst, und dann main.cpp nach main. Es wäre sinnvoller, main.o (und die anderen) nach main zu compilieren (linken).
-
Was er damit sagen will:
g++ -c -o main.o main.cpp g++ -c -o PLY.o PLY.cpp g++ -o main main.o PLY.o -lglut -lGL -lGLU -lX11 -lm -L/usr/X11R6/libDas ganze kannst du natürlich auch geschickt in eine makefiel verpacken.
-
Na gut, ich versuche mal mein Problem-Code "zusammenzufassen"

aber das ding ist ja dass ich den code nicht selbst geschrieben habe und er lauffähig sein sollte. es liegt nur an mir dass ich nicht in der lage bin den code zu kompilieren bzw. zu linken.PLY.h
#ifndef PLY_H #define PLY_H class PLYObject { public: PLYObject(char *plyfile); ~PLYObject(); ... } #endifPLY.cpp
#include "PLY.h" PLYObject::PLYObject(char *plyfile){ ...bla bla bla... } PLYObject::~PLYObject() { ... }main.cpp
void loadPLYObject(char *ply_file_name) { obj = new PLYObject(ply_file_name); ... }Ich weiss dass dieser code-ausschnitt euch nicht viel weiter bringt, aber so in etwa ist das programm aufgebaut.
Da ich, wie ihr bereits erkannt habt
, ein Anfänger bin, wäre ich froh wenn Ihr Mir vielleicht konkret sagen könnten wie der compilier-befehl danach aussehen würde...Vielen danke aber schon mal für eure hilfe...
Gruss
-
WUNDERBAR !!!
Das Problem hat sich gelöst!
Danke viel mal für Eure Beiträge...!
Jetz verstehe ich das Konzept...Vielen Dank nochmals...
Freundliche Grüsse