首页 / 知识
关于调试:删除C -STL / Boost调试符号(…或不创建它们)
2023-04-16 00:06:00

Remove C++-STL/Boost debug symbols (… or do not create them)Linux / Gcc / LD-工具链。 由于两个原因,我想从库和可执行文件中删除STL / Boost调试符号: 对于1.增量链接将是一个很大的改进,但是AFAIK ld不支持增量链接。在1999年dr.dobb的日记中有一种变通方法"伪增量链接"(不再在网络上,而是在archive.org中(想法是将所有内容都放在动态库中,而所有更新的目标文件都放在第二个库中)。首先加载),但这并不是真正的通用解决方案。 对于2.,这里有一个脚本,但是a)对我不起作用(它没有删除符号),b)它很慢,因为它在管道的末尾起作用,但是它会更多有效地及早删除符号。 显然,其他调试符号应保留在原处。 GNU strip接受--strip-symbols =的正则表达式参数 据我所知,在gcc中没有真正的选择可以做您想做的事情。主要问题是要剥离调试符号的所有代码都在标头中定义。 否则,可以分开构建一个库,剥离该库,并与剥离后的版本链接。 据我所知,在gcc中,只能从编译单元的某些部分获取调试符号,而不能进行编译和链接(以实现所需的链接时间加速)。 此答案提供了一些使MSalters的答案有效以删除STL符号所需的细节。 STL符号名称被修饰。诀窍是要找到一个涵盖这些名称的正则表达式。我用GNU的Binutils查找了这些符号:
我基本上搜索了STL函数,例如
查找包含STL函数调用的行号,然后使用提供的第一个命令在相同的行号上查找错误的名称。这使我看到所有STL符号名称都以_ZNSt [0-9]或_ZSt [0-9]等开头。 为了允许GNU Strip删除这些符号,我使用了:
我直接在编译/链接的二进制文件上使用了这些命令。我通过比较删除前后的 如果您不想进入STL代码,可以通过gdb的 希望对您有所帮助 您可能要使用脱衣舞。 为什么您不先构建而不进行调试? 您可能不想从共享库中剥离调试符号,因为有时可能需要。 如果您使用GDB或DDD进行调试,则可以从源路径中删除Boost源文件,从而无法跟踪功能。 (或者只是不追踪它们,追溯过去!) 您可以删除使用调试符号编译程序的选项,这将缩短链接时间。 就像您链接到的脚本一样,您可以查询剥离程序(" man strip")以删除所有或某些符号。 您使用哪个编译器?例如,如果我正确理解了您的问题,则在MS Visual Studio中这是一件微不足道的事情。 |
最新内容
相关内容
linux命令下载链接?
linux命令下载链接?,软件,名称,系统,工具,网络,官网,代理,命令,平台,位置,linux命令怎么下载pdf文件方法如下 wget是linux下一个从网络上自动linux创建硬链接命令?
linux创建硬链接命令?,数据,系统,链接,地方,信息,文件,概念,时间,位置,工作,Linux查看—个目录下所有文件,不包括隐藏文件用哪条命令?1、ls命linux系统删除的命令?
linux系统删除的命令?,软件,系统,名称,工具,不了,命令,文件夹,电脑,通用,信息,linux删除文件夹命令1、linux删除命令rm-rf命令。具体详情:rm命linux文件链接命令?
linux文件链接命令?,系统,工作,地址,命令,网络,信息,工具,基础,管理,目录,linux常用命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目linux删除命令文件夹?
linux删除命令文件夹?,系统,数据,通用,文件夹,命令,文件,环境,百度,不了,名称,linux删除文件的方法linux删除文件夹的方法有两种:rmdir命令和rmlinux删除本行命令?
linux删除本行命令?,系统,本行,档案,命令,资料,商业,文件,终端,目录,文件名,Linux命令之sed-删除匹配行1、)先用s命令将此要删除的路径替换为一linux删除第一行命令?
linux删除第一行命令?,单位,系统,命令,标的,不了,数字,连续,名称,档案,文件,mv什么意思呢?1、MV的意思具体如下:mV是一个较小的电压单位,可以用linux删除本行命令?
linux删除本行命令?,系统,本行,档案,命令,资料,商业,文件,终端,目录,文件名,Linux命令之sed-删除匹配行1、)先用s命令将此要删除的路径替换为一linux删除命令文件夹?
linux删除命令文件夹?,系统,数据,通用,文件夹,命令,文件,环境,百度,不了,名称,linux删除文件的方法linux删除文件夹的方法有两种:rmdir命令和rmlinux删除第一行命令?
linux删除第一行命令?,单位,系统,命令,标的,不了,数字,连续,名称,档案,文件,mv什么意思呢?1、MV的意思具体如下:mV是一个较小的电压单位,可以用linux里删除区间命令?
linux里删除区间命令?,系统,命令,情况,档案,不了,名称,目录,文件,文件夹,分区,linux删除其中一个分区挂载点命令1、fdisk -l 查看硬盘分区情况linux命令安条件删除?
linux命令安条件删除?,系统,命令,不了,通用,名称,文件夹,文件,目录,软件,子目录,linux系统删除文件夹命令linux删除命令rm-rf命令。具体详情:rm