gpt4 book ai didi

c++ - __gxx_personality_v0 有什么用?

转载 作者:IT老高 更新时间:2023-10-28 11:57:06 33 4
gpt4 key购买 nike

这是来自操作系统开发网站的二手问题,但它让我很好奇,因为我在任何地方都找不到合适的解释。

使用 gcc 编译和链接独立 C++ 程序时,有时会出现如下链接器错误:

out/kernel.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'

这显然是因为该符号是在 libstdc++ 中定义的,而独立环境中缺少该符号。解决这个问题只需要在某个地方定义这个符号:

void *__gxx_personality_v0;

这很好,但我不喜欢神奇地起作用的东西......所以问题是,这个符号的目的是什么?

最佳答案

它用于堆栈展开表,例如,您可以在 my answer to another question 的汇编输出中看到它。 .如该答案所述,其用途由 Itanium C++ ABI 定义。 , 它被称为 Personality Routine .

通过将其定义为全局 NULL void 指针来“工作”的原因可能是因为没有抛出异常。当某些东西试图抛出异常时,你会发现它行为不端。

当然,如果没有使用异常,你可以使用 -fno-exceptions 禁用它们(如果没有使用 RTTI,你也可以添加 -fno-rtti)。如果您正在使用它们,则必须(正如其他答案已经指出的那样)与 g++ 而不是 gcc 链接,这将添加 -lstdc++你。

关于c++ - __gxx_personality_v0 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/329059/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com