C++ g++;切换到不包含自己的符号函数名(和调试数据)-?
还没有找到,但是否有一个开关来排除生成代码中的任何调试数据以及对本地(自己的)函数的明文引用 简单的例子:C++ g++;切换到不包含自己的符号函数名(和调试数据)-?,c++,unix,C++,Unix,还没有找到,但是否有一个开关来排除生成代码中的任何调试数据以及对本地(自己的)函数的明文引用 简单的例子: void setenv( char* in_str ) { } …在可执行文件中为我提供了一个可读的“setenv”名称,这实际上是不需要的,除非它是一种解释性语言 还可以在可执行文件中使用变量的文本名称,这一点更为奇怪 ========== 编辑: 到目前为止,我们尝试了Solaris strip、GNU strip、g++-O0和-s交换机。删除所讨论的符号的唯一方法是从对象文件(但
void setenv( char* in_str ) {
}
…在可执行文件中为我提供了一个可读的“setenv”名称,这实际上是不需要的,除非它是一种解释性语言
还可以在可执行文件中使用变量的文本名称,这一点更为奇怪
==========
编辑:
到目前为止,我们尝试了Solaris strip、GNU strip、g++-O0和-s交换机。删除所讨论的符号的唯一方法是从对象文件(但不是可执行文件)中删除“strip--strip all”,但这样它就不会链接
所以Richard C看起来是对的,这确实是lib*运行时所需要的。您可以使用gnu
strip
命令行工具,或者链接到gcc-s
标志。不过请注意,唯一的好处是减少了文件大小。只有在调试器中运行应用程序或生成堆栈跟踪时,才会将这部分二进制文件加载到内存中。我更喜欢使用strip命令,因为如果出于某种原因希望获得堆栈跟踪,您可以单独保存调试信息并加载它
示例:
g++ -o myexecutable ...
strip --strip-unneeded myexecutable
或
在我的例子中,只使用std名称空间,代码中的符号名是自己的本地函数。
g++ -s -o myexecutable a.o b.o c.o ...