Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: artiom_kh от Ноябрь 15, 2011, 17:52



Название: Shared dll's
Отправлено: artiom_kh от Ноябрь 15, 2011, 17:52
Добрый день! Есть некий класс синглтона:
Код
C++ (Qt)
/** Singleton pattern with eternal object. The order of using in derives same as in the CSppRefsSingleton. */
template < typename T > class LongLiveSingleton
{
public:
 /** @Returns the instance of object. Object will be constructed in the first call of this method.*/
 static T& getInstance( void )
 {
   static T theSingleInstance; // //class T always has a default constructor
   return theSingleInstance;
 }
protected:
 LongLiveSingleton( void ) {}
 virtual ~LongLiveSingleton( void ) {}
private:
 LongLiveSingleton( const LongLiveSingleton& ) {}
 LongLiveSingleton& operator = ( const LongLiveSingleton& ) { return *this; }
};
 

от него наследуем класс:
Код
C++ (Qt)
class BASE_LIB_EXPORT XmlBuilder : public LongLiveSingleton < XmlBuilder >
{
protected:
 XmlBuilder( void ) {}
 ~XmlBuilder( void ) {}
};
который расположен в некой т.н. "базовой" библиотеке и соответственно является экспортируемым:
Код
C++ (Qt)
#ifdef BASE_LIB
# define BASE_LIB_EXPORT Q_DECL_EXPORT
#else
# define BASE_LIB_EXPORT Q_DECL_IMPORT
#endif
 
Данная "базовая" библиотека юзается другими библиотеками а также основным (exe) исполнимым модулем при помощи неявной загрузки. При сборке в MSVC (2010) всё ок, конструктор и деструктор XmlBuilder вызывается ОДИН раз, при сборке в Qt Creator (minGW) возникают проблемы - вызовы идут при загрузке каждой библиотеки, т.е. синглтон вроде уже и не синглтон совсем получается. Какое лекарство может помочь сей беде?


Название: Re: Shared dll's
Отправлено: Авварон от Ноябрь 16, 2011, 07:08
рискну предположить что ф-ия инлайнится. попробуйте в cpp перенести.


Название: Re: Shared dll's
Отправлено: artiom_kh от Ноябрь 16, 2011, 08:11
рискну предположить что ф-ия инлайнится. попробуйте в cpp перенести.
пробовал, но minGW экспорт шаблонов не поддерживает


Название: Re: Shared dll's
Отправлено: artiom_kh от Ноябрь 16, 2011, 08:48
попробовал так:
Код
C++ (Qt)
static __attribute__ ((noinline)) T& getInstance( void )
но безрезультатно