# Dlfcn.h

La càrrega dinàmica és un mecanisme pel qual un programa informàtic pot, en temps d'execució, carregar una biblioteca (o un altre binari) a la memòria, recuperar les adreces de les funcions i variables contingudes a la biblioteca, executar aquestes funcions o accedir a aquestes variables i descarregar el fitxer. biblioteca de memòria. És un dels 3 mecanismes pels quals un programa informàtic pot utilitzar algun altre programari; els altres dos són enllaços estàtics i enllaços dinàmics. A diferència de l'enllaç estàtic i l'enllaç dinàmic, la càrrega dinàmica permet que un programa informàtic s'iniciï en absència d'aquestes biblioteques, descobrir biblioteques disponibles i, potencialment, obtenir funcionalitats addicionals.

## Història

La càrrega dinàmica era una tècnica comuna per als sistemes operatius d'IBM per System/360, com ara OS/360, especialment per a les subrutines d'E/S, i per a les biblioteques d'execució COBOL i PL/I, i es continua utilitzant als sistemes operatius d'IBM per a z/Architecture, com ara z/OS. Pel que fa al programador d'aplicacions, la càrrega és en gran manera transparent, ja que majoritàriament la gestiona el sistema operatiu (o el seu subsistema d'E/S). Els principals avantatges són:
* Les correccions (pedaços) als subsistemes van arreglar tots els programes alhora, sense necessitat de tornar-los a enllaçar
* Les biblioteques es podrien protegir de modificacions no autoritzades
El sistema estratègic de processament de transaccions d'IBM, CICS (de la dècada de 1970 en endavant) utilitza àmpliament la càrrega dinàmica tant per al seu nucli com per a la càrrega normal del programa d'aplicacions. Les correccions als programes d'aplicació es podrien fer fora de línia i les còpies noves dels programes modificats es poden carregar dinàmicament sense necessitat de reiniciar CICS (que es pot executar, i ho fa sovint, les 24 hores del dia, els 7 dies de la setmana).
Les biblioteques compartides es van afegir a Unix a la dècada de 1980, però inicialment sense la possibilitat de permetre que un programa carregués biblioteques addicionals després de l'inici.

## Usos

La càrrega dinàmica s'utilitza amb més freqüència en la implementació de connectors de programari. Per exemple, els fitxers del connector d'"objecte compartit dinàmic" *.dsodel servidor web Apache són biblioteques que es carreguen en temps d'execució amb càrrega dinàmica. La càrrega dinàmica també s'utilitza en la implementació de programes informàtics on diverses biblioteques diferents poden proporcionar la funcionalitat requerida i on l'usuari té l'opció de seleccionar quina biblioteca o biblioteques oferir.

## En C/C++

No tots els sistemes admeten la càrrega dinàmica. Els sistemes operatius semblants a UNIX com ara macOS, Linux i Solaris proporcionen càrrega dinàmica amb la biblioteca "dl" del llenguatge de programació C. El sistema operatiu Windows proporciona càrrega dinàmica mitjançant l'API de Windows.

### Resum

| Nom | API estàndard POSIX/UNIX | API de Microsoft Windows |
| Inclusió de fitxers de capçalera | #include <dlfcn.h> | #include < windows.h > |
| Definicions per a la capçalera | dl ( libdl.so, libdl.dylib, etc. segons el sistema operatiu) | kernel32.dll |
| Carregant la biblioteca | dlopen | LoadLibrary LoadLibraryEx < |
| Extracció de continguts | dlsym | GetProcAddress |
| Descàrrega de la biblioteca | dlclose | FreeLibrary |

## Referències

* ↑ «dlfcn.h(0p) - Linux manual page» (en anglès). [Consulta: 17 desembre 2023].
* ↑ «[https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/dlfcn.h.html The Open Group Base Specifications Issue 7, 2018 edition IEEE Std 1003.1-2017 (Revision of IEEE Std 1003.1-2008) Copyright © 2001-2018 IEEE and The Open Group]» (en anglès). [Consulta: 17 desembre 2023].
* ↑ «dlfcn.h» (en anglès americà), 09-03-2017. [Consulta: 17 desembre 2023].
* ↑ «dlfcn.h: dynamic linking - Linux Manuals (0p)» (en anglès). [Consulta: 17 desembre 2023].