【发布时间】:2014-02-04 16:15:45
【问题描述】:
我拥有的 iOS 模拟器目标的链接器报告以下警告:
ld: warning: too many personality routines for compact unwind to encode
没有给出行号,也没有给出任何其他可操作的信息。谷歌搜索出现了一些Apple open source code,但我没有摸索它。
这是什么意思,我可以做些什么来解决它?
【问题讨论】:
标签: ios-simulator ld
我拥有的 iOS 模拟器目标的链接器报告以下警告:
ld: warning: too many personality routines for compact unwind to encode
没有给出行号,也没有给出任何其他可操作的信息。谷歌搜索出现了一些Apple open source code,但我没有摸索它。
这是什么意思,我可以做些什么来解决它?
【问题讨论】:
标签: ios-simulator ld
我在C++ ABI for Itanium docs 中找到了一些信息,这些信息可以解释这意味着什么。
个性例程是 C++(或其他语言)运行时库中的函数,用作系统展开库和特定语言异常处理语义之间的接口。
推断,这个警告表明你在同一个二进制文件中有太多种类的异常处理,并且至少其中一种可能会失败。事实上,这正是观察到的in this question。
遗憾的是,没有明确的方法可以解决此问题,只有解决方法。您可以取消警告、删除代码、用其他语言重写代码、禁用语言的异常处理以及可能的其他操作。
【讨论】:
如果您遇到带有此警告的异常崩溃,即每个 throw 调用 ::terminate(),解决方法是使用旧的 dwarf 异常处理表。将以下标志添加到构建设置/链接/其他链接器标志:
-Wl,-keep_dwarf_unwind -Wl,-no_compact_unwind
【讨论】:
您可以尝试使用 -Wl,-no_compact_unwind 来消除其他链接器标志设置的警告。我认为它是无害的。
【讨论】:
当我的代码在设备上正确运行时,我尝试在 iOS 模拟器上运行时也遇到了这个问题。就我而言,这不是警告,而是链接器错误。
幸运的是,我记得我在 Embedding LuaJIT 部分下的 instructions of this page 之后为 luajit 添加了两个标志以正确运行:
-pagezero_size 10000 -image_base 100000000
我的猜测是 image_base 地址超出了主机 CPU 的范围。
无论如何,删除这些设置使其在我的配置中起作用。
因此,请转到您的项目设置并查找此类硬连线值(如果不相同)。
希望这会有所帮助,
M
【讨论】: