Добавление опций -lc -lstdc ++ ИЛИ -specs = nosys.specs разрешает компиляцию arm-none-eabi-gcc v4.9 - PullRequest
0 голосов
/ 18 апреля 2019

Я добавил онлайновую библиотеку Modbus: freemodbus в свой проект, и после этого я обнаружил, что она перестала работать на этапе связывания со следующей неопределенной ссылкой:

/usr/lib/gcc/arm-none-eabi/4.9.3/../../../arm-none-eabi/lib/armv7e-m/libc_nano.a(lib_a-signalr.o): In function `_kill_r':
/build/newlib-5zwpxE/newlib-2.2.0+git20150830.5a3d536/build_nano/arm-none-eabi/armv7e-m/newlib/libc/reent/../../../../../../newlib/libc/reent/signalr.c:61: undefined reference to `_kill'
/usr/lib/gcc/arm-none-eabi/4.9.3/../../../arm-none-eabi/lib/armv7e-m/libc_nano.a(lib_a-signalr.o): In function `_getpid_r':
/build/newlib-5zwpxE/newlib-2.2.0+git20150830.5a3d536/build_nano/arm-none-eabi/armv7e-m/newlib/libc/reent/../../../../../../newlib/libc/reent/signalr.c:97: undefined reference to `_getpid'
/usr/lib/gcc/arm-none-eabi/4.9.3/../../../arm-none-eabi/lib/armv7e-m/libc_nano.a(lib_a-fstatr.o): In function `_fstat_r':
/build/newlib-5zwpxE/newlib-2.2.0+git20150830.5a3d536/build_nano/arm-none-eabi/armv7e-m/newlib/libc/reent/../../../../../../newlib/libc/reent/fstatr.c:62: undefined reference to `_fstat'
/usr/lib/gcc/arm-none-eabi/4.9.3/../../../arm-none-eabi/lib/armv7e-m/libc_nano.a(lib_a-isattyr.o): In function `_isatty_r':
/build/newlib-5zwpxE/newlib-2.2.0+git20150830.5a3d536/build_nano/arm-none-eabi/armv7e-m/newlib/libc/reent/../../../../../../newlib/libc/reent/isattyr.c:58: undefined reference to `_isatty'
collect2: error: ld returned 1 exit status

Теперь после исследования в Интернете я обнаружил, что добавление EITHERиз следующего, чтобы флаги опций компоновщика решали эту проблему:

1. target_link_libraries(... -lc -lstdc++)
2. target_link_libraries(... -specs=nosys.specs)

Первый вариант, который, я думаю, меня связал, связан с тем фактом, что порядок этих библиотек имеет значение, поэтому даже если они уже включены, особенно libc, они будутнужно включить снова или в порядке обряда Правда?

Я просто не понял 2-го: я знаю, что это связано с системными вызовами?Некоторые исследования привлекли его внимание: «Кажется, системные вызовы отсутствуют. Вы можете использовать specs nosys.specs или rdimon.specs или использовать собственные системные вызовы».

Может кто-то уточнить, если это правильные предположения?

Спасибо

...