嗯,这解释起来有点复杂。我正在编译一个静态库,它的头文件看起来类似于:
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() 的任何调用,尽管我确实看到该方法在文件中。
我希望我对我的问题足够清楚:)
提前致谢...