C++ G++-Xlinker--gc部分删除调试符号

C++ G++-Xlinker--gc部分删除调试符号,c++,linux,linker,gdb,debug-symbols,C++,Linux,Linker,Gdb,Debug Symbols,我正在使用eclipse编译一个应用程序,最近切换了工具链(arm-***-linux-gnueabi-g++--version==v4.8.3)。该工具链是使用crosstool ng生成的 这个新的工具链使用了与我使用的旧codesourcery arm none linux gnueabi工具链相同的g++版本,但是当我使用相同的编译器和链接器标志构建应用程序时,新的工具链似乎去掉了所有调试符号(除了main.cpp?!),而codesourcery没有 为了编译,我使用了: arm-**

我正在使用eclipse编译一个应用程序,最近切换了工具链(arm-***-linux-gnueabi-g++--version==v4.8.3)。该工具链是使用crosstool ng生成的

这个新的工具链使用了与我使用的旧codesourcery arm none linux gnueabi工具链相同的g++版本,但是当我使用相同的编译器和链接器标志构建应用程序时,新的工具链似乎去掉了所有调试符号(除了main.cpp?!),而codesourcery没有

为了编译,我使用了:

arm-***-linux-gnueabi-g++ -mcpu=arm926ej-s -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -Wall  -g3 -ggdb ...
并链接:

arm-***-linux-gnueabi-g++ -mcpu=arm926ej-s -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -Wall  -g3 -ggdb -Xlinker --gc-sections ...
经过一些调查,我发现调试符号被新的链接器删除了,因为我只设置了一个链接器标志(-Xlinker--gc sections),所以我删除了它,当我重新构建时,所有符号都再次包含在二进制文件中


我主要想知道我使用的两个编译器中哪一个表现出了正确的行为。-Xlinker--gc sections标志是否应该删除调试符号,或者这是已构建的链接器中的错误?

据我所知,
--gc sections
删除未使用的符号,如函数和变量,而不是调试符号<代码>--gc节需要编译器选项
-ffunction节
-fdata节
来跟踪变量和函数,以便在链接过程中删除它们。可能您用来显示符号和调试信息的工具变得混乱;其输出不准确。或者,您的makefile正在调用
strip
来删除调试信息。@jww-我已经仔细检查过了,我肯定不会在Make过程中的任何地方调用
strip
。正是由于使用了
--gc sections
标志,才导致删除调试符号。