在XCode -> Build Settings -> 搜刮map -> 开启Write Link Map File
开启后,在编译,我们可以在对应的Debug/Release目次下看到对应的link map的text文件。
预处理
clang是实际的编译敕令
默认的目次在
~/Library/Developer/Xcode/DerivedData/TARGET-NAME>-对应ID/Build/Intermediates/TARGET-NAME>.build/Debug-iphoneos/TARGET-NAME>.build/
例如,我的TargetName是EPlusPan4Phone,目次如下
/Users/huangwenchen/Library/Developer/Xcode/DerivedData/EPlusPan4Phone-eznmxzawtlhpmadnbyhafnpqpizo/Build/Intermediates/EPlusPan4Phone.build/Debug-iphonesimulator/EPlusPan4Phone.build
这个映射文件的重要包含以下部分:
这个部分包含的内容
– .a文件
– 须要link的framework
- #! Arch: x86_64
- #Object files:
- [0] linker synthesized
- [1] /EPlusPan4Phone.build/EPlusPan4Phone.app.xcent
- [2]/EPlusPan4Phone.build/Objects-normal/x86_64/ULWBigResponseButton.o
- …
- [1175]/UMSocial_Sdk_4.4/libUMSocial_Sdk_4.4.a(UMSocialJob.o)
- [1188]/iPhoneSimulator10.1.sdk/System/Library/Frameworks//Foundation.framework/Foundation
这个区域的存储内容比较简单:前面是文件的编号,后面是文件的路径。文件的编号在后续会用到
Sections
- LLVM机械码生成器会针对不合的架构,比如arm64等生成不合的机械码。
这个区域供给了各个段(Segment)和节(Section)在可履行文件中的地位和大年夜小。这个区域完全的描述克可履行文件中的全部内容。
个中,段分为两种
__TEXT 代码段
__DATA 数据段
例如,之前写的一个App,Sections区域如下,可以看到,代码段的
__text节的地址是0x1000021B0,大年夜小是0x0077EBC3,而二者相加的下一?地位正好是__stubs的地位0x100780D74。
- # Sections:
- # 地位 大年夜小 段 节
- # Address Size Segment Section
- 0x1000021B0 0x0077EBC3 __TEXT __text //代码
- 0x100780D74 0x00000FD8 __TEXT __stubs
- 0x100781D4C 0x00001A50 __TEXT __stub_helper
- 0x1007837A0 0x0001AD78 __TEXT __const //常量
- 0x10079E518 0x00041EF7 __TEXT __objc_methname //OC 办法名
- 0x1007E040F 0x00006E34 __TEXT __objc_classname //OC 类名
- 0x1007E7243 0x00010498 __TEXT __objc_methtype //OC 办法类型
- 0x1007F76DC 0x0000E760 __TEXT __gcc_except_tab
- 0x100805E40 0x00071693 __TEXT __cstring //字符串
- 0x1008774D4 0x00004A9A __TEXT __ustring
- 0x10087BF6E 0x00000149 __TEXT __entitlements
- 0x10087C0B8 0x0000D56C __TEXT __unwind_info
- 0x100889628 0x000129C0 __TEXT __eh_frame
- 0x10089C000 0x00000010 __DATA __nl_symbol_ptr
- 0x10089C010 0x000012C8 __DATA __got
- 0x10089D2D8 0x00001520 __DATA __la_symbol_ptr
- 0x10089E7F8 0x00000038 __DATA __mod_init_func
- 0x10089E840 0x0003E140 __DATA __const //常量
- 0x1008DC980 0x0002D840 __DATA __cfstring
- 0x10090A1C0 0x000022D8 __DATA __objc_classlist // OC 办法列表
- 0x10090C498 0x00000010 __DATA __objc_nlclslist
- 0x10090C4A8 0x00000218 __DATA __objc_catlist
推荐阅读
早期进修 Node.js 的时刻 (2011-2012),有挺多是大年夜 PHP 转过来的,当时有部分人对于 Node.js 编辑完代码须要重启一下表示麻烦(PHP不须要这个过程),于是社区里的同伙就开端倡导应用 >>>详细阅读
本文标题:iOS编译过程的原理和应用
地址:http://www.17bianji.com/lsqh/34703.html
1/2 1