Si desea que su código sea portátil, probablemente debería probar algo como esto:
namespace {
struct initializer {
initializer() {
std::cout << "Loading the library" << std::endl;
}
~initializer() {
std::cout << "Unloading the library" << std::endl;
}
};
static initializer i;
}
En C++ bajo Linux, las variables globales se construirán automáticamente tan pronto como se cargue la biblioteca. Así que esa es probablemente la forma más fácil de hacerlo.
Si necesita llamar a una función arbitraria cuando se carga la biblioteca, use el atributo constructor para GCC:
__attribute__((constructor)) void foo(void) {
printf("library loaded!\n");
}
Las funciones de constructor son llamadas por el enlazador dinámico cuando se carga una biblioteca. Así es como se implementa la inicialización global de C++.