Objekt-Dateien erzeugen mit Dev-C++
-
hallo,
bin schon wieder am verzweifeln. Jetzt versuche ich, so Objekt-Dateien zu erzeugen (soll ja gut sein, wenn man Sachen wiederverwenden will, habe ich gelesen). Laut Buch (ein uraltes!) sollte eine .obj-Datei irgendwann angelegt werden. Das passiert bei mir aber nicht.
Aktuell schaut es folgendermaßen bei mir aus:
Datei i.h:
// Schnittstelle typedef struct { int iY; } X; int m(X *_oX);
Datei i.c:
// Schnittstellenimplementierung #include "i.h" int m(X *_oX) { return (*_oX).iY+1; }
Datei i.prj:
i main
Datei main.c:
// Hauptprogramm #include <stdio.h> #include "i.h" int main() { X oX; oX.iY=4; int iY=m(&oX); printf("%i",iY); return 0; }
Seltsamerweise kennt die Dev-C++-IDE gar nicht die .prj-Extension, wenn man die Datei speicher möchte. Und der Fehler, den ich bekomme, wenn ich main.c kompilieren möchte:
[Link error] undefined reference to m
Ich glaube schon, dass ich die einzelnen Schritte alle richtig befolgt habe. Kann sich jemand einen Reim daraus machen?
EDIT: statt prj hatte ich irrtümlicherweise prg geschrieben
-
deedee schrieb:
...sollte eine .obj-Datei irgendwann angelegt werden.
das ist der compiler-output. der wird natürlich nur erzeugt, wenn sich der code fehlerfrei übersetzen liess. wenn du sowas nicht siehst, obwohl der code i.o. ist: vielleicht erzeugt dein compiler den output im speicher oder im temp-directory?
-
Hi !
Dein Beispiel funktioniert. Das sind lediglich die Projekteinstellungen, die dir nen Strich durch die Rechnung machen.Ich benutze Dev-C++ eigentlich nicht aber ich hab mal geguckt:
Bei mir heissen die Projektdateien *.dev
Die Objektdateien *.oUm die Objektdateien brauchst du dich eigentlich gar nicht zu kümmern, das macht deine IDE für dich.
Deine undefined reference kommt vermutlich daher, das er die Objektdatei nicht finden kann. Vielleicht hast du die i.c ausserhalb des Projekts erstellt, bzw. nicht zum Projekt zugefügt ?
-
Das geht mit dieser IDE anscheinend anders als in diesem alten Buch beschrieben wurde. Habe jetzt im Dev-C++ ein Projekt angelegt, dem ich den Namen i.dev gegeben habe. Die i.dev schaut jetzt ganz anders aus als die zuerst hier reingepostete i.dev, nämlich mit viel mehr Einträgen. Dem Projekt habe ich alle anderen Dateien untergeordnet. Danach main.c kompiliert.
Jetzt habe ich folgende zusätzlich Dateien:
- i.o
- main.o
- i.exe
- Makefile.winAlle Dateien sind im gleichen Verzeichnis.
Allerdings habe ich kein main.exe. Ich dachte, das würde ich nach dem Kompilieren von main.c erhalten.? Muss ich das noch irgendwie händisch jetzt erzeugen?
-
Irgendwo muss die Option Kompilieren und ausführen sein, das erzeugt dir die exe
-
"kompilieren und ausführen" gibt es bei mir, hatte ich auch schon versucht, allerdings erzeugt mir das auch keine main.exe.
Ich vermute, ich muss irgendwie mit "make" arbeiten, da mir die IDE ein Makefile erzeugt hat. Aber wie geht das unter Windows? Und wie muss der Befehl ausschauen, damit aus meinem C (nicht C++) - Programm main.c eine exe-Datei wird??
Ich habe jetzt auch noch Code::Blocks installiert. Aber wie kann man dort Dateien einem Projekt unterordnen? Es gibt hier zwar ein "project" -> "add files", aber da tut sich bei mir absolut überhaupt nichts danach.
-
ha ... ich habs. Ich musste das Projekt einfach nur "main" benennen. Funktioniert
-
deedee schrieb:
ha ... ich habs. Ich musste das Projekt einfach nur "main" benennen. Funktioniert
Sehr gut !
Weitermachen !