Échec de dlclose : une interaction étrange entre les bibliothèques Rust et C++

2025-08-30

Cet article relate une histoire de débogage déconcertante : lors de l’utilisation de `dlclose` pour décharger une bibliothèque dynamique, la bibliothèque libA a été déchargée correctement, mais sa dépendance, libB, est restée inopinément en mémoire. L’enquête a révélé que la cause première était les destructeurs de stockage local de thread (TLS) enregistrés dans libB. Comme les threads ne se sont pas terminés, ces destructeurs ne se sont pas exécutés, empêchant le déchargement de libB. L’activation de la journalisation a résolu le problème, car la bibliothèque de journalisation utilisait également le TLS, ce qui a empêché le déchargement de libA et a ainsi maintenu un état partagé cohérent entre libA et libB. Ce cas souligne l’importance de comprendre le comportement de `dlclose` et l’impact des destructeurs TLS, et recommande l’utilisation de la variable d’environnement `LD_DEBUG` pour déboguer les bibliothèques de liaison dynamique.

Lire plus
Développement liaison dynamique