使用rvct编译时不调用全局静态成员的构造函数

时间:2011-02-05 17:56:12

标签: c++ arm static-members realview

嗯,这有点复杂,无法解释。 我正在编译一个静态库,其头部看起来与此类似:

class Foo{
    static int Goo(){
        DoSomethingExciting();
        return 0;       
    }
    static int fooMember;
}

在Cpp中我有fooMember的初始化:

int Foo::fooMember = Foo::Goo();

将静态库链接到我正在编写的应用程序时,不会调用应该调用的Goo方法。确切地说,根本不调用DoSomethingExciting()方法。我在应用程序中使用Foo类。我放线时:

int Foo::fooMember = Foo::Goo();

在我的应用程序中的cpp中(当然我从静态库中删除了相同的行),我看到调用了Goo()。

我不确定如何命名我遇到的问题,我想这是全局静态成员初始化或类似的问题。

我正在使用RVCT进行编译。在Visual Studio中编译相同的场景时,一切都很好。我猜测RVCT的行为有所不同,我可能需要添加一些编译标志。

是的,我也尝试在我编译的可执行文件上使用反编译器,但我没有看到对Goo()的任何调用,尽管我确实看到该方法在文件中。

我希望我对我的问题很清楚:)

提前致谢...

1 个答案:

答案 0 :(得分:0)

如果它是静态对象的构造函数,它将被调用,但由于它只是一个静态方法,为什么会自动生成对它的调用?