我在生成非常大的目标文件时遇到问题。我们正在使用 VxWorks 5.5.1,但我们有可用的 GCC 4.1.2。
我们的模块大小约为 6.2MB,我们正在寻找减少该大小的方法。该问题似乎主要是由于过度使用模板造成的。当使用 nm 转储文件中的符号时,我得到一个 1.8MB 的文本文件。这告诉我几乎 ⅓ 的文件只是名称。有什么办法可以减小文件大小吗?
以下方法无效:
--strip-all
似乎没有效果 - 输出与使用--strip-debug
相同- 我无法使用
--gc-sections
,因为该平台不支持它(该选项将被忽略)
我知道VxWorks在加载时链接代码,但它所要链接的只是C++运行时库,而且我不希望将任何符号添加到全局符号表中,因此应该有一种方法删除该信息,对吗?
作为引用,这是我的链接器版本:
i386-wrs-vxworks-ld.exe --version
>>> GNU ld (Wind River VxWorks G++ DWARF-EH 4.1-131) 2.17.50.20070509
>>> SPR fixes: cq103489 cq111170 cq116027 cq116652 cq118878 cq125145
和我的编译器版本:
i386-wrs-vxworks-g++.exe --version
>>> i386-wrs-vxworks-g++.exe (GCC) 4.1.2
最佳答案
我明白你想要从对象中删除符号的意思。但是,如果您要删除所有符号,则将没有任何符号可用作启动应用程序的入口点。但我相信你仍然有选择。不幸的是,VxWorks 5 因其 C++ 编译器效率不高而闻名。
如果您将应用程序编译为 *.a(存档 - 又名静态库),您将能够在构建时将其链接到您的操作系统,并从 usrAppInit.c 中调用它。这应该允许删除符号 - 或者至少将它们移动到可选的下载符号表。从应用程序构建属性中,选择“宏”选项卡并将存档添加到 LIBS 宏。
要制作存档,请转到构建属性并选择“规则”选项卡,然后从下拉框中选择存档。
要缩减操作系统的大小(链接了应用程序),请修改 vxworks 设置。禁用尽可能多的组件。另外一定要使用下载的符号表(开发工具组件 -> 符号表组件 -> 符号表初始化组件 -> 选择符号表初始化 -> 下载符号表)。 这将从操作系统中剥离所有符号,并制作一个可下载的符号表,可以在启动后下载以进行调试。
祝你好运!
PS。确保您已在编译器中关闭调试 (-g)。如果您发布您的编译器开关,也许我们可以提供更多帮助。关于c++ - 为VxWorks 5.5.1编译时如何减少目标文件大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18183961/