con*_*are 7 compiler-construction xcode linker cpu-architecture ios
随着iPhone 5和其他armv7s设备的出现,现有的(闭源)第三方框架(如Flurry)存在兼容性问题,这些框架是在没有这种新架构的情况下构建的.
一种选择是等到他们发布一个新版本,但我希望可能有一个编译器标志或我可以在我的Xcode项目中使用的东西,让链接器知道不要期望这个框架的armv7s架构,并使用armv7代替.有这样的事吗?
cat*_*lan 10
加载不包含目标体系结构的框架是不可能的.
您可以做的只是在框架更新之前发布armv7应用程序.该应用程序仍可在iPhone 5上运行,只是不使用它提供的最新性能优化.
或者,如果您可以在没有新架构的框架的情况下生活,那么您可能会将其弱化.但是,如果在使用框架中的东西的任何地方加载代码,那么您需要检查代码.
在GCC中曾经有一个链接器标志allow_sub_type_mismatches
,它可以让您在链接库中混合和匹配ARM体系结构版本,但它们似乎已经在最新版本的Xcode中取消了它.
然而,这实际上可以以不同的方式被攻击; 制作一个框架的副本,查看其内容,在十六进制编辑器中打开其中的实际代码库文件,并执行以下全部替换:
CEFAEDFE 0C000000 09000000
Run Code Online (Sandbox Code Playgroud)
至
CEFAEDFE 0C000000 0B000000
Run Code Online (Sandbox Code Playgroud)
您基本上做的是更改每个代码对象内部的标头以将其标识为ARMv7而不是ARMv7代码 - 指令集向后兼容(或者似乎是,无论如何),因此即使使用此hack它也应该运行正常虽然我不得不承认,在我们真正有机会在iPhone 5上测试它之前,我们不会确定这一点.
无论如何,一旦您修改了框架,只需将两个版本添加到项目中,并链接到每个体系结构中的相应版本.您也可以通过使用lipo
合并修改后的原始库来创建新的单个框架.
归档时间: |
|
查看次数: |
8750 次 |
最近记录: |