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
功能,然后单步执行程序并查看调用它的位置。总有一天我会试试的,但现在不行。你的第一个链接上似乎有链接损坏。