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 - 生成调试符号的主要内容,如果未能解决你的问题,请参考以下文章

mac下的gcc如何使用。。

使用 arm-apple-darwin10-llvm-gcc-4.2 在 MacOS 上交叉编译问题

Xcode的控制台调试命令

lldb调试命令

Xcode 5“缺少编译器规范 LLVM 4.2”错误

LLVM GCC 4.2 中内联汇编的奇怪编译