引用构造函数时,链接失败

时间:2018-08-07 16:23:58

标签: c++ gcc ld

我有两个源文件,其中一个源文件是我自己的类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

1 个答案:

答案 0 :(得分:0)

要执行静态对象的构造函数中先前的代码,请将其移至init()函数中,然后从构造函数(以及您需要的其他任何地方)中调用它。