Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ g++;切换到不包含自己的符号函数名(和调试数据)-?_C++_Unix - Fatal编程技术网

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 ...