在编译VxWorks 5.5.1时如何减小目标文件的大小?

时间:2013-08-12 09:46:22

标签: c++ linker vxworks

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

2 个答案:

答案 0 :(得分:4)

我想通过想要从对象中剥离符号来表达你的意思。但是如果要删除所有符号,则不会使用任何符号作为启动应用程序的入口点。但我相信你还有选择。不幸的是,VxWorks 5以拥有一个效率不高的C ++编译器而闻名。

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

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

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

祝你好运!

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

答案 1 :(得分:0)

我们通常处理此方法的方法是压缩图像。您还需要构建bootrom,以便在运行之前将其解压缩到RAM。我相信有标准的makefile选项可以让你这样做。