Портирование системы сборки Visual Studio/VisualGDB на CMake/GCC

Я работал над переносом проекта из Visual Studio/VisualGDB, работающего на компьютере с Win10, в систему сборки CMake/GCC, работающую в Ubuntu 16.04. Полная сборка в конечном итоге будет работать на Cortex-M4.

В этом процессе я столкнулся с проблемой компоновщика, когда несколько ссылок в libc не определены

{...}/arm-none-eabi/lib/thumb/v7e-m/fpv4-sp/hard/libg_nano.a(lib_a-sbrkr.o): In function `_sbrk_r':
    sbrkr.c:(.text._sbrk_r+0xc): undefined reference to `_sbrk'
{...}/arm-none-eabi/lib/thumb/v7e-m/fpv4-sp/hard/libg_nano.a(lib_a-writer.o): In function `_write_r':
    writer.c:(.text._write_r+0x10): undefined reference to `_write'
{...}/arm-none-eabi/lib/thumb/v7e-m/fpv4-sp/hard/libg_nano.a(lib_a-closer.o): In function `_close_r':
    closer.c:(.text._close_r+0xc): undefined reference to `_close'
{...}/arm-none-eabi/lib/thumb/v7e-m/fpv4-sp/hard/libg_nano.a(lib_a-fstatr.o): In function `_fstat_r':
    fstatr.c:(.text._fstat_r+0xe): undefined reference to `_fstat'
{...}/arm-none-eabi/lib/thumb/v7e-m/fpv4-sp/hard/libg_nano.a(lib_a-isattyr.o): In function `_isatty_r':
    isattyr.c:(.text._isatty_r+0xc): undefined reference to `_isatty'
{...}/arm-none-eabi/lib/thumb/v7e-m/fpv4-sp/hard/libg_nano.a(lib_a-lseekr.o): In function `_lseek_r':
    lseekr.c:(.text._lseek_r+0x10): undefined reference to `_lseek'
{...}/arm-none-eabi/lib/thumb/v7e-m/fpv4-sp/hard/libg_nano.a(lib_a-readr.o): In function `_read_r':
    readr.c:(.text._read_r+0x10): undefined reference to `_read'

Я использую следующие флаги:

CFLAGS:

-fdata-sections -ffunction-sections -std=gnu99 -mabi=aapcs -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16

ASM_FLAGS:

-x assembler-with-cpp

LDFLAGS:

-static -Wl,--gc-sections -mabi=aapcs -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 --specs=nano.specs -lc -lnosys

Эти флаги взяты из оригинальной сборки VisualGDB, которые собираются без каких-либо проблем.

Я обнаружил, что при использовании --specs=nosys.specs вместо nano.specsсборка завершается, но при работе на цели, где-то внутри возникает серьезная ошибка __libc_init_array(),

Я подозреваю, что это связано с разницей между nano.specs а также nosys.specsОднако я не могу проверить это из-за проблем компоновщика, упомянутых выше. Я попробовал комбинацию <...> --specs=nono.specs --specs=nosys.specs -lc -lnosys без удачи.

Кто-нибудь знает, почему это работает с VisualGDB, а не с CMake/GCC? Насколько я понимаю, VisualGDB все еще использует arm-none-eabi? Это, конечно, тот же набор инструментов, который я использую (проверенные версии 4.9.3 и 6.3.1)

0 ответов

Другие вопросы по тегам