我可以构建 Armv7 + Arm64 架构,但不能单独构建 Armv7

Posted

技术标签:

【中文标题】我可以构建 Armv7 + Arm64 架构,但不能单独构建 Armv7【英文标题】:I can build Armv7 + Arm64 architecture but not Armv7 alone 【发布时间】:2015-02-08 15:24:47 【问题描述】:

使用 Armv7 + Arm64 架构构建统一的 API 应用程序(迁移后)工作正常,该应用程序在 iPhone 5 和 iPhone 6 上运行良好。但由于架构不兼容,无法在 iPhone 4S 上运行。

尝试仅使用 Armv7 架构构建它失败了。 这些是我得到的错误:

错误 MT5210:本机链接失败,未定义符号:_res_9_init。请确认所有必要的框架都已被引用,并且本地库已正确链接。(MT5210)

错误 MT5210:本机链接失败,未定义符号:_xmlDocGetRootElement。请确认所有必要的框架都已被引用,并且本地库已正确链接。(MT5210)

还有 6 个这样的... 如何仅在 Armv7 上编译?

【问题讨论】:

请将 '-v -v -v -v' 添加到项目的 ios 构建选项中的附加 mtouch 参数中,并粘贴好和坏的构建日志。 rumblephonebook.azurewebsites.net/goodBuild.txt rumblephonebook.azurewebsites.net/badBuild.txt 似乎是 Oyala 绑定中的问题。但是为什么Armv7+Arm64可以,Armv7不行呢? 【参考方案1】:

解决办法: 由于 Oyala 绑定 linkWith 文件中缺少链接标志,Armv7 构建失败。 修复标志(LinkerFlags="-lstdc++ -lz -lxml2 -lresolv")后,Armv7 构建完成,没有错误。

它仍然没有解释为什么 Armv7+Arm64(胖版本)没有失败。 它只是跳过了 Oyala 构建。 这可能是一个 Xamarin 错误。

【讨论】:

【参考方案2】:

这看起来像是 Xamarin.iOS 中的一个错误,它不包括胖 (armv7+arm64) 构建中的某些库,而那些(有问题的)库会导致仅 armv7 构建中的问题。

也就是说,我相信通过将-gcc_flags -lxml 添加到项目的 iOS 构建选项中的其他 mtouch 参数中,构建问题将得到解决。

此外,我建议提交一个错误 (http://bugzilla.xamarin.com),以了解胖与瘦构建的差异。

【讨论】:

非常感谢。我会这样做并为您提供有关标志解决方案的最新信息。 添加 -gcc_flags -lxml 后,我得到:错误 MT5309:本机链接错误:找不到 -lxml (MT5309) (Rumble.Touch) 的库 错误 MT5201:本机链接失败。请查看构建日志和提供给 gcc 的用户标志:-lxml (MT5201) (Rumble.Touch) 错误 MT5202:本机链接失败。请查看构建日志。 (MT5202) (Rumble.Touch)

以上是关于我可以构建 Armv7 + Arm64 架构,但不能单独构建 Armv7的主要内容,如果未能解决你的问题,请参考以下文章

Xcode Swift文件是为arm64构建的,它不是被链接的架构(armv7)

XCode - 架构 armv7 arm64 的未定义符号

docker如何构建多架构(arm64, x86_64, armv7)容器镜像?

为 armv7、armv7s、arm64、i386 和通用构建 ffmpeg iOS 库

没有要编译的架构 (ARCHS=i386, VALID_ARCHS=arm64 armv7 armv7s)

“包含 arm64 的应用程序必须包含 armv7 和 armv7s 架构”应用程序加载器中的错误