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

问题描述 投票:0回答:2

Xcode 中构建设置中的 Mach-O 类型是什么?应该设置什么?

它有这些选项“可执行文件”“动态库”“捆绑包”“静态库”“可重定位对象文件”

自从我将其从可执行文件更改为静态库以来,我遇到了错误“Apple Mach-O 链接器错误组”,我的错误消失了,我想知道我更改它可以吗?以及所有这些选项的含义,这样我将来就不会再遇到另一个错误。

ios objective-c xcode xcode8
2个回答
3
投票

enter image description here

了解更多详细信息 构建 Mach-O 文件Xcode 构建设置参考


2
投票

Mach-O 类型(MACH_O_TYPE)

【框架静态与动态】

[Mach-O 格式]

官方页面loader.h中有一些反映。另外

MH_PRELOAD
0x5、
MH_CORE
0x4、
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
    .bundle) -
    loadable bundle
    - 运行时链接。 iOS 现在仅支持
    Testing Bundle target
    ,默认设置是生成
    Loadable bundle

    System
    ->
    Testing Bundle
    ->
    tested binary
    Testing Bundle
    的位置将取决于目标、静态或动态二进制文件...
  • Dynamic Library
    0x6(
    mh_dylib
    .dylib 或无)- 加载/运行时链接。
    • With
      Framework target
      -
      Dynamic Library
      是生成
      Dynamic framework
    • 的默认设置
  • Static Library
    (
    staticlib
    .a) - 链接编译时间(构建时间)。
    • With
      Static Library target
      -
      Static Library
      是生成
      Static library
    • 的默认设置
    • Framework target
      -
      Static Library
      生成
      Static framework
  • Relocatable Object File
    0x1 (
    mh_object
    .o) - 链接编译时间(构建时间)。这是最简单的形式。它是创建可执行、静态或动态格式的基础。可重定位,因为变量和函数没有任何特定地址

使用

otool
来确定二进制是否是动态的
-h
-hv

非常有用
-h     Display the Mach header.
-v     Display verbosely (symbolically) when possible.
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 - 动态库

[词汇]

© www.soinside.com 2019 - 2024. All rights reserved.