C newlib nano长支持

C newlib nano长支持,c,gcc,newlib,C,Gcc,Newlib,我正在使用GCC交叉编译器(ARM-I-)为ARM架构(裸机)开发一个程序。为了保持代码的小尺寸,我使用“--specs=nano.specs”链接器标志来链接newlib nano。 我遇到的问题是printf中有“long-long”支持,即: long long int val = 1234; pritnf("%lld", val); 添加“-u\u printf\u float”链接器标志无法解决此问题。它确实会导致代码大小增加9kB,但它似乎只是添加了浮点支持,而没有“long-lo

我正在使用GCC交叉编译器(ARM-I-)为ARM架构(裸机)开发一个程序。为了保持代码的小尺寸,我使用“--specs=nano.specs”链接器标志来链接newlib nano。 我遇到的问题是printf中有“long-long”支持,即:

long long int val = 1234;
pritnf("%lld", val);
添加“-u\u printf\u float”链接器标志无法解决此问题。它确实会导致代码大小增加9kB,但它似乎只是添加了浮点支持,而没有“long-long”支持。针对newlib的链接(删除“-specs=nano.specs”标志)——虽然确实解决了问题——是不可接受的,因为它会导致代码大小增加46kB


是否有任何标志只重新启用对printf的newlib nano版本的“long-long”支持?

不太了解newlib nano(是fork吗?),但newlib也没有对long-long说明符的默认支持,因此这可能会有所帮助:

  • 使用
    --启用newlib io long long
    标志重新配置您的newlib
  • 重建

考虑改用十六进制打印,只需将其拆分为两个
uint32\u t
s并打印即可。这对打印
-1234LL
newlib nano是newlib的精简版没有多大帮助。据此:忽略
启用newlib io long
标志。这似乎回答了我的问题-要么需要使用newlib,或者在newlib nano的情况下不可能有
long
支持。@JacekŚlimok:或者您可以将
long
支持从newlib移植到newlib nano。@KeithThompson我将对此进行研究,看看移植这一单个部件需要多少努力。然而,我假设,
enable newlib io long
被明确提及为被忽略是有原因的。