46 votes

Fonctions exécutées automatiquement lors du chargement des bibliothèques partagées

Lors du chargement des bibliothèques partagées sous Windows, l' LoadLibrary() provoque l' DllMain dans la bibliothèque pour chaque nouveau processus et bibliothèque de threads auxquels s'attache, et pour chaque processus et bibliothèque de threads détachés.

Existe-t-il un mécanisme similaire pour Mac OS X, Linux et éventuellement d'autres systèmes d'exploitation compatibles POSIX ?

6voto

janneb Points 17303

GCC, ainsi que clang AFAIK, prennent en charge les attributs de constructeur et de destructeur de GCC. Pour plus de détails, consultez Comment fonctionne exactement __attribute__((constructor)) ?

3voto

oml Points 93

Pour C++, vous pouvez créer une classe et utiliser son constructeur et son destructeur pour initialiser la bibliothèque.

Après, il vous suffit de définir une variable pour cette classe.

Exemple d'initialisation d'openssl dans la bibliothèque :

 class InitLibrary {
public:
  InitLibrary() {
    CRYPTO_malloc_init(); // Initialize malloc, free, etc for OpenSSL's use
    SSL_library_init(); // Initialize OpenSSL's SSL libraries
    SSL_load_error_strings(); // Load SSL error strings
    ERR_load_BIO_strings(); // Load BIO error strings
    OpenSSL_add_all_algorithms(); // Load all available encryption algorithms
  }

  ~InitLibrary() {
    ERR_remove_state(0);
    CRYPTO_cleanup_all_ex_data();
    ENGINE_cleanup();
  }
};

et n'ajoutez que cette ligne dans le fichier cpp : InitLibrary InitLib;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X