crosstool-ng undefined reference

OP #7615891
Lesenswert?
• ▲
▼

Hallo,

ich habe mit crosstool-ng eine Toolchain für Cortex-M0 gebaut. Das hat in der Vergangenheit auch schon funktioniert, nur dieses mal scheint der Linker nicht richtig zu funktionieren. Selbst beim Kompilieren einer leeren main Funktion (Aufruf "arm-cortexm0plus-eabi-gcc -v -Wall -o test test.c -Wl,--verbose") wird uA "undefined reference to `memset'" bemängelt.

Die libc scheint er aber zu laden: attempt to open /toolchains/arm-cortexm0plus-eabi/lib/gcc/arm-cortexm0plus-eabi/13.2.0/../../../../arm-cortexm0plus-eabi/lib/libc.a succeeded

nm zeigt auch diverse Symbole mit dem Namen "memcpy" in dieser Datei.

Hat jemand eine Idee warum der Linker die Funktion nicht findet?

#7615969
Lesenswert?
• ▲
▼

Memset ist Teil der LibC, und der Compiler kann die neuerdings auch via Optimizer aufrufen IIRC.

Der Startup Code enthält normalerweise eine Schleife die das BSS auf Null setzt, da könnte der Optimizer ein memset() generieren.

Schau Dir mal den Assembler Code an (--save-temps=obj -fverbose-asm).

Der Startup Code ist normalerweise spezifisch auf den µC zugeschnitten, da dort auch die Vektortabelle drin steht.

Ich erinnere mich dunkel das einige Linker hier die Libs explizit haben wollten (-lm -lc -lgcc). Die fehlen bei Dir oben.

Ist Dir eigentlich klar das die gepostete Kommandozeile sowohl den Compiler als auch den Linker aufruft? Ich frage das weil man das abändern muss sobald das Projekt mehr als ein C/ASM Source File hat.

Persönliche Seite #7616078
Lesenswert?
• ▲
▼

Stefan A. schrieb:

-o test

Übel wenn man "." im Pfad hat (was man nicht haben sollte).

"test" ist ein Shell Befehl, wenn aber stattdessen das erzeugte "test" genommen wird...

Zum Problem: Evtl gibt ein Map File mehr Aufschluss: -Wl,-Map,datei.map

Jim M. schrieb:

Ich erinnere mich dunkel das einige Linker hier die Libs explizit haben wollten (-lm -lc -lgcc). Die fehlen bei Dir oben.

Sollte eigentlich der Compiler(-Treiber) richtig machen. Wenn hier die libgcc ein Symbol aus libc referenziert hat man ein Problem; richtig wäre dann sowas wie

1
--start-group -lm -lc -lgcc --end-group

und evtl. mit Startup Code in der Gruppe.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.