2015-10-05 86 views
2

我正在開發一個使用GCC交叉編譯器(arm-none-eabi-)的ARM架構(裸機)程序。爲了保持代碼小,我使用「--specs = nano.specs」鏈接器標誌來鏈接到newlib-nano。 我碰到的問題是有在printf的「長長」的支持,即:newlib-nano long long support

long long int val = 1234; 
pritnf("%lld", val); 

添加「-u _printf_float」鏈接標誌不解決這個問題。它確實會使代碼大小增加9kB,但它似乎只是增加了浮點支持,沒有「長期」的支持。鏈接到newlib(刪除「--specs = nano.specs」標誌) - 雖然解決了問題 - 是不可接受的,因爲它會導致代碼大小增加46kB。

是否有任何標誌只重新啓用newlib-nano版本的printf的「long long」支持?

+0

考慮打印出來的十六進制代替,這可以通過簡單地分成兩個'uint32_t's和打印這些來完成。 – unwind

+0

這對於打印'-1234LL'沒有多大幫助。 –

回答

1

不知道很多關於newlib納米(是一些叉?),但也newlib有很長很長符不默認支持的,所以可能是這將有助於:

  • 重新配置你--enable-newlib-io-long-long newlib標誌
  • 重建
+1

newlib-nano是newlib的精簡版。根據這個:[link](https://github.com/32bitmicro/newlib-nano-1.0/blob/master/newlib/README.nano),'enable-newlib-io-long-long'標誌被忽略。這似乎回答了我的問題 - 要麼使用newlib,要麼在newlib-nano的情況下不可能使用long long。 –

+0

@JacekŚlimok:或者也許你可以將newlib的'long long'支持移植到newlib-nano。 –

+0

@KeithThompson我會看看這個,看看它需要多少努力來移植這個單一的部分。然而,我假設'enable-newlib-io-long-long'被明確提及爲被忽略的原因。 –