我有两个源文件,其中一个源文件是我自己的类foo中的静态成员。当我将其编译为目标文件时,编译器会生成一个.ctors节,在其中,一个调用构造函数的函数将其命名为_GLOBAL__SUB_I_FOO。
在第二个源文件中,我尝试自己调用此构造函数:
int _GLOBAL__SUB_I_FOO();
int bar(){
_GLOBAL__SUB_I_FOO();
}
当我链接这两个对象时,第二个文件中有对_GLOBAL__SUB_I_FOO的未定义引用。 当我使用--relocatable链接查看发生了什么问题时,可以看到原始构造函数已重命名为_GLOBAL__SUB_I_FOO_0以避免“冲突”(这是有意的)。我该如何解决? 我正在使用gcc 7.3.0
答案 0 :(得分:0)
要执行静态对象的构造函数中先前的代码,请将其移至init()
函数中,然后从构造函数(以及您需要的其他任何地方)中调用它。