剥离符号的最佳方法

时间:2011-04-22 00:34:07

标签: c++ c visual-c++ gcc symbols

上周我发布了应用程序的Linux和Windows版本。

在发布之后,我们意识到符号没有被剥离,我的经理认为(我不同意)它可能允许用户理解我们的算法。

无论如何,现在,我将不得不清理符号并重新发布应用程序。

我的问题,

  1. 在Linux中删除符号的最佳方法是什么?
  2. 在Windows中删除符号的最佳方法是什么?

2 个答案:

答案 0 :(得分:23)

使用Windows上的Visual C ++(和其他Microsoft编译器),符号不是二进制文件的一部分。相反,它们存储在称为“程序数据库”文件(.pdb文件)的单独文件中。只是不要提供.pdb文件。

使用GNU工具链,您可以使用strip从二进制文件中删除符号。

答案 1 :(得分:18)

对于GNU工具链,存在一种很酷的手法:

objcopy --only-keep-debug yourprogram ../somepath/yourprogram.dbg
strip yourprogram
objcopy --add-gnu-debuglink=../somepath/yourprogram.dbg yourprogram

现在您可以压缩程序所在的文件夹(或将其打包到安装程序或其他任何程序),其中不再有调试符号。
如果您启动调试器或运行addr2lineobdump等工具,该工具将(由于调试链接信息)自动知道在哪里找到符号并加载它们。

哪个很棒,因为这意味着你可以在你的头上使用符号,而不会将它们分发给用户。