newlib-nano嵌入式项目中printf转iprintf
newlib-nano printf translates to iprintf in embedded project
我有一个 cortex-m0+ 的嵌入式项目,我想 link 和 newlib-nano 库。我正在学习,事情是如何工作的(你需要为某些功能实现存根等)。我已经成功地创建了一个构建的工作示例。
源代码:
int main(void)
{
uint32_t i = 0;
printf("Hello Wordl!");
while (1)
{
i += 1;
}
}
我很好奇,调用了哪些函数,想看看幕后情况,所以我转储了最终的 elf 文件,令我惊讶的是,代码调用了“iprintf”而不是 printf。
但是,我没能找到 iprintf get 映射到 printf 的位置。我希望在 headers 左右有一些宏,但我找不到它。
任何人都可以解释发生了什么或指导我在哪里可以找到这个“映射”吗?
非常感谢
在 https://github.com/32bitmicro/newlib-nano-1.0/blob/master/newlib/libc/stdio/printf.c iprintf
是 printf
的别名:
_EXFUN(iprintf, (const char *, ...)
_ATTRIBUTE ((alias("printf"))));
nano printf()
没有 floating-point 支持,所以 iprintf()
变体是 相同的功能 而在完整的 Newlib 中,它们将是不同的实现。
因为它们引用相同的实现,所以您的 elf 转储是否发出 iprintf
或 printf
作为匹配符号可能是任意的,并且可能是 non-deterministic - 这是关于链接器符号 table 是如何形成的,也许 objdump
或 nm
的行为无论您使用什么。它们只是同一事物的不同名称。
我有一个 cortex-m0+ 的嵌入式项目,我想 link 和 newlib-nano 库。我正在学习,事情是如何工作的(你需要为某些功能实现存根等)。我已经成功地创建了一个构建的工作示例。
源代码:
int main(void)
{
uint32_t i = 0;
printf("Hello Wordl!");
while (1)
{
i += 1;
}
}
我很好奇,调用了哪些函数,想看看幕后情况,所以我转储了最终的 elf 文件,令我惊讶的是,代码调用了“iprintf”而不是 printf。
但是,我没能找到 iprintf get 映射到 printf 的位置。我希望在 headers 左右有一些宏,但我找不到它。
任何人都可以解释发生了什么或指导我在哪里可以找到这个“映射”吗?
非常感谢
在 https://github.com/32bitmicro/newlib-nano-1.0/blob/master/newlib/libc/stdio/printf.c iprintf
是 printf
的别名:
_EXFUN(iprintf, (const char *, ...)
_ATTRIBUTE ((alias("printf"))));
nano printf()
没有 floating-point 支持,所以 iprintf()
变体是 相同的功能 而在完整的 Newlib 中,它们将是不同的实现。
因为它们引用相同的实现,所以您的 elf 转储是否发出 iprintf
或 printf
作为匹配符号可能是任意的,并且可能是 non-deterministic - 这是关于链接器符号 table 是如何形成的,也许 objdump
或 nm
的行为无论您使用什么。它们只是同一事物的不同名称。