c++ - 为VxWorks 5.5.1编译时如何减少目标文件大小?

标签 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

最佳答案

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

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

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

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

祝你好运!

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

关于c++ - 为VxWorks 5.5.1编译时如何减少目标文件大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18183961/

相关文章:

c++ - 将 googlemock 与非虚拟函数的假 impl 一起使用

c++ - 将 const 引用绑定(bind)到右值引用

c++ - 从重载的 operator[](模板?)返回不同的类型

c++ - 在模板类的复制构造函数中使用默认值时出错

c++ - 无法链接简单代码

stdout - 如何在 vxWorks 中将文件内容打印到标准输出?

c++ - 具有多个签名的函数,尝试调用私有(private)子类而不是更通用的函数

c++ - 与 C++ 静态库的链接问题

c++ - 如何在Vxworks中正确运行Clock-gettime获取准确时间

c++ - 在 VxWorks 中使用 Boost C++ 库时出错