代码之家  ›  专栏  ›  技术社区  ›  Arash Afsharpour

我应该在iOS Objective-C项目中使用什么Mach-O类型?

  •  2
  • Arash Afsharpour  · 技术社区  · 8 年前

    它有以下选项“可执行”“动态库”“捆绑”“静态库”“可重新定位的对象文件”

    我有一个错误“苹果Mach-O链接器错误组”,因为我把它从可执行文件更改为静态库,我的错误消失了,我想知道我更改它可以吗?所有这些选择意味着什么,这样我就不会在未来面临另一个错误。

    2 回复  |  直到 8 年前
        1
  •  3
  •   yogesh wadhwa    8 年前
        2
  •  2
  •   yoAlex5    4 年前

    Mach-O型

    [Framework static vs dynamic]

    [Mach-O format]

    Official page loader.h .另外 MH_PRELOAD 0x5, MH_CORE MH_DYLINKER 0x7

    设置的步骤 Mach-O Type 确定 连接器 行为

    Framework target -> Build Settings -> Mach-O Type
    
    • Executable 0x2( mh_execute mh_executable )-未链接。用于创建可启动的程序- Application , App extension - Widget Application target 是默认设置
    • Bundle 0x8( mh_bundle loadable bundle -运行时链接。iOS现在只支持 Testing Bundle target 其中,生成 Loadable bundle
      System -&燃气轮机; Testing Bundle tested binary 测试包 将取决于目标,静态或动态二进制。。。
    • Dynamic Library mh_dylib .dylib或none)-加载/运行时链接。
      • 具有 Framework target 动态库 是生成 Dynamic framework
    • Static Library staticlib
      • Static Library target - 静态库 是生成 Static library
      • 框架目标 - 生成 Static framework
    • Relocatable Object File mh_object .o)-编译时间(构建时间)链接。它是最简单的形式。它是创建可执行、静态或动态格式的基础。可重定位,因为变量和函数没有任何特定地址

    otool 确定二进制文件是否为动态文件

    otool -h <path_binary>
    //e.g.
    otool -h "/Users/alex/Desktop/projects_experiments/ios/LibraryAndFramework/BuildCustom/UtilsSwift/UtilsSwiftFramework.framework/UtilsSwiftFramework"
    
    Mach header
          magic  cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
     0xfeedfacf 16777228          0  0x00           6    30       3488 0x00100085
    
    

    filetype 是一个关键点-6-0x6-动态库

    [Vocabulary]