mikrocontroller.net

Forum: Compiler & IDEs Ursache Linker Error "Cannot find lib.a"


Autor: H. K . (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

Ich benutze DAVE zum programmieren von CortexM4-Controllern von 
Infineon.
Seit gestern versuche ich die ARM-Mathematik-bib 
"libarm_cortexM4lf_math.a" einzubinden, ohne Erfolg.

Es ist mir gelungen, DAVE (basiert auf Eclipse) mitzuteilen, wo die 
.h-Dateien zu finden sind; nachdem ich 
"${ARM_GCC_HOME}\lib\CMSIS\Include" zu den Directories unter "ARM-GGC C 
Compiler" eingefügt habe, waren alle .h-Dateien der DSP-lib in der 
Baumansicht aufgelistet und der Hilfecontext funktionierte.

Unter "ARM-GCC Linker" habe ich o.g. "libarm_cortexM4lf_math.a" in dem 
"-l"-Feld eingefügt. In der "-L"-Sektion habe ich den Pfad zu der Datei 
über "${ARM_GCC_HOME}\lib\CMSIS\Lib\GCC" angegeben.

Es kam eine Fehlermeldung vom Linker, dass die lib nicht gefunden wurde. 
Versuchsweise habe ich den Pfad auch mal direkt angegeben, die 
Fehlermeldung kam erneut.
Im Makefile wird der Pfad korrekt eingetragen; wenn ich die Pfadangabe 
dort herauskopiere und in ein Explorerfenster eingebe, komme ich direkt 
in das Verzeichnis, wo die Datei liegt.

Hat jemand einen Rat, was falsch läuft?

Hat die Fehlermeldung evtl. eine andere Ursache?

H.K.

Autor: Peter II (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
H. K . schrieb:
> Hat jemand einen Rat, was falsch läuft?

libs werden oft ohne lib und .a hinzugefügt

-Larm_cortexM4lf_math

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-larm_cortexM4lf_math.a
wäre korrekt. Das lib fällt beim Linkeraufruf aus unerklärlichen Gründen 
einfach weg. Ist halt wohl historisch so gewachsen.

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter II schrieb:
> -Larm_cortexM4lf_math

Kleines L! Ob das a weg muss oder nicht weiß ich gerade nicht sicher

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-larchive
--library=archive
Add archive file archive to the list of files to link. This option may 
be used any number of times. ld will search its path-list for 
occurrences of libarchive.a for every archive specified.

Also ohne .a wohl auch

Autor: H. K . (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Herzlichen Dank!
Das Weglassen den führenden "l" und des ".a" ->"arm_cortexM4lf_math" 
führte dazu, dass die Lib gefunden wurde. Darauf wäre ich nie gekommen!

Gruß H. K.

Autor: Erwin D. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
H. K . schrieb:
> Das Weglassen den führenden "l" und des ".a"

Sicher? Hast du wirklich nur das "l" weggelassen oder das "lib" am 
Anfang?

Autor: H. K . (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Folgende Einstellung lässt den GCC durchlaufen. Allerdings hat die Lib 
wohl ein Problem mit der FPU, sobald der erste Befehl aus der ARM-Lib 
aufgerufen wird, landet der Controller in einer 
Exception-Behandlungsroutine, aber daran ist der Linker unschuldig.

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erwin D. schrieb:
> H. K . schrieb:
>> Das Weglassen den führenden "l" und des ".a"
>
> Sicher? Hast du wirklich nur das "l" weggelassen oder das "lib" am
> Anfang?

Er meint wahrscheinlich das l was ich geschrieben hatte. Das -l kommt 
aber von dem GUI-Kram.

H. K . schrieb:
> llerdings hat die Lib
> wohl ein Problem mit der FPU, sobald der erste Befehl aus der ARM-Lib
> aufgerufen wird, landet der Controller in einer
> Exception-Behandlungsroutine,

Hast du die entsprechenden Bits gesetzt, dass die FPU auch an ist?
Ansonsten noch darauf achten, dass deine Floats nicht unaligned im 
Memory liegen, sonst gehts auch nicht.

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Horst schrieb:
> Hast du die entsprechenden Bits gesetzt, dass die FPU auch an ist?

Nachtrag: 
https://www.mikrocontroller.net/articles/ARM_GCC#F...
und hier offiziell: 
http://infocenter.arm.com/help/index.jsp?topic=/co...

Autor: H. K . (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Das Weglassen den führenden "l" und des ".a" ->"arm_cortexM4lf_math"
Das muss heißen:
"Das Weglassen des führenden "lib" und des ".a" 
->"arm_cortexM4lf_math"..."

>Hast du die entsprechenden Bits gesetzt, dass die FPU auch an ist?

Das wird vom Startup-Script automatisch eingerichtet, sobald 
__FPU_PRESENT definiert ist.

Ich weiß nicht, woran es gelegen hat, das der MC ständig in der 
Exceptionroutine gelandet ist.
Ich habe dann herausgefunden, dass er das auch dann macht, wenn alle 
FPU-betreffenden Befehle auskommentiert sind.
Seit ich ein neues Projekt aufgesetzt habe und die FPU-Optionen auf 
"mfloat-abi=hard" gestellt sind, läuft das Programm auf dem Evalboard 
durch.
Die Ergebnisse der arm_sin_f32 sind korrekt.

Testweise habe eine arm_rfft_f32 über 1024 Werte laufen lassen.
Laut dem Cycle-Counter hat der MC dafür nur knapp 69k cycles gebraucht,
die arm_sin_f32 benötigt ca. 140.

Die Lib scheint also zu laufen...

Danke für die Hilfe,

H. K.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.