Практический способ разобрать float с помощью newlib без поддержки локали

Я экспериментирую с программным ядром NIOS II, пытаясь минимизировать размер встроенного приложения. Одно из самых больших достижений я получаю от использования небольшой библиотеки C (стр. 206):

Полная функциональность библиотеки newlib часто не нужна для встраиваемых систем и нежелательно велика для систем, требующих минимального объема оперативной памяти. Altera предоставляет версию newlib уменьшенного размера "Small C" с ограниченной функциональностью, которая позволяет добиться меньшего объема оперативной памяти.

Одна из функций, урезанных из небольшой библиотеки C, - это поддержка локали. Однако, когда я пытаюсь использовать atof(), связывание не удается, потому что вызывается localeconv(), которого нет. Например, построив следующий образец

#include <stdlib.h>
int main(void) { return atof("0"); }

приводит к "/ path / to / strtod.c: 341: неопределенная ссылка на _localeconv_r "ошибку. Это действительно позор, потому что единственное, что нужно atof(), - это определение decimal_point.

Какие у меня есть варианты, если мне нужно проанализировать числа с плавающей запятой, помимо включения измененной копии strtod.c в мое программное обеспечение? Использование обычной библиотеки C (вместо маленькой) увеличивает объем кода на 35 КБ, что очень важно для встроенного ПО.


person Dmitry Grigoryev    schedule 18.01.2018    source источник
comment
Можете ли вы написать свой собственный localeconv/_localeconv_r() и ссылку? Или, по крайней мере, попробовать это, чтобы убедиться, что это единственное остающееся препятствие?   -  person chux - Reinstate Monica    schedule 18.01.2018
comment
Часто просто шепот «поддержка с плавающей запятой» вызывает сбой сборки в пространстве памяти :( Неужели вы не можете избавиться от всех чисел с плавающей запятой?   -  person Martin James    schedule 18.01.2018
comment
Надеюсь, что atol() вместо atof() в вашем примере - просто опечатка?   -  person deamentiaemundi    schedule 18.01.2018
comment
попробуйте -libintl связать. Наверное, у вас он отдельный.   -  person Luis Colorado    schedule 18.01.2018
comment
@MartinJames То, что я делаю, является своего рода фреймворком, и в большинстве случаев поддержка с плавающей запятой действительно не требуется. Я хочу, чтобы это было возможно, но, конечно, не по цене 35 КБ для каждого пользователя.   -  person Dmitry Grigoryev    schedule 18.01.2018