我应该在我的 iOS Objective-C 项目中使用什么 Mach-O 类型?
What is Mach-O type should I use it in my iOS Objective-C project?
Xcode 中构建设置中的 Mach-O 类型是什么?应该设置什么?
它有这些选项 "Executable" "Dynamic Library" "Bundle" "Static Library" "Relocatable Object File"
我有一个错误 "Apple Mach-O Linker Error Group" 自从我将它从可执行文件更改为静态库后我的错误就消失了,我想知道我是否可以更改它?以及所有这些选项的含义,这样我以后就不会再遇到其他错误了。
Mach-O 型
Official page which has some reflection in 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 或 none)- Load/run 时间链接。
- 使用
Framework target
- Dynamic Library
是生成 Dynamic framework
的默认设置
Static Library
(staticlib
.a) - 编译时间(build time)链接。
- 使用
Static Library target
- Static Library
是生成 Static library
的默认设置
- 用
Framework target
-Static Library
生成一个Static framework
Relocatable Object File
0x1 (mh_object
.o) - 编译时间(build time)链接。这是最简单的形式。它是创建可执行、静态或动态格式的基础。可重定位,因为变量和函数没有任何特定地址
使用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]
Xcode 中构建设置中的 Mach-O 类型是什么?应该设置什么?
它有这些选项 "Executable" "Dynamic Library" "Bundle" "Static Library" "Relocatable Object File"
我有一个错误 "Apple Mach-O Linker Error Group" 自从我将它从可执行文件更改为静态库后我的错误就消失了,我想知道我是否可以更改它?以及所有这些选项的含义,这样我以后就不会再遇到其他错误了。
Mach-O 型
Official page which has some reflection in 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 或 none)- Load/run 时间链接。- 使用
Framework target
-Dynamic Library
是生成Dynamic framework
的默认设置
- 使用
Static Library
(staticlib
.a) - 编译时间(build time)链接。- 使用
Static Library target
-Static Library
是生成Static library
的默认设置
- 用
Framework target
-Static Library
生成一个Static framework
- 使用
Relocatable Object File
0x1 (mh_object
.o) - 编译时间(build time)链接。这是最简单的形式。它是创建可执行、静态或动态格式的基础。可重定位,因为变量和函数没有任何特定地址
使用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]