Hallo, ich nutze AVR Studio. Im normalfall hat man ja alle Dateien die zu einem Projekt gehören innerhalb des Projektordners. Nun will ich ein paar c und h Dateien bei anderen Projekten nutzen, diese aber nicht immer aktualisieren. Dh. ich würde die Dateien gerne zwei Ebenen höhrer verlegen. Wenn ich z.b. nur eine config.h habe, in der lediglich #define's stehen, klappt es mit ../../config.h Nun will ich aber auch c Dateien mit Funktionen zwei Ebenen höher mit dazu gehöriger .h Datei verlagern. Wenn ich nun in meiner main.c die h Datei include mit ../../funktion.h dann sagt er mir "undefined reference to `funktionname'" Es würde mich sehr freuen, wenn ihr mir sagt, wie das zu machen ist... Schöne Grüße
Das AVR-Studio hat in den Projekteinstellungen eine Seite 'Include Directories'. Da schreibst du alle Pfade rein und musst im Quelltext keine Kopfstände machen.
Ralf G. schrieb: > 'Include Directories' Die Fehlermeldung "undefined reference..." hat nun aber nichts mit Includes zu tun, sondern kommt vom Linker. Vermutlich hat er einfach vergesssen das c-File zum Projekt hinzuzufügen und es damit überhaupt nicht kompiliert.
Die fehlenden Referenzen kommen daher, dass der linke Typ, die vom H-File referierten Funktionen, nicht zur Zieldatei hinzufügen kann. Die H-Datei kannst Du mittels "langem" Pfad oder fummeln an der Umgebung bekanntmachen. Das ist aber nur die halbe Miete. Du musst sozusagen die, zur H-Datei gehörigen, C-Dateien kompilieren und das Ergebnis dem Linker vorsetzen.
guest schrieb: > Vermutlich hat er einfach vergesssen das c-File zum Projekt hinzuzufügen Oder es wird eine 'function.h' aus einem anderen Ordner eingebunden, wo die entsprechende Funktion fehlt. Edit: Hmm, da gibt's eigentlich nur Warnungen bzw. andere Fehlermeldungen...
:
Bearbeitet durch User
Ok, ich versuche es mal mit einem Beispiel zu umschreiben. Ich habe einen DS1632 Temperatur Sensor. Für diesen habe ich eine h und eine c datei angelegt. Die h Datei habe ich in der main.c mit #include "ds1632.h" Nun will ich diese beiden Dateien zwei Ebenen darüber ablegen. Nutze ich unter den Projektoptionen den Include Folder, erhalte ich die gleiche Fehlermeldung, wie wenn ich die h Datei durch einen relativen Pfad angebe. guest schrieb: > Vermutlich hat er einfach > vergesssen das c-File zum Projekt hinzuzufügen und es damit überhaupt > nicht kompiliert. Das habe ich nicht gemacht. Und zwar weil wenn ich dies tue, kopiert das Programm mir die Datei aus den "zwei Ebenen oben drüber" ins Projekt. Und damit ist der Sinn des ganzen ja wieder verloren... Gibt es hier eine andere Möglichkeit die Dateien dem Projekt hinzuzufügen. Versucht habe ich es über "rechtsklick aufs Projekt ==> ADD ==> Existing Item"
AVRe schrieb: > ich nutze AVR Studio. Sicher? AVRe schrieb: > Und zwar weil wenn ich dies tue, kopiert das > Programm mir die Datei aus den "zwei Ebenen oben drüber" ins Projekt. > Und damit ist der Sinn des ganzen ja wieder verloren... Das macht kein AVR-Studio
Ralf G. schrieb: > Das macht kein AVR-Studio Doch. ATMEL-Studio macht es nicht aber AVR-Studio schon.
Ich muss mich korrigieren. Ich nutze Atmel Studio. Hier werden die Dateien kopiert... Gibt es hierzu eine Lösung?
Ralf G. schrieb: > Marc V. schrieb: >> ATMEL-Studio macht es nicht aber AVR-Studio schon. > > Genau umgekehrt!? Ich gebe es auf und gehe erst mal schlafen. Zweimal richtig gedacht aber falsch geschrieben innerhalb 20 min.
AVRe schrieb: > Und wie ist jetzt die Lösung? Die Lösung wurde Dir doch schon mehrmals genannt: es reicht nicht aus, die Headerdatei einzubinden, sondern es müssen sowohl der betreffende C-Quellcode kompiliert als auch das Kompilat zu Deinem Projekt gelinkt werden. Wenn Du die .c-Datei nicht in Deinem Projekt kompilieren willst, kannst Du das (natürlich mit entsprechenden kompatiblen Compiler-Einstellungen!) auch in einem separaten Projekt machen. Es ist halbwegs egal, ob Du dann die .o-Datei linkst oder erst noch eine Bibliothek daraus baust.
Dann würde die Option "Include Folder" unter den Projekt Optionen keinen Sinn machen... Es muss doch eine Möglichkeit geben, dass das Programm wie gewohnt compiliert wird, nur dass die Dateien nicht im identischen Ordner liegen.
AVRe schrieb: > Es muss doch eine Möglichkeit geben, dass das Programm wie gewohnt > compiliert wird, nur dass die Dateien nicht im identischen Ordner > liegen. Und noch einmal: es genügt NICHT, die Datei zu kompilieren!
Ich bin nicht sicher ob ich die Problematik hier wirklich richtig verstanden habe. Ich nutze aber selbst sehr wohl .h und .c in einem "Common"-Verzeichnis. Das ganze mit ATMEL Studio 7. Header werden per Include-Directory in den Einstellunge aufgelöst. Bei den .c Files gibt es die Möglicheit Dateien als Link hinzuzufügen. Beim Hinzufügen von vorhandenen Dateien hat der Button "Hinzufügen" in der Dateiauswahl einen kleinen Pfeil hinter dem sich das "Als Link hinzufügen" verbirgt. Diese Lösung gefällt mir ganz gut.
AVRe schrieb: > Es muss doch eine Möglichkeit geben, dass das Programm wie gewohnt > compiliert wird, nur dass die Dateien nicht im identischen Ordner > liegen. ganz einfach, mach aus der "c"-Datei eine "h"-Datei, dann wird sie mit einfachem #include als Bestandteil der main.c compiliert.
grundschüler schrieb: > ganz einfach, mach aus der "c"-Datei eine "h"-Datei, dann wird sie mit > einfachem #include als Bestandteil der main.c compiliert. Das klingt nun mehr nach Pfusch ;-)
Cube_S schrieb: > Ich bin nicht sicher ob ich die Problematik hier wirklich richtig > verstanden habe. Ich nutze aber selbst sehr wohl .h und .c in einem > "Common"-Verzeichnis. Das ganze mit ATMEL Studio 7. > > Header werden per Include-Directory in den Einstellunge aufgelöst. > > Bei den .c Files gibt es die Möglicheit Dateien als Link hinzuzufügen. > Beim Hinzufügen von vorhandenen Dateien hat der Button "Hinzufügen" in > der Dateiauswahl einen kleinen Pfeil hinter dem sich das "Als Link > hinzufügen" verbirgt. Diese Lösung gefällt mir ganz gut. OK, dass is schonmal sehr gut. Soweit klappts danke! Nun habe ich aber einen c file, der einen h file einbindet, welcher im aktuellen Projekt liegt also im Projektordner. dafür müsste ich den Pfad genau angeben also "eins hoch" dann in den Projektordner #include "../Projektordner/Files/file.h" Wenn ich den Pfad angebe, klappts. Das Problem ist, ich müsste es immer wieder für jedes Projekt ändern. Gibt es hierfür einen Platzhalter, der so heißt wie der Projektordner? Sprich dass ich den pfad so ca angeben würde: #include "../$(Projektfolder)/Files/file.h"
>Nun habe ich aber einen c file, der einen h file einbindet, welcher im >aktuellen Projekt liegt also im Projektordner. Löse ich auch über die Include-Directories. Da gibt's zusätzlich ein ".."
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.