当我尝试解决静态链接中的问题时,我遇到了一些问题_GLOBAL__sub_I_
符号名称前面的前缀。尽管我使用过,但它以这种形式出现nm --demangle(-C)
.
我偶然发现了这个答案(如何找到全局静态初始化 https://stackoverflow.com/questions/28101243/how-to-find-global-static-initializations)。查看我的源代码,它确实看起来像是全局静态变量的初始化。
我想知道的是,我在哪里可以找到有关 __sub_ 和其他损坏名称的更多信息,例如__cxxabiv1
?
我正在得到一个_GLOBAL__sub_I_
我需要删除的符号中的前缀。
然后发现了这个:https://llvm.org/docs/FAQ.html https://llvm.org/docs/FAQ.html:
这是什么llvm.global_ctors
and _GLOBAL__I_a...
当我发生的事情#include <iostream>
?
如果你#include<iostream>
标头转换为 C++ 翻译单元,该文件可能会使用std::cin/std::cout/…
全局对象。但是,C++ 不保证不同翻译单元中的静态对象之间的初始化顺序,因此,例如,如果 .cpp 文件中的静态 ctor/dtor 使用 std::cout,则该对象不一定会在使用之前自动初始化。
为了使 std::cout 和朋友在这些场景中正常工作,我们使用的 STL 声明了一个静态对象,该对象在每个翻译单元中创建,其中包括<iostream>
。该对象有一个静态构造函数和析构函数,用于在全局 iostream 对象可能在文件中使用之前对其进行初始化和销毁。您在 .ll 文件中看到的代码对应于构造函数和析构函数注册代码。
我将函数移到翻译单元中而没有<fstream>
,现在导出符号时无需_GLOBAL__sub_I_
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)