Ich habe ein mbed Projekt, das lässt sich mit 'mbed compile' übersetzen
und linken. Das gleiche Projekt habe ich nach MCUXpresso (Nachfolger von
LPCXpresso, Eclipse IDE) exportiert und benutze da die gleiche
Toolchain, nur in mbed ist gcc Version 6 drin und in MCUX noch Version
5.4.1.
In MCUX bekomme ich nun Linkerfehler, einige Wrapperfunktionen werden
nicht gefunden. Diese sind aber im Objektfile mbed_retarget.o vorhanden.
Das Problem konnte ich jetzt einkreisen und auch beheben, verstehe aber
noch nicht ganz warum. In der angehängten Textdatei habe ich die
Linkerflags und inputs reingeschrieben, mit CR getrennt damit es besser
lesbar ist. Die Flags sind gleich, bis auf die Reihenfolge und das ist
das Problem. Im mbed build system kommen die Flags an das Ende und damit
geht es, wenn ich das in MCUX auch mache ist es ebenfalls ok, default
ist aber das die Flags vor die Inputfiles gesetzt werden. Ist es normal
das der gcc Linker hier so zickig ist?
In der IDE kann ich das 'Command line pattern' für den Linker setzen, so
ist es ok:
${COMMAND} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} ${FLAGS}
und so der default der in diesem Fall nicht funktioniert:
${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}
-Wl,--start-group -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys -Wl,--end-group vor allen Objects anzugeben ist ziemlich sinnbefreit, das löst nur Symbole innerhalb der Libs auf. Stattdessen sollte dies nach allen o-Files stehen, was nicht der Fall ist (zumindest nicht als group).
Danke, nach der oben beschriebenen Änderung der Aufrufzeile sieht das dann so aus und linkt auch ohne Fehler:
1 | arm-none-eabi-c++ |
2 | -o "mbed-classic-program.axf" |
3 | ./src/main.o |
4 | ...viele Objektfiles |
5 | -lmbed -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys |
6 | -L"C:/Users/sn.DCIMS/Documents/MCUXpressoIDE_10.0.2_411/workspace/mbed-classic-program/mbed/fd96258d940d/TARGET_LPC11U37H_401/TOOLCHAIN_GCC_ARM" |
7 | -DMBED_DEBUG -DMBED_TRAP_ERRORS_ENABLED=1 -DMBED_RTOS_SINGLE_THREAD |
8 | --specs=nano.specs -Wl,-n |
9 | -Wl,--start-group -lmbed -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys -Wl,--end-group |
10 | -Xlinker -Map="mbed-classic-program.map" |
11 | -Xlinker -print-memory-usage |
12 | -Xlinker --gc-sections |
13 | -Xlinker --wrap=main |
14 | -Xlinker --wrap=_malloc_r |
15 | -Xlinker --wrap=_free_r |
16 | -Xlinker --wrap=_realloc_r |
17 | -Xlinker --wrap=_memalign_r |
18 | -Xlinker --wrap=_calloc_r |
19 | -Xlinker --wrap=exit |
20 | -Xlinker --wrap=atexit |
21 | -mcpu=cortex-m0 -mthumb |
22 | -T LPC11U37.ld |
Diese Reihenfolge ist dann ok oder hat das wieder andere Seiteneffekte?
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.
