Jika Anda ingin kode Anda portabel, Anda mungkin harus mencoba sesuatu seperti ini:
namespace {
struct initializer {
initializer() {
std::cout << "Loading the library" << std::endl;
}
~initializer() {
std::cout << "Unloading the library" << std::endl;
}
};
static initializer i;
}
Di C++ di Linux, variabel global akan dibuat secara otomatis segera setelah pustaka dimuat. Jadi itu mungkin cara termudah untuk melakukannya.
Jika Anda memerlukan fungsi arbitrer untuk dipanggil saat pustaka dimuat, gunakan atribut konstruktor untuk GCC:
__attribute__((constructor)) void foo(void) {
printf("library loaded!\n");
}
Fungsi konstruktor dipanggil oleh tautan dinamis saat pustaka dimuat. Ini sebenarnya bagaimana inisialisasi global C++ diimplementasikan.