Forum: Mikrocontroller und Digitale Elektronik STM32F3 Fehlermeldungen beim Buildvorgang


von STM32F3_Beginner (Gast)


Lesenswert?

Hallo zusammen,

ich mache gerade meine ersten SChritte mit dem STM32F3Discovery Board. 
Ich versuche ein Template zu erstellen. Das klappte ja soweit auch ganz 
gut, bis ich zu einem Punkt gekommen bin, an dem ich einfach nicht 
weiter weiß.
Ich benutzte Eclipse und ARM GCC.

Es erscheinen als erstes folgende Fehlermeldungen:

Building target: Template_Project.elf
Invoking: Cross GCC Linker
arm-none-eabi-gcc "-Wl,-Map=Template_Project.map" -o 
"Template_Project.elf"  ./src/main.o ./src/stm32f30x_it.o 
./src/system_stm32f30x.o  ./STM32F3_Discovery/stm32f3_discovery.o 
./STM32F30_StdPeriph_Library/stm32f30x_adc.o 
./STM32F30_StdPeriph_Library/stm32f30x_can.o 
./STM32F30_StdPeriph_Library/stm32f30x_comp.o 
./STM32F30_StdPeriph_Library/stm32f30x_crc.o 
./STM32F30_StdPeriph_Library/stm32f30x_dac.o 
./STM32F30_StdPeriph_Library/stm32f30x_dbgmcu.o 
./STM32F30_StdPeriph_Library/stm32f30x_dma.o 
./STM32F30_StdPeriph_Library/stm32f30x_exti.o 
./STM32F30_StdPeriph_Library/stm32f30x_flash.o 
./STM32F30_StdPeriph_Library/stm32f30x_gpio.o 
./STM32F30_StdPeriph_Library/stm32f30x_i2c.o 
./STM32F30_StdPeriph_Library/stm32f30x_iwdg.o 
./STM32F30_StdPeriph_Library/stm32f30x_misc.o 
./STM32F30_StdPeriph_Library/stm32f30x_opamp.o 
./STM32F30_StdPeriph_Library/stm32f30x_pwr.o 
./STM32F30_StdPeriph_Library/stm32f30x_rcc.o 
./STM32F30_StdPeriph_Library/stm32f30x_rtc.o 
./STM32F30_StdPeriph_Library/stm32f30x_spi.o 
./STM32F30_StdPeriph_Library/stm32f30x_syscfg.o 
./STM32F30_StdPeriph_Library/stm32f30x_tim.o 
./STM32F30_StdPeriph_Library/stm32f30x_usart.o 
./STM32F30_StdPeriph_Library/stm32f30x_wwdg.o
./src/main.o: In function `main':
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:25 
2:  undefined reference to `sqrt'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:25 
5:  undefined reference to `sqrt'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:25 
7:  undefined reference to `sqrt'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:26 
2:  undefined reference to `acos'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:26 
6:  undefined reference to `acos'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:27 
3:  undefined reference to `acos'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:27 
7:  undefined reference to `acos'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:28 
5:  undefined reference to `acos'
./src/main.o:/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../ 
src/main.c:289:  more undefined references to `acos' follow
./src/main.o: In function `main':
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:31 
7:  undefined reference to `atan2f'


Es scheine ja alles mathematische Funktionen zu sein. Math.h ist 
eingebunden. Nach meinen bisherigen Nachforschungen scheint dies ein 
Problem mit Compiler-Flags zu sein, soweit ich das verstanden habe. 
Allerdings habe ich keine Ahnung welche genau und wo ich die unter 
Eclipse eintragen muss. Ich arbeite ohne extra Makefile, das heißt alles 
notwendigen Einstellungen und Pfade sind in Eclipse (CDT) vorgenommen 
wurden.

von holger (Gast)


Lesenswert?

>Nach meinen bisherigen Nachforschungen scheint dies ein
>Problem mit Compiler-Flags zu sein

Nee, das ist ein Problem mit den Linker Flags.
Du musst libm.a einbinden. Das machst du mit -lm.
Oder evtl. nur m bei den Libraries die der Linker
mit einbinden soll.

von Kindergärtner (Gast)


Lesenswert?

Es ist dringend zu empfehlen, beim Compilen und Linken 
"-mfpu=fpv4-sp-d16 -mfloat-abi=hard" anzugeben, um die auf deinem 
Controller vorhandene FPU zu nutzen, da du ja scheinbar 
floatingpoint-Rechnungen machst. Siehe STM32: GCC

von Kindergärtner (Gast)


Lesenswert?

... und außerdem "-mcpu=cortex-m4 -mthumb"

von STM32F3_Beginner (Gast)


Lesenswert?

Hallo,

erst eimal vielen Dank für die Hilfe!

Ich habe das mal probiert, aber so richtig weiter gekommen bin ich jetzt 
immer noch nicht. Die Meldungen sehen immer noch ziem lich ähnlich aus:

