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