Wenn Sie möchten, dass Ihr Code portabel ist, sollten Sie wahrscheinlich so etwas versuchen:
namespace {
struct initializer {
initializer() {
std::cout << "Loading the library" << std::endl;
}
~initializer() {
std::cout << "Unloading the library" << std::endl;
}
};
static initializer i;
}
In C++ unter Linux werden globale Variablen automatisch erstellt, sobald die Bibliothek geladen wird. Das ist wahrscheinlich der einfachste Weg.
Wenn beim Laden der Bibliothek eine beliebige Funktion aufgerufen werden soll, verwenden Sie das Konstruktorattribut für GCC:
__attribute__((constructor)) void foo(void) {
printf("library loaded!\n");
}
Konstruktorfunktionen werden vom dynamischen Linker aufgerufen, wenn eine Bibliothek geladen wird. Auf diese Weise wird die globale C++-Initialisierung tatsächlich implementiert.