Перейти к содержанию
    

[РЕШЕНО] Не линкуется проект на C++ для Cortex-M3

Сначала всё было написано на Си, комплировалось, линковалось и работало. Добавил простейший C++ код для пробы (создание класса) и посыпались ошибки

 

-------------- Build: Release in test ---------------

 

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/core_cm3.c -o ./bin/Release/obj/lib/core_cm3.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/misc.c -o ./bin/Release/obj/lib/misc.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/stm32f10x_adc.c -o ./bin/Release/obj/lib/stm32f10x_adc.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/stm32f10x_bkp.c -o ./bin/Release/obj/lib/stm32f10x_bkp.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/stm32f10x_can.c -o ./bin/Release/obj/lib/stm32f10x_can.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/stm32f10x_dma.c -o ./bin/Release/obj/lib/stm32f10x_dma.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/stm32f10x_exti.c -o ./bin/Release/obj/lib/stm32f10x_exti.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/stm32f10x_flash.c -o ./bin/Release/obj/lib/stm32f10x_flash.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/stm32f10x_gpio.c -o ./bin/Release/obj/lib/stm32f10x_gpio.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/stm32f10x_i2c.c -o ./bin/Release/obj/lib/stm32f10x_i2c.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/stm32f10x_iwdg.c -o ./bin/Release/obj/lib/stm32f10x_iwdg.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/stm32f10x_pwr.c -o ./bin/Release/obj/lib/stm32f10x_pwr.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/stm32f10x_rcc.c -o ./bin/Release/obj/lib/stm32f10x_rcc.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/stm32f10x_rtc.c -o ./bin/Release/obj/lib/stm32f10x_rtc.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/stm32f10x_spi.c -o ./bin/Release/obj/lib/stm32f10x_spi.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/stm32f10x_tim.c -o ./bin/Release/obj/lib/stm32f10x_tim.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/stm32f10x_usart.c -o ./bin/Release/obj/lib/stm32f10x_usart.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/stm32f10x_wwdg.c -o ./bin/Release/obj/lib/stm32f10x_wwdg.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c lib/system_stm32f10x.c -o ./bin/Release/obj/lib/system_stm32f10x.o

arm-elf-g++ -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c src/cbuffer.cpp -o ./bin/Release/obj/src/cbuffer.o

arm-elf-gcc -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c src/handlers.c -o ./bin/Release/obj/src/handlers.o

src/handlers.c:160: warning: initialization makes pointer from integer without a cast

arm-elf-g++ -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa -O2 -g -Isrc -Ih -c src/main.cpp -o ./bin/Release/obj/src/main.o

arm-elf-g++ -o ./bin/Release/test.elf ./bin/Release/obj/lib/core_cm3.o ./bin/Release/obj/lib/misc.o ./bin/Release/obj/lib/stm32f10x_adc.o ./bin/Release/obj/lib/stm32f10x_bkp.o ./bin/Release/obj/lib/stm32f10x_can.o ./bin/Release/obj/lib/stm32f10x_dma.o ./bin/Release/obj/lib/stm32f10x_exti.o ./bin/Release/obj/lib/stm32f10x_flash.o ./bin/Release/obj/lib/stm32f10x_gpio.o ./bin/Release/obj/lib/stm32f10x_i2c.o ./bin/Release/obj/lib/stm32f10x_iwdg.o ./bin/Release/obj/lib/stm32f10x_pwr.o ./bin/Release/obj/lib/stm32f10x_rcc.o ./bin/Release/obj/lib/stm32f10x_rtc.o ./bin/Release/obj/lib/stm32f10x_spi.o ./bin/Release/obj/lib/stm32f10x_tim.o ./bin/Release/obj/lib/stm32f10x_usart.o ./bin/Release/obj/lib/stm32f10x_wwdg.o ./bin/Release/obj/lib/system_stm32f10x.o ./bin/Release/obj/src/cbuffer.o ./bin/Release/obj/src/handlers.o ./bin/Release/obj/src/main.o -Wl,--gc-sections,-Map=main.elf.map,-cref,-u,Reset_Handler -T ld/stm32.ld -mcpu=cortex-m3 -mthumb -mthumb-interwork -mfpu=fpa

/mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/bin/ld: error: /mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/lib/crt0.o uses FPA instructions, whereas ./bin/Release/test.elf does not

/mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/bin/ld: error: /mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/lib/crt0.o uses hardware FP, whereas ./bin/Release/test.elf uses software FP

/mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/bin/ld: Warning: /mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/lib/crt0.o does not support interworking, whereas ./bin/Release/test.elf does

/mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/bin/ld: failed to merge target specific data of file /mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/lib/crt0.o

/mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/bin/ld: error: ./bin/Release/obj/lib/core_cm3.o uses FPA instructions, whereas ./bin/Release/test.elf does not

/mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/bin/ld: error: ./bin/Release/obj/lib/core_cm3.o uses hardware FP, whereas ./bin/Release/test.elf uses software FP

...

...

...

/mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/bin/ld: error: /mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/lib/libc.a(lib_a-readr.o) uses FPA instructions, whereas ./bin/Release/test.elf does not

/mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/bin/ld: error: /mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/lib/libc.a(lib_a-readr.o) uses hardware FP, whereas ./bin/Release/test.elf uses software FP

/mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/bin/ld: Warning: /mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/lib/libc.a(lib_a-readr.o) does not support interworking, whereas ./bin/Release/test.elf does

/mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/bin/ld: failed to merge target specific data of file /mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/lib/libc.a(lib_a-readr.o)

/mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/bin/ld: /mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/lib/libc.a(lib_a-cxa_atexit.o)(__cxa_atexit): warning: interworking not enabled.

first occurrence: ./bin/Release/obj/src/main.o: Thumb call to ARM

/mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/bin/ld: /mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/lib/libc.a(lib_a-malloc.o)(free): warning: interworking not enabled.

first occurrence: /mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/lib/thumb/thumb2/interwork/libstdc++.a(del_op.o): Thumb call to ARM

/mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/bin/ld: /mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/lib/libc.a(lib_a-cxa_atexit.o)(__cxa_atexit): warning: interworking not enabled.

first occurrence: ./bin/Release/obj/src/main.o: Thumb call to ARM

/mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/bin/ld: /mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/lib/libc.a(lib_a-malloc.o)(free): warning: interworking not enabled.

first occurrence: /mnt/data/opt/develop/arm-elf-x86/bin/../lib/gcc/arm-elf/4.4.3/../../../../arm-elf/lib/thumb/thumb2/interwork/libstdc++.a(del_op.o): Thumb call to ARM

collect2: ld returned 1 exit status

Process terminated with status 1 (0 minutes, 5 seconds)

0 errors, 63 warnings

 

далее

arm-elf-objdump -p crt0.o

 

crt0.o: file format elf32-littlearm

private flags = 0: [APCS-32] [FPA float format]

и в проекте

arm-elf-objdump -p main.o

 

main.o: file format elf32-littlearm

private flags = 0: [APCS-32] [FPA float format]

 

gcc-4.4.3 собран с поддержкой interwork,multilib и даже в его каталоге лежат наборы в подкаталогах thumb,interwork,fpu.

 

Подскажите, пожалуста, что я упустил.

Изменено пользователем smalcom
Многие десятки килобайт однотипных warnings убраны

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

разобрался. взял конфу t-arm-elf с сайта gnuarm, библиотеку newlib взял старую(1.14)... похоже на то что сейчас оно тоже от фаз луны зависит, но вроде пока все без ошибок собирается

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

newlib взял старую(1.14)... похоже на то что сейчас оно тоже от фаз луны зависит, но вроде пока все без ошибок собирается

Блин, newlib- гадость редкостная. Где бы найти время ее с нуля переписать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Блин, newlib- гадость редкостная. Где бы найти время ее с нуля переписать?

 

в каком месте гадость то? не вся же

 

если не собирается это 99.99% косяг с компиллером, даже с его сборкой

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...