А>Столкнулся с проблемой которую самостоятельно уже не могу решить.

А>Проблема:

А>Есть статический экземляр класса, задача которого инициализировать данные при загрузке программы, пока файл в котором обьявлен этот экземпляр находится непосредственно в проекте, все работает на ура, но как только я этот файл поместил в статическую библиотеку все перестало работать, вопрос как заставить работать данный вариант.

Насколько я понимаю, ситуация примерно следующая:

library private header (скажем, InitLib.h)
class InitLib
{
  // ...
};


library source (скажем, library.cpp)
#include "InitLib.h"

static InitLib init_lib;


library public header (скажем, library.h)
// как и должно быть, никакого упоминания init_lib


application source
#include "library.h"

// ...


Действительно, файл library.cpp не будет включен при компоновке программы. Наша задача сделать так, чтобы компоновщик посчитал library.cpp "нужным". Один из распространенных способов — добавить для этого в library.h специальный "липовый" объект. Например, так:

library public header (скажем, library.h)
// как и должно быть, никакого упоминания init_lib

class LinkLib
{
public:
  LinkLib(); // определять обязательно в library.cpp
};

const LinkLib link_lib;


library source (скажем, library.cpp)
#include "InitLib.h"

static InitLib init_lib;

LinkLib::LinkLib()
{
  // пустой -- нужен только для того, чтобы library.obj был скомпонован с
  // любой программой, включающей library.h
}
Автор: Павел Кузнецов    Оценить