Xcode 中构建设置中的 Mach-O 类型是什么?应该设置什么?
它有这些选项“可执行文件”“动态库”“捆绑包”“静态库”“可重定位对象文件”
自从我将其从可执行文件更改为静态库以来,我遇到了错误“Apple Mach-O 链接器错误组”,我的错误消失了,我想知道我更改它可以吗?以及所有这些选项的含义,这样我将来就不会再遇到另一个错误。
了解更多详细信息 构建 Mach-O 文件 和 Xcode 构建设置参考
Mach-O 类型(MACH_O_TYPE)
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 或无)- 加载/运行时链接。
Framework target
- Dynamic Library
是生成 Dynamic framework
Static Library
(staticlib
.a) - 链接编译时间(构建时间)。
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 - 动态库