xcode - 适用于不同 SSE 版本的通用二进制文件

标签 xcode sse universal-binary

我可以为 Mac OS X 创建一个通用二进制文件,其中包含我的应用程序的两个版本,一个是使用 SSE4.2 编译的,另一个是使用 SSE3 编译的?

在这种情况下,我会为支持 SSE4.2 的 CPU 自动加载使用 SSE4.2 编译的版本。

如果不是,我想获得在不支持 SSE4.2 的旧 CPU 上运行我的应用程序的建议,但在支持它的 CPU 上使用 SSE4.2。

请注意,我的目标是 Mac AppStore(如果有的话)。 我将 Clang 与 Xcode 4.5 结合使用。

最佳答案

Mac OS X 使用的 Mach-O 格式不支持此格式。该格式允许针对不同体系结构的二进制文件。有一个 subtype 字段,但只定义了不同代处理器的值,而不是它们的能力。

有几种方法可以解决这个问题。一种方法是使用不同的函数名称将 SSE4.2 和旧处理器的代码内置到同一个二进制文件中。您的代码将确定是否支持 SSE4.2,然后调用正确的函数。

另一种选择是构建两个库,一个带有 SSE4.2,一个没有,并将它们都包含在您的应用程序包中,但不链接到它们。首次加载时,您的代码将确定是否支持 SSE4.2,然后加载正确的库。

使用第一种方法,您不必担心加载库和连接所有函数,但您总是会加载不会执行的额外代码,并且您必须在每个函数之前检查变量那些函数调用。使用第二种方法,您可以简单地调用函数,而无需每次都检查任何内容,但加载库并连接所有函数比每次简单地比较变量需要更多工作。

关于xcode - 适用于不同 SSE 版本的通用二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12556658/

相关文章:

linux - 使用 SSE 指令的 Memcpy

ios - Swift 2.2 AnyObject 类型

c++ - 寻找非立即移位值的 sse 128 移位操作

assembly - SIMD minmag 和 maxmag

ios - 如何在 M1 mac 上构建一个支持 Intel mac 上的 iOS 模拟器的静态库?

iphone - 为armv6和armv7构建iPhone静态库,其中包括另一个静态库

macos - 在 MAC 上的 C 程序运行时检查 CPU 类型

ios - 如何防止嵌入导航 Controller 的 View Controller 中的自动旋转?

ios - Xcode 看不到我的苹果电视

xcode - 为什么编译XCode项目可与Apple-(B)uild一起使用,而无法与Apple-(U)nit测试一起编译?