GNU toolchain (newlib): совместимость между версиями toolchain (неопределенный символ __ctype_ptr__) - PullRequest
0 голосов
/ 01 марта 2019

Имея здесь проект , то есть , использующий некоторые внешние библиотеки, встроенные в GNU-toolchain (предоставляемые извне, без исходного кода).Я компилирую приложение для встроенных систем (особенно FreeRTOS ), поэтому я использую newlib .

I изначально пробовал с помощью этого набора инструментов https://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/aarch64-elf/, но не удалось из-за (среди прочего) этих ошибок компоновщика :

undefined reference to `__ctype_ptr__'

Кажется, этот символ должен быть определенпо libc .Зайдя в каталог newlib sysroot , в частности, в данном случае sysroot-newlib-linaro-2019.02-aarch64-elf \ usr \ lib , попытался найти __ctype_ptr__ в libc.a :

aarch64-elf-nm -C --defined-only -g libc.a | grep __ctype_ptr__

Нет выходных данных, поэтому этот libc действительно не определяет __ctype_ptr __ .

Продолжение с помощью загляните в библиотеку , которая нуждается в символе , блокнот ++ редактирование выявило это среди искаженного текста:

/opt/gcc-linaro-5.4.1-2017.05-x86_64_aarch64-elf/aarch64-elf/libc/usr/include/machine

Что означает это библиотека была построена с использованием 5.4.1 aarch64-elf toolchain версии и Я пытался использовать версию 7.4 , поскольку мне нужна более новая стандартная поддержка C ++ .

Также скачал версию 5.4.1 (только sysroot): https://releases.linaro.org/components/toolchain/binaries/5.4-2017.05/aarch64-elf/

Снова перейдем к 5.4.1 sysroot-newlib-linaroНа этот раз каталог -2017.05-aarch64-elf \ usr \ lib :

aarch64-elf-nm -C --defined-only -g libc.a | grep __ctype_ptr__

наконец-то откроет:

0000000000000000 D __ctype_ptr__

, что означает, что действительно 5.4.1newlib libc экспортирует этот символ.

Вопросы:

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

  2. Я вынужден использовать старую версию , потому что эти библиотеки были созданы сЭто?Нет ли способа использовать более новую версию вместо этого? Как обычно обрабатываются эти ситуации ?

...