Grüß euch
Ich hab eine Frage bezüglich weak Symbolen in der libc_nano (und
libstdc++_nano). Und zwar arbeite ich gerade an einem Cortex-M4 Projekt
dass ich aus Gründen der Compile-Zeit nun lieber mit Clang10 als mit
GCC10 bauen würde. Das ist mit Ausnahme des Linkens eigentlich auch
keine Hexerei und funktionierte auch recht flott.
Einige Kleinigkeiten verwirren mich jedoch. Aus irgendeinem Grund
scheint Clang10 beim Linken nicht zu erkennen welche Symbole weak sind
und welche nicht. Es ist somit nicht möglich Dinge wie __assert_func mit
sinnvollen Implementierungen zu überschreiben. Welchen Linker man nutzt
(einstellbar via -fuse-ld) spielt dabei auch keine Rolle.
Irgendwer eine Idee woran das liegen könnte?
Hier die Linker-Flags
GCC10
1 | -nostartfiles
|
2 | --specs=nano.specs
|
3 | -Wl,--gc-sections,-Map=${PROJECT_NAME}.map
|
4 | -T${CMAKE_CURRENT_SOURCE_DIR}/ldscript/mem.ld
|
5 | -T${CMAKE_CURRENT_SOURCE_DIR}/ldscript/sections.ld)
|
Clang10
1 | -nostartfiles
|
2 | -nostdlib
|
3 | -nostdlib++
|
4 | -Wl,--gc-sections,-Map=${PROJECT_NAME}.map
|
5 | /usr/arm-none-eabi/lib/crt0.o
|
6 | /usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/crti.o
|
7 | /usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/crtbegin.o
|
8 | /usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/crtn.o
|
9 | /usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/crtend.o
|
10 | -L/usr/arm-none-eabi/lib/thumb/v7e-m+fp/hard/
|
11 | -L/usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/
|
12 | -Wl,--start-group
|
13 | -lstdc++_nano
|
14 | -lm
|
15 | -lgcc
|
16 | -lc_nano
|
17 | -Wl,--end-group
|
18 | -T${CMAKE_CURRENT_SOURCE_DIR}/ldscript/mem.ld
|
19 | -T${CMAKE_CURRENT_SOURCE_DIR}/ldscript/sections.ld)
|
PS: Kann man sich irgendwie anzeigen lassen zu welchen Flags die GCC
"spec" files auf der Kommandozeile tatsächlich runterbrechen?
/edit
Typo fixed