是否有编译器标志表示缺少armv7s架构

时间:2012-09-13 11:37:51

标签: ios xcode compiler-construction linker cpu-architecture

随着iPhone 5和其他armv7s设备的出现,现有的(闭源)第三方框架(如Flurry)存在兼容性问题,这些框架是在没有这种新架构的情况下构建的。

一个选择是等到他们发布一个新版本,但我希望可能有一个编译器标志或我可以在我的Xcode项目中使用的东西,让链接器知道不要期望这个框架的armv7s架构,以及使用armv7代替。有这样的事吗?

2 个答案:

答案 0 :(得分:10)

无法加载不包含目标体系结构的框架。

你可以做的只是发布一个armv7应用程序,直到框架更新。该应用程序仍可在iPhone 5上运行,只是不使用它提供的最新性能优化。

或者,如果您可以在没有新架构的框架的情况下生活,那么您可能会将其弱化。但是,如果在使用框架中的东西的任何地方加载代码,您需要检查代码。

答案 1 :(得分:6)

GCC中曾经有一个链接器标志allow_sub_type_mismatches,它可以让您在链接库中混合和匹配ARM体系结构版本,但它们似乎已经在最新版本的Xcode中取消了它。

然而,这实际上可能以不同的方式被攻击;制作框架的副本,查看其内容,在十六进制编辑器中打开其中的实际代码库文件,并执行以下全部替换:

CEFAEDFE 0C000000 09000000

CEFAEDFE 0C000000 0B000000

你基本上做的是更改每个代码对象内部的标头以将其标识为ARMv7而不是ARMv7代码 - 指令集向后兼容(或者似乎是,无论如何),所以它应该运行良好甚至虽然我不得不承认,在我们真正有机会在iPhone 5上测试它之前我们不会确定这一点。

无论如何,一旦您修改了框架,只需将两个版本添加到项目中,并链接到每个体系结构中的相应版本。您也可以使用lipo合并修改后的原始库来创建新的单一框架。