LIBRERÍAS DINÁMICAS
• ¿Quéson las librerías dinámicas?
• ¿En qué se diferencian de las librerías estáticas?
• ¿Cuáles son sus ventajas e inconvenientes?
3
USANDO LIBRERÍAS DINÁMICAS
1.En tiempo de compilación
• g++ -o executable main.o -lsharedLib.so
2. En tiempo de ejecución
• Windows: LoadLibrary y GetProcAddress
• Unix: dlopen y dlsym
15
USANDO LIBRERÍAS DINÁMICAS
17
¿Paraqué sirve cargarlas en tiempo de ejecución?
Para cargar librerías que no se conocen en tiempo
de compilación y poder extender la aplicación
Plugins y add-ons
Cambiar el comportamiento sin cerrar la aplicación
Sólo cargar la librería cuando se necesite
¿DÓNDE BUSCA LASLIBRERÍAS
EN TIEMPO DE EJECUCIÓN?
19
Unix - Linux y macOS
1. Directorios del rpath
2. LD_LIBRARY_PATH (Linux) y DYLD_LIBRARY_PATH
(macOS)
3. Directorios del system search path: /etc/ld.so.conf y
/lib (Linux), /usr/lib, /usr/local/lib, etc
Windows
1. Directorio del ejecutable
2. Directorio del sistema: C:WindowsSystem32
3. Directorio de Windows: C:Windows
4. El directorio actual: CWD
5. Directorios listados en la variable de entorno PATH
20.
RPATH
• Acrónimo derun-time search path
• Codifica el path en el que buscar librerías dinámicas tanto en
ejecutables como en otras librerías dinámicas
• ¿Por qué se usa? Para hacer los ejecutables/librerías más flexibles.
Distintas distros pueden desplegar librerías en sitios diferentes
20
Librería
@rpath/libShared.so
Ejecutable
rpath=/my/rpath
rpath=@executable_path
21.
INYECTANDO UNA LIBRERÍA
EnUnix se pueden inyectar librerías que el dynamic
loader cargará antes de buscar en esos search paths
Linux - LD_PRELOAD (1)
macOS - DYLD_INSERT_LIBRARIES (2)
(1) Linux sin SELinux. Por defecto suele estar deshabilitado
(2) macOS sin “Debugging Restrictions”. Por defecto está habilitado
21
LIBRERÍAS DINÁMICAS
(RELOADED)
• ¿Quéson las librerías dinámicas?
• ¿En qué se diferencian de las librerías estáticas?
• ¿Cuáles son sus ventajas e inconvenientes?
26