G ++ -Xlinker --gc-sections删除调试符号

时间:2017-10-27 10:56:19

标签: c++ linux linker gdb debug-symbols

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

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

要编译,我正在使用:

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标志是否应该删除调试符号,或者这是否是已构建的链接器中的错误?

0 个答案:

没有答案