从linux共享库中删除调试信息

时间:2017-10-18 18:23:31

标签: linux gcc debug-symbols

我正在使用GCC为ARM Linux编译共享库。这是我在CMakeLists.txt中的编译器选项:

sentences = []
for elem in root:
    sentence = []
    for w in elem:
        sentence.append(w.text)
    sentences.append(sentence)

我刚刚在反汇编程序中打开了生成的.so文件。我很失望地看到很多东西。它向我显示了所有内容的名称,包括我的所有内部类以及从未导出过的函数。甚至来自匿名命名空间的东西仍然存在。在反汇编程序的“导出”选项卡上,我只看到了实际导出的十几个函数(加上一些额外的函数:add_definitions( "-std=c++14 -fvisibility=hidden -fvisibility-inlines-hidden -Wall -Wno-psabi -march=native -mfpu=neon" ) .init_proc .term_proc _edata和{{ 1}})。

在Windows上,我只看到这些东西,如果我有一个PDB文件用于我正在拆卸的模块。但是我没有发送我的.PDB文件。

我对GCC也有同样的行为。

有没有办法告诉GCC停止在.so文件中包含调试信息(=每个函数的错位名称),并实际将这些内容编译成二进制地址?

1 个答案:

答案 0 :(得分:1)

您需要在链接器标志中添加-Wl,--strip-debug