Hallo zusammen! Ich hab hier folgendes Problem: Ich versuche die avrlib im AVR Studio bzw mit avrgcc zu nutzen. Ich hab allerdings dass Problem, dass ich die avrlib nicht richtig zum laufen bekomme. Ich habe die komplette avrlib in den avrgcc include ordner gesteckt, allerdings bekomme ich jetzt folgende Fehler: c:/winavr-20080610/lib/gcc/../../avr/include/i2csw.h:37:20: error: global.h: No such file or directory c:/winavr-20080610/lib/gcc/../../avr/include/i2csw.h:40:23: error: i2cswconf.h: No such file or directory Bei einem anderen funktioniert das ganze allerdings wunderbar ohne fehler, er nutzt kein AVR Studio sondern macht es nur mit makefiles, da komm ich aber garnicht weit: make: *** No rule to make target `main.elf', needed by `elf'. Stop. Wie gesagt, bei ihm funktioniert alles, er hat die avrlib im gleichen Verzeichnis.. kann mir da jemand weiterhelfen? Ich glaub zwar nicht dass euch mein Sourcecode weiterhelfen würde, aber ich hab ihn mal angehängt (ich nutze nicht sein Makefile) Viele Grüße, Flip
Da fehlen im Studio die Pfade zu den include-Dateien.
Schau dir die Verzeichnisstruktur an. Vermutlich steckt globals.h in
einem Unterverzeichnis, das musst du explizit von Hand in den
Projektoptionen mit angeben.
>Ich habe die komplette avrlib in den avrgcc include ordner gesteckt,
Na ja, da du die Pfade sowieso von Hand eintragen musst, wäre das nicht
nötig gewesen.
Oliver
Einfach das ganze WinAvr Paket installieren und alle Pfade und Verzeichnisse schön brav so sein lassen, wie sie das Setup angelegt hat. Dann geht alles es prima....
>Einfach das ganze WinAvr Paket installieren ...
avrlib != avr-libc
Oliver
Hmmm die global.h und i2cswconf.h gehören zu meinem Projekt und sind im Projektordner direkt drinn, hab schon mehrere Wege probiert, zB die zwei Dateien zur AVRlib dazu zu tun, dann kommen aber auch Fehler.. :/
>c:/winavr-20080610/lib/gcc/../../avr/include/i2csw.h:37:20: error: >global.h: No such file or directory Schau dir die Zeile an, in der der Fehler auftritt. Dann weisst du, was los ist. Oliver
#include "global.h" // include project-dependent settings #include "i2cswconf.h" die avrlib bindet nur meine Projekteinstellungen ein, bzw sie versucht es
Füg mal dein Projektverzeichnis in den Projektoptionen als Include-Directory hinzu. Oliver
main.o: In function `main': E:\Projekte\AVRProjekte\Ätzanlage\default/../main.c:16: undefined reference to `i2cInit' io.o: In function `lm75_init': E:\Projekte\AVRProjekte\Ätzanlage\default/../io.c:36: undefined reference to `i2cSend' E:\Projekte\AVRProjekte\Ätzanlage\default/../io.c:40: undefined reference to `i2cSend' E:\Projekte\AVRProjekte\Ätzanlage\default/../io.c:44: undefined reference to `i2cSend' Dann kommt wieder das :(
Dass du auch die entsprechenden C-Dateien deinem Projekt hinzufügen musst (nicht nur die Header), ist dir aber schon klar, oder? (oder halt die Library, falls es sich um eine "echte" Library handelt)
Also er hat jetzt n andres Makefile gemacht, was bei mir auch funktioniert. Allerdings würde ich die AVRlib trotzdem gern im AVR Studio verwenden. Aber wie meinst du das mit den C-Dateien hinzufügen? Wenn du die normalen c dateien von dem Projekt meinst, klar die sind eingebunden.
Philipp H. wrote: > Aber wie meinst du das mit den C-Dateien hinzufügen? > Wenn du die normalen c dateien von dem Projekt meinst, klar die sind > eingebunden. Nein, die C-Dateien der Lib (oder halt die a-Datei, wenn es eine richtige Lib sein sollte). Mit den Headern machst du deinem Projekt ja nur bekannt, was über die Lib zur Verfügung steht. Aber der eigentliche Code der Lib muss ja auch noch zu deinem Projekt dazukommen.
>Füg mal dein Projektverzeichnis in den Projektoptionen als >Include-Directory hinzu. Hast du das gemacht? Oliver
Alle c und h Dateien sind im include Ordner des AVR GCCs. Ja Oliver, dabei kam das raus: main.o: In function `main': E:\Projekte\AVRProjekte\Ätzanlage\default/../main.c:16: undefined reference to `i2cInit' io.o: In function `lm75_init': E:\Projekte\AVRProjekte\Ätzanlage\default/../io.c:36: undefined reference to `i2cSend' E:\Projekte\AVRProjekte\Ätzanlage\default/../io.c:40: undefined reference to `i2cSend' E:\Projekte\AVRProjekte\Ätzanlage\default/../io.c:44: undefined reference to `i2cSend'
Na also, ein Schritt weiter. Jetzt findet er zumindest mal alle headerfiles. Was jetzt noch fehlt, sind die .c-files der Funktionen, die du aufrufst. Da wird dir nichts anderes übrigleiben, als diese von Hand deinem Projekt hinzuzufügen. Das geht nicht automatisch. Da sich die avrlib-files auch gegenseitig aufrufen, musst du halt solange die benötigten Dateien hinzufügen, bis keine Fehlermeldungen mehr kommen. Oliver
Hmm aber welche Dateien soll ich einfügen? Ich hab schonmal alle benötigten avrlib dateien ins projektverzeichnis getan, aber ohne Erfolg bzw dann kam die selbe Meldung. Er vermisst ja auch nicht wirklich irgentwelche Dateien, das sind die einzigsten Fehler die kommen.
>Er vermisst ja auch nicht wirklich >irgentwelche Dateien, das sind die einzigsten Fehler die kommen. Doch. Der Linker vermisst die Funktionen i2cInit, usw., die du in deinem Code aufrufst, für die dein Projekt aber keinen Quellcode enthält. Du musst die Dateien nicht ins Projektverzeichnis kopieren, sondern im Studio unter Source als Quellcodedateien eintragen. Nicht nur die, die du selber geschrieben hast, sondern auch alle die, die aus der avrlib benötigt werden. i2cInit ist lt. Doku in i2c.c enthalten. Also musst du auch i2c.c zu deinem Projekt hinzufügen. Vermutlich gibt es dann beim linken neue Fehlermeldungen, weil i2c.c wiederum andere Funktionen aus anderen Dateien benötigt. Die musst du dann halt suchen und auch hinzufügen, so lange, bis alles benötigte vorhanden ist. Oliver
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.