Конструктор глобального статического члена не вызывается при компиляции с rvct

Ну, это сложно объяснить. Я собираю статическую библиотеку, которая имеет заголовок, который выглядит примерно так:

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 ответ

Он был бы вызван, если бы он был конструктором статического объекта, но, поскольку это всего лишь статический метод, почему вызов к нему генерируется автоматически?

Другие вопросы по тегам