【问题标题】:How to reduce object file size when compiling for VxWorks 5.5.1?为 VxWorks 5.5.1 编译时如何减小目标文件的大小?
【发布时间】:2013-08-12 09:46:22
【问题描述】:

我在生成非常大的目标文件时遇到问题。我们正在使用 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

【问题讨论】:

  • 使用-Os优化标志?
  • 对不起,我应该提到我们已经这样做了,它将输出大小从 8.5MB 减少到 6.2MB。

标签: c++ linker vxworks


【解决方案1】:

我明白你想要从对象中去除符号的意思。但是,如果您要剥离所有符号,您将没有任何符号可用作启动应用程序的入口点。但我相信你仍然有选择。不幸的是,VxWorks 5 以没有非常高效的 C++ 编译器而闻名。

如果您将应用程序编译为 *.a(存档 - 又称静态库),您将能够在构建时将其链接到您的操作系统,并从 usrAppInit.c 中调用它。这应该允许剥离符号 - 或者至少将它们移动到可选的下载符号表中。从您的应用程序构建属性中,选择宏选项卡并将您的存档添加到 LIBS 宏。

要制作存档,请转到构建属性并选择“规则”选项卡,然后从下拉框中选择存档。

要调整您的操作系统(链接您的应用程序)的大小,请修改您的 vxworks 设置。尽可能多地禁用组件。另外一定要使用下载的符号表(开发工具组件->符号表组件->符号表初始化组件->选择符号表初始化->下载符号表)。 这将从操作系统中删除所有符号,并制作一个可下载的符号表,可以在启动时间后下载以进行调试。

祝你好运!

PS。确保您已在编译器中关闭调试 (-g)。如果您发布编译器开关,也许我们可以提供更多帮助。

【讨论】:

    【解决方案2】:

    我们通常处理这个问题的方式是压缩图像。您还需要构建 bootrom,以便它在运行前解压缩到 RAM。我相信有标准的 makefile 选项可以让你做到这一点。

    【讨论】:

      猜你喜欢
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      相关资源
      最近更新 更多