首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除C++STL/Boost调试符号(.或不创建它们)

删除C++STL/Boost调试符号(.或不创建它们)
EN

Stack Overflow用户
提问于 2008-09-16 15:23:45
回答 6查看 3.5K关注 0票数 5

Linux/Gcc/LD -工具链。

我想从库和可执行文件中删除STL/Boost调试符号,原因有二:

  1. 大型程序的链接速度非常慢。
  2. 调试跳转到stl/boost代码中,这很烦人

对于1.增量链接是一个很大的改进,但是AFAIK不支持增量链接。在1999年的dr.dobb博士的日志中有一个解决办法:“伪增量链接”(不再出现在web中,而是在archive.org中)(其想法是将所有内容放在一个动态库中,并将所有更新的对象文件放在第二个先加载的目录中),但这并不是一个通用的解决方案。

对于2.有一个脚本这里,但是a)它对我不起作用(它没有删除符号),b)它的速度非常慢,因为它在管道的末端工作,而更早地删除符号会更有效。

显然,其他调试符号应该保持在适当的位置。

EN

回答 6

Stack Overflow用户

发布于 2008-09-17 10:03:31

GNU条带接受regex参数到- strip符号= STL,而boost符号因其所处的名称空间而被命名损坏。现在我手头还没有GCC的二进制文件,只是看一下名称空间中使用的mangling这个名字,然后构造“来自命名空间的符号”的regex,然后将这个符号传递给-strip符号=。

票数 3
EN

Stack Overflow用户

发布于 2008-09-16 18:52:55

据我所知,gcc没有真正的选择去做你想做的事。主要问题是,要为其提取调试符号的所有代码都是在标头中定义的。

否则,就有可能单独构建一个库,去掉它,并将其链接到已剥离的版本。

但是,仅从编译单元的某些部分获取调试符号,而构建和链接(为您想要的链接时间加速比)在gcc中是不可能的。

票数 2
EN

Stack Overflow用户

发布于 2008-09-16 16:12:09

您可能不想从共享库中删除调试符号,因为您可能在某个时候需要这样做。

如果您正在使用GDB或DDD进行调试,您可能可以从source路径中删除Boost源文件,这样它就无法跟踪到函数中。(或者只是不追踪他们,追踪完毕!)

您可以删除使用调试符号编译程序的选项,这将加快链接时间。

就像您链接到的脚本一样,您可以参考条形程序("man“)来删除所有或特定的符号。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档