上周我发布了应用程序的Linux和Windows版本。
在发布之后,我们意识到符号没有被剥离,我的经理认为(我不同意)它可能允许用户理解我们的算法。
无论如何,现在,我将不得不清理符号并重新发布应用程序。
我的问题,
答案 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
现在您可以压缩程序所在的文件夹(或将其打包到安装程序或其他任何程序),其中不再有调试符号。
但 如果您启动调试器或运行addr2line
或obdump
等工具,该工具将(由于调试链接信息)自动知道在哪里找到符号并加载它们。
哪个很棒,因为这意味着你可以在你的头上使用符号,而不会将它们分发给用户。