在嵌入式裸机系统(Xilinx Zync ARM A53)上使用C++实现大型二进制文件

lfapxunr  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(104)

我有一个用C实现的应用程序,它应该在A53裸机系统上运行。我的问题是,结果的二进制文件非常大。当我查看每个nm的内容时,我明白了原因-有很多标准的C函数链接在一起,我不认为它们是需要的,例如。用于异常处理、RTTI和动态内存管理。这些我都不用。我找到了this的描述,其中说这些东西应该用适当的编译器标志禁用,例如。-fno-exceptions-fno-non-call-exceptions-fno-rtti的数据。不幸的是,这些对我一点影响都没有--二进制保持相同的大小,所说的符号仍然在那里。我该怎么做才能去掉这些压舱物?

qoefvg9y

qoefvg9y1#

禁用异常和RTTI不会在标准库中禁用它,只会在代码中禁用它。如果你链接到stdlib,你就把所有的包袱都带到了你的二进制文件中。也尝试传递-nostdlib选项。请注意,如果禁用stdlib,一些标准功能可能会丢失,您将获得链接错误。缺失的功能要么必须被清除,要么必须被实现。
有关更多详细信息,建议阅读Practical Guide to Bare Metal C++。虽然写于大约10年前,但它仍然与您相关,特别是“了解您的编译器输出”部分。

相关问题