Pokud chcete, aby byl váš kód přenosný, měli byste pravděpodobně zkusit něco takového:
namespace {
struct initializer {
initializer() {
std::cout << "Loading the library" << std::endl;
}
~initializer() {
std::cout << "Unloading the library" << std::endl;
}
};
static initializer i;
}
V C++ pod Linuxem se globální proměnné vytvoří automaticky, jakmile se knihovna načte. Takže to je pravděpodobně nejjednodušší způsob.
Pokud potřebujete, aby se při načítání knihovny zavolala libovolná funkce, použijte atribut konstruktoru pro GCC:
__attribute__((constructor)) void foo(void) {
printf("library loaded!\n");
}
Funkce konstruktoru jsou volány dynamickým linkerem při načítání knihovny. Takto je ve skutečnosti implementována globální inicializace C++.