Fallo en dlclose: Una interacción extraña entre bibliotecas Rust y C++

2025-08-30

Esta publicación relata una historia de depuración desconcertante: al usar `dlclose` para descargar una biblioteca dinámica, la libA se descargó correctamente, pero su dependencia, libB, permaneció inesperadamente en la memoria. La investigación reveló que la causa raíz eran los destructores de almacenamiento local de subprocesos (TLS) registrados en libB. Como los subprocesos no terminaron, estos destructores no se ejecutaron, impidiendo que libB se descargara. Habilitar el registro resolvió el problema porque la biblioteca de registro también usaba TLS, evitando que libA se descargara y, por lo tanto, manteniendo el estado compartido consistente entre libA y libB. Este caso destaca la importancia de comprender el comportamiento de `dlclose` y el impacto de los destructores TLS, recomendando el uso de la variable de entorno `LD_DEBUG` para depurar bibliotecas de enlace dinámico.

Desarrollo enlace dinámico