Установил GCC-4.1 toolchain для Cygwin, изучаю новую для себя среду разработки.
Этап "Hello world!" прошел успешно. Решил собрать тест с плавающей точкой, в котором присутствует вот такая функция:
Код
float foo(float a)
{
a += 40.0;
return (a * 2.1);
}
{
a += 40.0;
return (a * 2.1);
}
Я прочел, что функции для работы с плавающей точкой имеются в библиотеке libgcc.a. Но, первым делом я запутался в какой директории ее искать? Из какого бы места я не пробовал бы ее подлинковать, получаю такое сообщение линковщика:
Код
"C:/Program files/GNUARM"/bin/arm-elf-ld -L"C:/Program files/GNUARM"/lib/gcc/arm-elf/4.1.0/interwork -lgcc -Map D:/Projects/test1/Debug/list/test1.map -TD:/Projects/test1/src/linker.ld D:/Projects/test1/Debug/obj/main.o D:/Projects/test1/Debug/obj/crt.o -o D:/Projects/test1/Debug/bin/test1.out
D:/Projects/test1/Debug/obj/main.o: In function `foo':
D:/Projects/test1/src/main.c:155: undefined reference to `__addsf3'
D:/Projects/test1/src/main.c:156: undefined reference to `__extendsfdf2'
D:/Projects/test1/src/main.c:156: undefined reference to `__muldf3'
D:/Projects/test1/src/main.c:156: undefined reference to `__truncdfsf2'
gnumake: *** [test1.out] Error 1
D:/Projects/test1/Debug/obj/main.o: In function `foo':
D:/Projects/test1/src/main.c:155: undefined reference to `__addsf3'
D:/Projects/test1/src/main.c:156: undefined reference to `__extendsfdf2'
D:/Projects/test1/src/main.c:156: undefined reference to `__muldf3'
D:/Projects/test1/src/main.c:156: undefined reference to `__truncdfsf2'
gnumake: *** [test1.out] Error 1
Причем в map-файле вижу следующее:
Код
Linker script and memory map
LOAD C:/Program files/GNUARM/lib/gcc/arm-elf/4.1.0/interwork/libgcc.a
0x00000000 ROMSTART = 0x0
0x00010000 ROMSIZE = 0x10000
-------------вырезано---------------
startup
*(.startup)
.text 0x00000000 0x794
*(.text)
.text 0x00000000 0x6a0 D:/Projects/test1/Debug/obj/main.o
0x0000040c put
0x0000068c UNDEF_handler
0x0000049c print
0x00000000 InitHW
0x00000254 DAC_setup
0x00000678 SWI_handler
0x00000664 FIQ_handler
0x0000060c IRQ_handler
0x000001b0 UART0_setup
0x00000284 ADC_setup
0x0000015c InitVIC
0x000005b0 AD0_ISR
0x00000354 T1_setup
0x00000560 main
0x000004e8 foo
0x000005a0 DefDummyInterrupt
.text 0x000006a0 0xe0 D:/Projects/test1/Debug/obj/crt.o
0x000006a0 _startup
*(.rodata)
.rodata 0x00000780 0x14 D:/Projects/test1/Debug/obj/main.o
*(.rodata*)
*(.glue_7)
*(.glue_7t)
0x00000794 _etext = .
.data 0x40000200 0x0 load address 0x00000794
0x40000200 _data = .
*(.data)
0x40000200 _edata = .
.bss 0x40000200 0x0
0x40000200 _bss_start = .
*(.bss)
0x40000200 . = ALIGN (0x4)
0x40000200 _bss_end = .
0x40000200 _end = .
LOAD C:/Program files/GNUARM/lib/gcc/arm-elf/4.1.0/interwork/libgcc.a
0x00000000 ROMSTART = 0x0
0x00010000 ROMSIZE = 0x10000
-------------вырезано---------------
startup
*(.startup)
.text 0x00000000 0x794
*(.text)
.text 0x00000000 0x6a0 D:/Projects/test1/Debug/obj/main.o
0x0000040c put
0x0000068c UNDEF_handler
0x0000049c print
0x00000000 InitHW
0x00000254 DAC_setup
0x00000678 SWI_handler
0x00000664 FIQ_handler
0x0000060c IRQ_handler
0x000001b0 UART0_setup
0x00000284 ADC_setup
0x0000015c InitVIC
0x000005b0 AD0_ISR
0x00000354 T1_setup
0x00000560 main
0x000004e8 foo
0x000005a0 DefDummyInterrupt
.text 0x000006a0 0xe0 D:/Projects/test1/Debug/obj/crt.o
0x000006a0 _startup
*(.rodata)
.rodata 0x00000780 0x14 D:/Projects/test1/Debug/obj/main.o
*(.rodata*)
*(.glue_7)
*(.glue_7t)
0x00000794 _etext = .
.data 0x40000200 0x0 load address 0x00000794
0x40000200 _data = .
*(.data)
0x40000200 _edata = .
.bss 0x40000200 0x0
0x40000200 _bss_start = .
*(.bss)
0x40000200 . = ALIGN (0x4)
0x40000200 _bss_end = .
0x40000200 _end = .
Многоуважаемые, где грабли? Я в растерянности...
