我有一个用C实现的应用程序,它应该在A53裸机系统上运行。我的问题是,结果的二进制文件非常大。当我查看每个nm
的内容时,我明白了原因-有很多标准的C函数链接在一起,我不认为它们是需要的,例如。用于异常处理、RTTI和动态内存管理。这些我都不用。我找到了this的描述,其中说这些东西应该用适当的编译器标志禁用,例如。-fno-exceptions
、-fno-non-call-exceptions
和-fno-rtti
的数据。不幸的是,这些对我一点影响都没有--二进制保持相同的大小,所说的符号仍然在那里。我该怎么做才能去掉这些压舱物?
1条答案
按热度按时间qoefvg9y1#
禁用异常和RTTI不会在标准库中禁用它,只会在代码中禁用它。如果你链接到stdlib,你就把所有的包袱都带到了你的二进制文件中。也尝试传递
-nostdlib
选项。请注意,如果禁用stdlib,一些标准功能可能会丢失,您将获得链接错误。缺失的功能要么必须被清除,要么必须被实现。有关更多详细信息,建议阅读Practical Guide to Bare Metal C++。虽然写于大约10年前,但它仍然与您相关,特别是“了解您的编译器输出”部分。