Xcode LLVM+GCC 4.2 - 生成调试符号
Posted
技术标签:
【中文标题】Xcode LLVM+GCC 4.2 - 生成调试符号【英文标题】:Xcode LLVM+GCC 4.2 - Generate Debug Symbols 【发布时间】:2012-07-12 21:51:44 【问题描述】:我有一个库项目,我一直为发布版本打开“Strip Debug Symbols
”
我最近注意到“Generate Debug Symbols
”标志。当我将“Generate Debug Symbols
”标志设置为 NO 时,我的库大小会缩小 30%
这是对发布版本进行的合理优化吗?
“Strip Debug Symbols”和“Generate Debug Symbols”选项有什么区别,理想情况下,如果我去除调试符号,则不会生成所有调试符号离开?为什么我会看到这种差异?
除了 -Os(最快、最小)之外,我还可以进行哪些其他优化来减小二进制大小?
“Strip Linked Product
”是如何工作的?
【问题讨论】:
我从这个链接中得到了很好的理解,但我仍然希望有人解释这一点..developer.apple.com/library/mac/#documentation/DeveloperTools/… 我没有明确的答案,但这个链接可能会有所帮助 - help.apple.com/xcode/mac/8.2/index.html?localePath=en.lproj#/… 【参考方案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 函数都不会被剥离。
【讨论】:
没有完全回答这个问题。 “剥离调试符号”和“生成调试符号”有什么区别?从他们的名字来看,他们听起来像是相互矛盾的。典型的 Xcode 废话 imo。以上是关于Xcode LLVM+GCC 4.2 - 生成调试符号的主要内容,如果未能解决你的问题,请参考以下文章