我可以为 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/