------------------------------------------------------------------------ 
-
20:22:33 **** Incremental Build of configuration Debug for project 
Template_Project ****
make all
Building target: Template_Project.elf
Invoking: Cross GCC Linker
arm-none-eabi-gcc "-Wl,-Map=Template_Project.map" -mcpu=cortex-m4 
-mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -ffunction-sections 
-fdata-sections -g -Wl,--gc-sections -static  -lm -lc -o 
"Template_Project.elf"  ./src/main.o ./src/stm32f30x_it.o 
./src/system_stm32f30x.o  ./STM32F3_Discovery/stm32f3_discovery.o 
./STM32F30_StdPeriph_Library/stm32f30x_adc.o 
./STM32F30_StdPeriph_Library/stm32f30x_can.o 
./STM32F30_StdPeriph_Library/stm32f30x_comp.o 
./STM32F30_StdPeriph_Library/stm32f30x_crc.o 
./STM32F30_StdPeriph_Library/stm32f30x_dac.o 
./STM32F30_StdPeriph_Library/stm32f30x_dbgmcu.o 
./STM32F30_StdPeriph_Library/stm32f30x_dma.o 
./STM32F30_StdPeriph_Library/stm32f30x_exti.o 
./STM32F30_StdPeriph_Library/stm32f30x_flash.o 
./STM32F30_StdPeriph_Library/stm32f30x_gpio.o 
./STM32F30_StdPeriph_Library/stm32f30x_i2c.o 
./STM32F30_StdPeriph_Library/stm32f30x_iwdg.o 
./STM32F30_StdPeriph_Library/stm32f30x_misc.o 
./STM32F30_StdPeriph_Library/stm32f30x_opamp.o 
./STM32F30_StdPeriph_Library/stm32f30x_pwr.o 
./STM32F30_StdPeriph_Library/stm32f30x_rcc.o 
./STM32F30_StdPeriph_Library/stm32f30x_rtc.o 
./STM32F30_StdPeriph_Library/stm32f30x_spi.o 
./STM32F30_StdPeriph_Library/stm32f30x_syscfg.o 
./STM32F30_StdPeriph_Library/stm32f30x_tim.o 
./STM32F30_StdPeriph_Library/stm32f30x_usart.o 
./STM32F30_StdPeriph_Library/stm32f30x_wwdg.o
./src/main.o: In function `main':
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:25 
2:  undefined reference to `sqrt'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:25 
5:  undefined reference to `sqrt'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:25 
7:  undefined reference to `sqrt'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:26 
2:  undefined reference to `acos'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:26 
6:  undefined reference to `acos'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:27 
3:  undefined reference to `acos'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:27 
7:  undefined reference to `acos'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:28 
5:  undefined reference to `acos'
./src/main.o:/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../ 
src/main.c:289:  more undefined references to `acos' follow
./src/main.o: In function `main':
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:31 
7:  undefined reference to `atan2f'
./src/main.o: In function `Demo_USB':
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:44 
1:  undefined reference to `Set_System'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:44 
2:  undefined reference to `Set_USBClock'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:44 
3:  undefined reference to `USB_Interrupts_Config'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:44 
5:  undefined reference to `USB_Init'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:44 
7:  undefined reference to `bDeviceState'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:44 
7:  undefined reference to `bDeviceState'
./src/main.o: In function `Demo_GyroConfig':
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:46 
9:  undefined reference to `L3GD20_Init'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:47 
3:  undefined reference to `L3GD20_FilterConfig'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:47 
5:  undefined reference to `L3GD20_FilterCmd'
./src/main.o: In function `Demo_GyroReadAngRate':
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:49 
1:  undefined reference to `L3GD20_Read'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:49 
3:  undefined reference to `L3GD20_Read'
./src/main.o: In function `Demo_CompassConfig':
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:54 
9:  undefined reference to `LSM303DLHC_MagInit'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:56 
0:  undefined reference to `LSM303DLHC_AccInit'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:56 
9:  undefined reference to `LSM303DLHC_AccFilterConfig'
./src/main.o: In function `Demo_CompassReadAcc':
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:58 
6:  undefined reference to `LSM303DLHC_Read'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:58 
7:  undefined reference to `LSM303DLHC_Read'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:60 
8:  undefined reference to `LSM303DLHC_Read'
./src/main.o: In function `Demo_CompassReadMag':
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:65 
6:  undefined reference to `LSM303DLHC_Read'
/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../src/main.c:65 
8:  undefined reference to `LSM303DLHC_Read'
./src/main.o:/home/dirk/stm_projects/STM32F3_Template/Template/Debug/../ 
src/main.c:659:  more undefined references to `LSM303DLHC_Read' follow
collect2: error: ld returned 1 exit status
make: *** [Template_Project.elf] Fehler 1

20:22:33 Build Finished (took 496ms)
------------------------------------------------------------------------ 
-

Was mache ich denn falsch???

von holger (Gast)


Lesenswert?

>Was mache ich denn falsch???

Du fügst nur Headerdateien in deine main.c ein.
Du musst aber auch entsprechende *.c Dateien zu deinem
Projekt hinzufügen in denen diese Funktionen enthalten sind.

Alle deine Fehlermeldungen kommen vom Linker und nicht vom Compiler.

Beispiel:

undefined reference to `LSM303DLHC_Read'

Dein Compiler hat keine C Datei compiliert in der
diese Funktion enthalten ist. Es wurde also auch keine
Objektdatei erzeugt in der der Linker diese finden kann.

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.