Xcode LLVM+GCC 4.2 - 生成调试符号

8
我正在进行一个库项目,一直为发布版本打开了 "Strip Debug Symbols"。
最近我注意到了 "Generate Debug Symbols" 标志。当我将 "Generate Debug Symbols" 标志设置为 NO 时,我的库大小缩小了 30%。
这是一个合理的优化吗?
"Strip Debug Symbols" 和 "Generate Debug Symbols" 选项有什么区别?如果我剥离调试符号,所有生成的调试符号不都会消失吗?我为什么能看到这个差异?
除了 -Os (Fastest, Smallest) 外,我还可以做哪些优化来减小二进制文件大小?
"Strip Linked Product" 是如何工作的?

我从这个链接中获得了相当不错的理解,但我仍然希望有人能够解释一下.. http://developer.apple.com/library/mac/#documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html - Santthosh
我没有确定的答案,但这个链接可能会有所帮助 - https://help.apple.com/xcode/mac/8.2/index.html?localePath=en.lproj#/itcaec37c2a6 - Oleksandr
1个回答

1

关于减小二进制文件大小,这是我的发布配置文件在剥离二进制文件方面的样子,我猜大多数开发者都是这么做的:

DEPLOYMENT_POSTPROCESSING = YES
COPY_PHASE_STRIP = NO (not necessary since my copied binaries are already stripped and codesigned)
STRIP_INSTALLED_PRODUCT = YES
STRIP_STYLE = all
SEPARATE_STRIP = YES
DEAD_CODE_STRIPPING = YES
GCC_GENERATE_DEBUGGING_SYMBOLS = NO

使用这些构建设置,Xcode似乎与手动运行"strip"命令对二进制文件进行的操作相同,至少从文件大小上看是如此。

我尚未找到任何其他减小二进制文件大小的方法。请注意那里的“DEPLOYMENT_POSTPROCESSING”标志-如果没有它,二进制文件大小将更大,例如所有的C函数都不会被剥离。


并没有完全回答问题。 "Strip Debug Symbols"和"Generate Debug Symbols"之间有什么区别?从它们的名称来看,它们似乎相互矛盾。在我看来,这是典型的Xcode无聊操作。 - Ash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接