关于Mach-O编译器的疑问,求高手答复...

2012-09-12 13:38:35 +08:00
 luyiyuan129
记得对于C的编译器,如果没有调用的函数,编译器会自动优化掉,也就是最后的“.o”文件不会包含这个函数;

但是Mach-O的类中,只要使用了该类,即时该类中有些方法从没有被调用过,编译器也会把它link到最终的文件中,是这样么,有什么方法能取消这些没有调用过的函数么?

还有这个过程和build Settig中的strip和Other link flag中的all_load分别是什么关系?
3310 次点击
所在节点    iDev
2 条回复
lldong
2012-09-12 14:58:16 +08:00
如果你指的是Objective-C的话:因其动态的特性,无法在编译期知道方法会不会被调用;all_load选项,通常会导致可执行文件过大,之前常用来解决一个链接器的bug,不过新版的Xcode已经不需要,详见 http://developer.apple.com/library/mac/#qa/qa1490/_index.html
freewizard
2012-09-12 15:33:50 +08:00
-ObjC 用于保证Objective C的特性如Category代码被正确的连接进执行文件
-force_load <libX.a> 表示把libX的所有符号都连接进执行文件,这个选项应该是-ObjC的超集
-all_load 等价于对所有.a作force_load

"Strip debug symbols"表示去除调试符号数据,跟独立执行strip -S应该是一样的,这个不会影响可执行代码

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/47527

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX