2

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

2 回答 2

4

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

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

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

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

祝你好运!

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

于 2013-08-21T20:28:49.370 回答
0

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

于 2013-09-25T19:46:39.860 回答