Инициализация глобальных переменных в библиотеке
От: Simbio  
Дата: 17.02.06 20:18
Оценка:
Здравствуйте,моя прогрмма состоит из двух проектов — статической библиотеки (.lib) и графической части, котоорая связывается с этой библиотекой.
В библиотеке есть код следующего вида:

Foo1.cpp :
Foo1Proxy g_foo1Proxy;

Foo1Proxy::Foo1Proxy()
{
DriverFactory::instance().registerDriverProxy( this );
}

Foo2.cpp
Foo2Proxy g_foo2Proxy;

Foo2Proxy::Foo2Proxy()
{
DriverFactory::instance().registerDriverProxy( this );
}

Foo3.cpp
...

Я ожидал, что будет создано по одному глобальному объекту каждого класса, но вместо этого создается только g_foo2Proxy.
Программу компилирую в Visual C++ 7.1 с отключенной оптимизацией (Debug). Кроме определения, эти глобальные переменные нигде больше не используются, и служат для регистрации класса FooXProxy в DriverFactory.

Хотелось бы понять, почему так происходит, и более общий вопрос, когда и как создаются глобальные объекты в статических библиотеках?
Re: Инициализация глобальных переменных в библиотеке
От: _Winnie Россия C++.freerun
Дата: 18.02.06 03:36
Оценка:
Здравствуйте, Simbio, Вы писали:

S>Здравствуйте,моя прогрмма состоит из двух проектов — статической библиотеки (.lib) и графической части, котоорая связывается с этой библиотекой.

S>В библиотеке есть код следующего вида:

S>Я ожидал, что будет создано по одному глобальному объекту каждого класса, но вместо этого создается только g_foo2Proxy.

S>Программу компилирую в Visual C++ 7.1 с отключенной оптимизацией (Debug). Кроме определения, эти глобальные переменные нигде больше не используются, и служат для регистрации класса FooXProxy в DriverFactory.

S>Хотелось бы понять, почему так происходит, и более общий вопрос, когда и как создаются глобальные объекты в статических библиотеках?

К сожалению, способа автоматической объектов из .lib регистрации неизвестно.
Вызывай функцию-пустышку для какждого такого .cpp
Правильно работающая программа — просто частный случай Undefined Behavior
Re: Инициализация глобальных переменных в библиотеке
От: BitField Украина http://lazy-bitfield.blogspot.com
Дата: 18.02.06 11:20
Оценка:
Здравствуйте, Simbio, Вы писали:

S>Я ожидал, что будет создано по одному глобальному объекту каждого класса, но вместо этого создается только g_foo2Proxy.

S>Программу компилирую в Visual C++ 7.1 с отключенной оптимизацией (Debug). Кроме определения, эти глобальные переменные нигде больше не используются, и служат для регистрации класса FooXProxy в DriverFactory.

S>Хотелось бы понять, почему так происходит, и более общий вопрос, когда и как создаются глобальные объекты в статических библиотеках?



http://rsdn.ru/Forum/Message.aspx?mid=97459&all=1
Автор:
Дата: 09.09.02
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.