Davanti ad un problema il matematico cerca di ricondurlo ad una formula matematica, il fisico cerca di risalire al fenomeno fisico che lo ha prodotto, l'informatico spegne e riaccende.

— Anonimo

Librerie statiche e dinamiche in ambiente Linux

  • user warning: Table './stenoweb/node_comment_statistics' is marked as crashed and should be repaired query: SELECT last_comment_timestamp, last_comment_name, comment_count FROM node_comment_statistics WHERE nid = 108 in /home/stenoweb/public_html/modules/comment/comment.module on line 596.
  • user warning: Table './stenoweb/node_comment_statistics' is marked as crashed and should be repaired query: SELECT last_comment_timestamp, last_comment_name, comment_count FROM node_comment_statistics WHERE nid = 28 in /home/stenoweb/public_html/modules/comment/comment.module on line 596.
  • user warning: Table './stenoweb/node_comment_statistics' is marked as crashed and should be repaired query: SELECT comment_count FROM node_comment_statistics WHERE nid = 28 in /home/stenoweb/public_html/modules/comment/comment.module on line 1121.

Una delle caratteristiche meno usate delle librerie dinamiche è la possibilità di linkarle ad un processo in ogni istante del proprio ciclo di vita. Il metodo di linking mostrato nella pagina precedente rende la libreria dinamica caricabile dal dynamic loader di sistema.

Oltre a ciò è possibile realizzare un’operazione di linking in ogni istante tramite la libreria dl. Questa libreria consente di caricare una libreria dinamica, far riferimento ai simboli in essa definiti, chiamare alcune delle sue funzioni e infine staccarla dal processo quando non è più necessaria.

Un possibile scenario in cui ci si potrebbe trovare potrebbe essere la scrittura di un’applicazione che necessiti la lettura di dieci file con formato diverso in una singola esecuzione; il codice potrebbe essere organizzato come se solo uno o due di questi formati di file fossero necessari. Sarebbe possibile scrivere una libreria dinamica per ciascun formato, ciascuna con la stessa interfaccia (ad esempio readfile e writefile), e una porzione di codice che determini il formato del file. In questo modo, quando il programma richiede di aprire un file, prima verificherà il suo formato, poi caricherà la libreria dinamica relativa che consente di leggere e scrivere quel formato, e poi chiamerà il readfile per leggere il file.

Sarebbe possibile avere dieci librerie di questo tipo, ma solo una di esse sarebbe posizionata in memoria in un dato istante di tempo, consentendo alla nostra applicazione di usare meno risorse di sistema. In tal modo sarà possibile anche cominciare a sviluppare l’applicazione con un piccolo insieme di formati di file supportati, e aggiungere nuovi formati di file senza la necessità di modificare l’intera applicazione ma semplicemente aggiungendo qualche riga di codice per il riconoscimento del formato e il linking alla nuova libreria dinamica creata per il nuovo formato supportato.

Vedremo ora come realizzare quanto esposto qui tramite l’ausilio della libreria dl con esempi pratici di applicazione.