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

问题描述 投票:0回答:2

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

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

ios xcode linker cpu-architecture
2个回答
10
投票

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

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

或者,如果您可以在新架构上没有框架,那么您可以弱链接它。但是,您需要检查您的代码是否已在您使用框架中的内容的任何地方加载。


6
投票

GCC 中曾经有一个链接器标志,

allow_sub_type_mismatches
,它可以让您在链接库中混合和匹配 ARM 架构版本,但他们似乎在最新版本的 Xcode 中取消了这一功能。

然而,这实际上可以通过不同的方式进行破解;复制框架,查看其内容,在十六进制编辑器中打开其中的实际代码库文件,然后执行以下操作全部替换:

CEFAEDFE 0C000000 09000000

CEFAEDFE 0C000000 0B000000

您基本上所做的就是更改每个代码对象内部的标头,以将其标识为 ARMv7 而不是 ARMv7 代码 - 指令集是向后兼容的(或者看起来是,无论如何),所以即使这样它也应该运行良好黑客攻击,但我不得不承认,直到我们真正有机会在 iPhone 5 上测试它之前,我们无法确定这一点。

无论如何,一旦您修改了框架,只需将两个版本添加到您的项目中,并链接到每个架构中适当的版本即可。您还可以使用

lipo
合并修改后的库和原始库来创建新的单一框架。

© www.soinside.com 2019 - 2024. All rights reserved.