在厌倦了无数Match-O linker error之后,我想知道这个东西是什么意思。我想知道这些东西背后的概念,而不是反复试验的解决方案。具体来说,我想知道之间的区别:
- 可执行
- 动态库
- 捆绑
- 静态库
- 可重定位目标文件
这些是当我点击链接部分的 Mach-O 类型设置时出现的选项。一些小的定义或一些指向适当内容的链接也可以。
最佳答案
Mach-O ,Mach object file format 的缩写,是一种用于可执行文件、目标代码、共享库、动态加载代码和核心转储的文件格式。对于 unix 用户,这类似于 a.out
但有改进。这是 Mac OS X 和 iPhone OS 库中用于可执行文件的格式。
如您所知,iOS 设备(iPhone、iPad 等)具有不同的架构 ARMv6(iPhone 2G + 3G、iPod Touch)和 ARMv7(iPhone 3GS、iPod Touch 2G + 3G),但 Xcode 中使用的模拟器主要在 i386 上运行平台。这意味着库客户端必须为模拟器和设备设置单独的目标。单独的目标重复大部分信息,并且仅在包含的静态库中有所不同。因此,如果您收到 Mach-O 链接器错误,这意味着 xcode 在链接到该目标设备的库之一时遇到问题;因此编译失败。
现在你的定义 -
- 可执行文件——已编译的机器目标程序准备以二进制格式运行。
- 动态库 - 在运行时链接 - 引用动态库的程序将在启动时(或按需)加载并链接到库。
- bundle - 和 bundle 标识符让 iOS 和 OSX 识别您应用的任何更新。它使其在应用程序中具有独特的存在感。
- 静态库 - 文件在构建时链接。代码被复制到可执行文件中。库中未被您的程序引用的代码将被删除。只有静态库的程序在运行时没有任何依赖关系。
- 可重定位目标文件 - 是动态库的另一种说法。链接动态库时,会根据库在内存中的加载位置计算其中包含的函数的地址。它们是“可重定位的”,因为所包含函数的地址在链接时未确定。 (在静态库中,地址是在链接时计算的。)
关于objective-c - 在 Xcode 项目目标build设置中,什么是 Mach-O 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13082149/