G++ 切换为不包含自己的符号函数名称(和调试数据)-

g++ switch to not include own symbolic function names (and debugging data) -?

本文关键字:调试 数据 函数 包含 符号 自己的 G++      更新时间:2023-10-16

还没有找到,但是是否有一个开关可以排除任何调试数据以及生成的代码中对本地(自己的(函数的明文引用?

简单的例子:

void setenv( char* in_str ) {
}

。在可执行文件中给了我一个可读的"setenv"名称,这真的不需要,除非它是一种解释性语言。

同样在可执行文件中 - 变量的文本名称,这更奇怪。

========

==

编辑:

到目前为止,尝试了Solaris条带,GNU条带,g++ -O0和-s开关。删除有问题的符号的唯一方法是从目标文件(但不是可执行文件(中"strip --strip-all",但这样它就不会链接。

所以看起来 Richard C 是对的,这确实是 lib* 运行时所必需的。

您可以使用 gnu strip命令行工具,也可以使用 gcc -s 标志链接。但请注意,唯一的好处是减小文件大小。仅当在调试器中运行应用或生成堆栈跟踪时,二进制文件的这一部分才会加载到内存中。我更喜欢使用 strip 命令,因为您可以单独保存调试信息,如果出于某种原因想要获取堆栈跟踪,则可以加载。

例子:

g++ -o myexecutable ...
strip --strip-unneeded myexecutable

g++ -s -o myexecutable a.o b.o c.o ...