Atmelstudio6 lib einbinden

Moderator Persönliche Seite #3122569
Lesenswert?

Ich auch nicht, da ich kein Windows benutze.  Allerdings wäre zu
vermuten, dass du irgendwo in den Projekteinstellungen Details zur
Parametrierung des Linkers bzw. des Link-Vorgangs findest.  An
dieser Stelle solltest du diese Optionen unterbringen.

Vorsicht aber mit „-L.“: das Verzeichnis „.“ ist das Verzeichnis,
aus dem heraus Atmel Studio dein Projekt compiliert.  Bist du dir
völlig sicher, welches Verzeichnis das ist?  Ich würde lieber mit
einem expliziten Pfad ins Rennen gehen.
Gast #3123479
Lesenswert?

Danke für Eure Hilfe.
Habe es so versucht

Stefan Ernst schrieb:
> Project -> Properties -> Toolchain ->  AVR/GNU Linker -> Libraries
>
> Oben "can" eintragen und unten "."
Leider kommt der Fehler "cannot find -lcan"
Habe ein Bild gemacht um es zu verdeutlichen.
Wäre Super wenn mir jemand sagen kann was ich falsch mache!

LG
Uschi
Angehängte Dateien:
Moderator Persönliche Seite #3123572
Lesenswert?

Uschi schrieb:
> Leider kommt der Fehler "cannot find -lcan"

Siehe:

Beitrag "Re: Atmelstudio6 lib einbinden"

2. Absatz

Dein Atmel Studio wechselt zum Ausführen des Makefiles sehr
wahrscheinlich nicht in das Verzeichnis, in dem sich deine
libcan.a befindet, sondern in irgendein anderes.  Fang' doch
erstmal mit einem absoluten Pfad hinter -L and.  Alternativ zu
-L und -l kannst du genausogut gleich <pfad dahin>/libcan.a
schreiben.  Es ist für den Linker kein Unterschied, ob er eine
Bibliothek durch explizite Nennung der .a-Datei auf der Kommando-
zeile oder durch die Option -l einbindet.

Schreib Vorwärtsschrägstriche, also c:/pfad/zur/lib/libcan.a,
keine Backslashes.  Je nach verwendeter Shell beim Ausführen von
«make» könnten Backslashes ggf. als Sonderzeichen gewertet werden
und müssten doppelt notiert werden (c:\\pfad\\zur\\lib\\libcan.a).
Moderator Persönliche Seite #3123996
Lesenswert?

Uschi schrieb:
> So jetzt habe ich eine neue Fehlermeldung

Versuch mal herauszufinden, wo die genaue Kommandozeile steht, mit
der der Compiler und Linker aufgerufen werden, und poste diese hier.

Ich fürchte, dass die lib nicht weit genug hinten dort steht und
daher gar nicht in Betracht gezogen wird.

> Siehe Bild!

Kann man denn den Text nicht per copy & paste übernehmen?  Es ist
etwas lästig, für zwei "undefined reference"-Meldungen sich einen
überdimensionalen Screenshot ansehen zu müssen, in dem man dann
erstmal den eigentlichen Fehler suchen darf.
#3124034
Lesenswert?

Im letzten Bild, obiges Fenster (Libraries) kommt der Name der Lib rein 
(z.B. libcan.a).
Im unteren Fenster nur der Pfad. Ich habe dort stehen: ..\.\
Die Lib, also das File *.a muß in diesem Fall im Projektverzeichnis 
stehen, also dort, wo *.c, *.h usw. sind.
Noch ein Hinweis: Die Lib hast du bestimmt an den Prozessor angepaßt, 
die Pins festgelegt usw. und dann compiliert, eh du sie im Studio 
verwenden willst?

Ich mach das seit Jahren so, erst im AVR-Studio und jetzt im 
ATMEL-Studio und es klappt auf jeden Fall.
Viel Erfolg!
Gast #3124932
Lesenswert?

Guten Abend,

Bernd S. schrieb:
> Im letzten Bild, obiges Fenster (Libraries) kommt der Name der Lib rein
> (z.B. libcan.a).
> Im unteren Fenster nur der Pfad. Ich habe dort stehen: ..\.\
> Die Lib, also das File *.a muß in diesem Fall im Projektverzeichnis
> stehen, also dort, wo *.c, *.h usw. sind.

Das habe ich jetzt versucht aber ohne Erfolg.

Bernd S. schrieb:
> Die Lib hast du bestimmt an den Prozessor angepaßt,
> die Pins festgelegt usw. und dann compiliert, eh du sie im Studio
> verwenden willst?

Das habe ich auch gemacht ich Verwende den AT90Can128.
Ich habe jetzt mal mein Programmverzeichnis gezipt und angehängt.
 Vielen Dank für Eure Hilfe
Uschi

PS Danke für Eure Geduld!
Angehängte Dateien:
#3125134
Lesenswert?

Der Linker findet die can_init usw. nicht. Da ist nur die Definition 
vorhanden (im can.h), aber die eigentliche Implementation findet er 
nirgends. Also auch nicht in der libcan.a, darum hab ich mal eine 
"libcan_128.a" von mir eingebunden. Schon findet er alles und compiliert 
komplett. Meine "libcan_128.a" muß aber jetzt nicht unbedingt mit deinen 
Anforderungen übereinstimmen. Das war nur ein Test, ob er dann 
compiliert.
Das heißt, du mußt dir deine eigene libcan.a nochmal erstellen und im 
Studio einbinden.
Ich habe natürlich im Studio auch meinen Namen "libcan_128.a" 
eingetragen, damit er die lib findet. Schau es dir mal an und versuche 
das Projekt zu compilieren.
Also ist deine libcan.a nicht in Ordnung. Versuche die nochmal zu 
erstellen.
Ich hänge das komplette Projekt hier an. Viel Erfolg!
Angehängte Dateien:
#3126552
Lesenswert?

Uschi schrieb:
> Vielen Dank mit Deiner Lib geht es auch bei mir!
> Vielen Vielen Dank!
Das freut mich!

>
> Was muß man beim erstellen der Lib beachten?
>
Ich versuchs mal. Hab gerade keinen 128er da, deshalb das ganze nur 
theoretisch.

Im Verzeichnis "src" ist das makefile.
Dort den Prozessor einstellen:
1
# MCU name
2
MCU = at90can128
Ein Stück weiter unten die Prozessorfrequenz (in kHz) einstellen:
1
F_CPU = 14745600

Im gleichen Verzeichnis ist die config.h
Dort den Prozessor auswählen:
1
#define  SUPPORT_MCP2515      0
2
#define  SUPPORT_AT90CAN      1
3
#define  SUPPORT_SJA1000      0

Dann mit "make lib" die Library erstellen. Dabei darf keine 
Fehlermeldung kommen. Wenn das passiert ist, die gerade erstellte 
libcan.a, die config.h und die can.h in dein Verzeichnis "main" kopieren 
und dann sollte alles funktionieren.

Du kannst gern versuchen, ob deine Anwendung mit meiner libcan_128.a 
läuft. Aber ich weiß nicht, mit welcher Frequenz ich den Prozessor 
eingestellt habe. Kann 14745600 kHz sein oder auch 16000000 kHz.
Wenns funktioniert, ist es gut, wenn nicht, mußt du es schaffen, sie 
selbst zu erstellen :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren