C++ dlopen mini HOWTO

Aaron Isotton

2006-03-16

Diario delle Revisioni
Revisione 1.102006-03-16Revisionato da: AI
Cambio di licenza da GFDL a GPL. Corretta la spiegazione dell'uso di dlerror, al riguardo si ringrazia Carmelo Piccione. Esempio d'uso di un virtual destructor, in materia si ringrazia Joerg Knobloch. Aggiunta la sezione Sorgenti. Correzioni minori.
Revisione 1.032003-08-12Revisionato da: AI
Inclusa menzione del Dynamic Module Loader GLib. Si ringrazia G. V. Sriraam per il suggerimento.
Revisione 1.022002-12-08Revisionato da: AI
Aggiunta una FAQ. Altre modifiche minori.
Revisione 1.012002-06-30Revisionato da: AI
Aggiornamento del materiale sui virtual destructor. Altre modifiche minori.
Revisione 1.002002-06-19Revisionato da: AI
Spostato il copyright e la licenza all'inizio del documento. Aggiunta la sezione riguardante i termini impiegati in questo documento. Altre modifiche minori.
Revisione 0.972002-06-19Revisionato da: JYG
Modifiche minori riguardanti la grammatica e la struttura delle frasi.
Revisione 0.962002-06-12Revisionato da: AI
Aggiunta la bibliografia. Corretta la spiegazione delle funzioni e variabili extern.
Revisione 0.952002-06-11Revisionato da: AI
Modifiche minori..

Come caricare dinamicamente funzioni e classi C++ per mezzo dell'interfaccia dlopen. Traduzione a cura di Federico Lucifredi <lucifred@fas.harvard.edu>, Harvard University.


Sommario
1. Introduzione
1.1. Copyright e Licenza (in originale inglese)
1.2. Liberatoria
1.3. Ringraziamenti a Coloro Che Hanno Contribuito
1.4. Commenti
1.5. Termini Usati in Questo Documento
2. Il Problema
2.1. Name Mangling
2.2. Classi
3. La Soluzione
3.1. extern "C"
3.2. Caricare Funzioni
3.3. Caricare Classi
4. Sorgenti
5. FAQ
6. Approfondimento
Bibliografia

1. Introduzione

Una domanda spesso posta da programmatori C++ che sviluppano sotto Unix riguarda il come si proceda al caricamento di funzioni e classi C++ dinamicamente per mezzo dell'API dlopen.

In pratica, far ciò non è sempre semplice e qualche spiegazione in merito sembra dovuta - questo è l'obiettivo di questo documento.

Una conoscenza intermedia dei linguaggi C e C++ e dell'API dlopen sono necessari per poter comprendere appieno il documento.

La versione originale di questo documento può essere consultata online al seguente URL: http://www.isotton.com/howtos/C++-dlopen-mini-HOWTO/.

1.1. Copyright e Licenza (in originale inglese)

This document, C++ dlopen mini HOWTO, is copyrighted (c) 2002-2006 by Aaron Isotton. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 2, as published by the Free Software Foundation.

1.2. Liberatoria

Non si può accettare responsabilità per i contenuti di questo documento. L'uso di concetti, casi di esempio e di informazione ivi contenuti è interamente a rischio dell'utente. Questo documento può contenere errori o informazioni inaccurate che possono causar danno al sistema. Si proceda con cautela, e nonostante tutto ciò sia estremamente improbabile, l'autore non si assume alcuna responsabilità.

Tutti i copyright sono mantenuti dai rispettivi proprietari, eccezion fatta per i casi in cui si indica diversamente. L'uso di un termine in questo documento non deve essere considerato come avente effetto sulla validità di qualsiasi marchio registrato. La menzione di particolari prodotti o marche non deve essere considerato come una indicazione di preferenza dell'autore per tal prodotto.

1.3. Ringraziamenti a Coloro Che Hanno Contribuito

In questo documento, l'autore ha il piacere di riconoscere il contributo ricevuto da (in ordine strettamente alfabetico) :

  • Joy Y Goodreau per il suo lavoro di revisione editoriale.

  • D. Stimitis per aver portato all'attenzione dell'autore alcune sottigliezze riguardanti il processo di decorazione dei simboli (name mangling) e della clausola extern "C".

  • Numerosi altri hanno indicato errori o dato suggerimenti per migliorare questo documento. Voi sapete chi siete!

1.4. Commenti

L'autore apprezza i commenti del lettore, che possono essere inviati al seguente indirizzo e-mail: .

1.5. Termini Usati in Questo Documento

dlopen API

L'insieme delle funzioni dlclose, dlerror, dlopen e dlsym come descritte nella pagina dlopen(3) di man.

Si osservi l'uso del termine "dlopen" con riferimento individuale alla funzione dlopen, e dei termini "dlopen API" e interfaccia dlopen con riferimento all'intera API.