首页  >  文章  >  后端开发  >  为什么 C 编译中需要 `__gxx_personality_v0`,它与异常处理有何关系?

为什么 C 编译中需要 `__gxx_personality_v0`,它与异常处理有何关系?

Linda Hamilton
Linda Hamilton原创
2024-11-18 02:43:01456浏览

Why is `__gxx_personality_v0` Needed in C   Compilation, and How Does it Relate to Exception Handling?

揭示 __gxx_personality_v0 的用途

使用 gcc 编译独立 C 程序时,可能会遇到与未定义符号相关的链接器错误“__gxx_个性_v0。”该符号位于 libstdc 中,在独立环境中不存在。添加定义“void *__gxx_personality_v0;”解决了问题,但理解其目的仍然至关重要。

__gxx_personality_v0 在堆栈展开表中起着关键作用。这些表在汇编输出中可见,并作为异常处理的基础。根据 Itanium C ABI 的定义,__gxx_personality_v0 充当 Personality Routine,这是异常展开中的关键组件。

其解析为全局 NULL void 指针背后的“魔力”源于不存在异常抛出。如果发生异常,符号的行为就会变得明显。为了避免此类问题,在使用异常时,需要使用“-fno-exceptions”禁用异常或与 g(自动添加“-lstdc”)链接。

以上是为什么 C 编译中需要 `__gxx_personality_v0`,它与异常处理有何关系?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn