Linker dso句柄在哪里定义?

Linker dso句柄在哪里定义?,linker,llvm,libstdc++,Linker,Llvm,Libstdc++,我在试图编译程序时遇到一个未解决的符号错误,它抱怨无法找到\uuuDSO\uHandle。此函数通常在哪个库中定义 以下是libstdc++.so.6上的nm的结果吗 我试图链接到它,但错误仍然发生 nm libstdc++.so.6 | grep dso 00000000002fc480 d __dso_handle \uu dso\u handle是一个“防护装置”,即 实际上,你应该停止在这里阅读。如果您试图通过弄乱\uDSO\uHandle来破坏对象标识,则可能出现了严重错误 然而,既

我在试图编译程序时遇到一个未解决的符号错误,它抱怨无法找到
\uuuDSO\uHandle
。此函数通常在哪个库中定义

以下是libstdc++.so.6上的
nm的结果吗

我试图链接到它,但错误仍然发生

nm libstdc++.so.6 | grep dso
00000000002fc480 d __dso_handle

\uu dso\u handle
是一个“防护装置”,即

实际上,你应该停止在这里阅读。如果您试图通过弄乱
\uDSO\uHandle
来破坏对象标识,则可能出现了严重错误

然而,既然你问它的定义是什么:答案很复杂。若要对其定义位置(对于GCC),在C++文件中使用 IoSturi,然后,执行<代码> ExtIn INTH.dSoSub句柄;代码>。由于类型冲突,应该显示声明的位置(有关源,请参阅)

有时候是这样

有时,它是由编译器安装的“运行时”定义/提供的(实际上,CRT通常只是一堆二进制头/入口点管理代码,以及一些出口保护/处理程序)。在GCC中(不确定其他编译器是否支持此功能;如果支持,将在其源代码中提供):

通常,它在stdlib中定义为:

进一步阅读:


    • 我遇到了这个问题。以下是可靠产生故障的条件:

    • 没有C/C++标准库的g++链接:
      -nostlib
      (典型的小型嵌入式场景)
    • 定义静态分配的标准库对象;具体到我的情况是
      std::vector
      。以前这是静态分配的,没有任何问题。显然,并非所有静态分配的对象都会导致问题
    • 请注意,我没有使用任何类型的共享库
    • 正在使用中
    • 如果这是您的用例,那么只需将命令行选项添加到编译/链接命令行:
      -fn不使用cxa atexit

      这里有一个很好的链接

      页面中似乎有输入错误,但我不知道要联系谁来确认:

      调用对象的构造函数-析构函数后,GCC会自动调用函数

      我认为这应该是“一旦调用了所有析构函数,GCC就会调用函数”


      确认这一点的一种方法是实现前面提到的
      \uucxa\u atexit
      功能,然后单步执行程序并查看调用它的位置。总有一天我会试试的,但现在不行。

      你的第一个链接上似乎有链接损坏。