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

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

如果没有,我希望获得建议,以在不支持SSE4.2的旧CPU上运行我的应用程序,而在支持它的CPU上利用SSE4.2。

请注意,如果这样的话,我的目标是Mac AppStore。
我在Xcode 4.5中使用Clang。

最佳答案

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

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

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

使用第一种方法,您不必担心加载库和连接所有函数的麻烦,但是您将始终加载不会执行的额外代码,并且在每次调用这些函数之前都必须检查变量。 。使用第二种方法,您可以简单地调用函数而无需每次都进行任何检查,但是与每次简单地比较变量相比,加载库和连接所有函数的工作量更大。

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

10-11 07:08