Forum: Compiler & IDEs gcc Linker macht mich verrückt


von Johannes S. (Gast)


Angehängte Dateien:

Lesenswert?

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}

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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

von Johannes S. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.