Forum: Compiler & IDEs Problem mit dem AVR Studio und der avrlib


von Philipp H. (flips)


Angehängte Dateien:

Lesenswert?

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

von Oliver (Gast)


Lesenswert?

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

von Peter (Gast)


Lesenswert?

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....

von Oliver (Gast)


Lesenswert?

>Einfach das ganze WinAvr Paket installieren ...

avrlib != avr-libc

Oliver

von Philipp H. (flips)


Lesenswert?

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.. :/

von Oliver (Gast)


Lesenswert?

>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

von Philipp H. (flips)


Lesenswert?

#include "global.h"

// include project-dependent settings
#include "i2cswconf.h"

die avrlib bindet nur meine Projekteinstellungen ein, bzw sie versucht 
es

von Oliver (Gast)


Lesenswert?

Füg mal dein Projektverzeichnis in den Projektoptionen als 
Include-Directory hinzu.

Oliver

von Philipp H. (flips)


Lesenswert?

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 :(

von Stefan E. (sternst)


Lesenswert?

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)

von Philipp H. (flips)


Lesenswert?

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.

von Stefan E. (sternst)


Lesenswert?

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.

von Oliver (Gast)


Lesenswert?

>Füg mal dein Projektverzeichnis in den Projektoptionen als
>Include-Directory hinzu.

Hast du das gemacht?

Oliver

von Philipp H. (flips)


Lesenswert?

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'

von Oliver (Gast)


Lesenswert?

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

von Philipp H. (flips)


Lesenswert?

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.

von Oliver (Gast)


Lesenswert?

>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
Noch kein Account? Hier anmelden.