是否有一个编译器标记来指示缺乏armv7s架构(Is there a compiler flag t

2019-06-28 08:18发布

随着iPhone 5和其他armv7s设备现在出现,存在与现有的(闭源)的兼容性问题第三方框架如乱舞其没有该较新的体系结构建。

一种选择是等待,直到他们发布一个新的版本,但我希望有可能是一个编译器标志或东西,我可以在我的Xcode项目中使用,它可以让链接器知道不能指望从这个框架armv7s架构,并且使用的ARMv7代替。 请问像这样的东西存在吗?

Answer 1:

这不是可以加载一个框架,其中不包括目标架构。

你可以做的是只船一ARMv7的应用程序,直到框架被更新。 该应用程序仍然会在iPhone 5的工作,只是不使用它提供了最新的性能优化。

或者,如果您可以在没有框架,住在新的架构你可以薄弱环节吧。 但是,那么你需要在你的代码到处都用的东西,从框架,以检查它是否被加载。



Answer 2:

曾经有在GCC,链接器标志allow_sub_type_mismatches ,这将让你混合和链接库匹配ARM架构的版本,但他们似乎已经采取了远在最新版本的Xcode。

然而,这实际上可以以不同的方式砍死左右; 使框架,查看其内容,在十六进制编辑器打开它的内部实际的代码库文件,并执行以下操作更换所有的副本:

CEFAEDFE 0C000000 09000000

CEFAEDFE 0C000000 0B000000

什么你基本上做的是改变每个编码对象内部的头部将其标识为ARMv7s而非ARMv7的代码 - 指令集是向后兼容的(或者看起来是,无论如何),所以它应该与这个黑客运行,即使罚款虽然我不得不承认,我们不会知道,对于某些直到我们真正有机会来测试它在iPhone 5。

无论如何,一旦你已经修改了该框架,只需两个版本到项目,并链接到每个架构一个合适的。 您可能还能够通过使用创建一个新的单一框架lipo合并修改,原来的图书馆。



文章来源: Is there a compiler flag to indicate lack of armv7s architecture