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.