Я экспериментирую с программным ядром 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 КБ, что очень важно для встроенного ПО.
localeconv/_localeconv_r()
и ссылку? Или, по крайней мере, попробовать это, чтобы убедиться, что это единственное остающееся препятствие? - person chux - Reinstate Monica   schedule 18.01.2018atol()
вместоatof()
в вашем примере - просто опечатка? - person deamentiaemundi   schedule 18.01.2018-libintl
связать. Наверное, у вас он отдельный. - person Luis Colorado   schedule 18.01.2018