Neben den beiden eigentlich genutzten Funktionen sind noch die Funktionen
_init() und _fini() enthalten, die beim Laden
beziehungsweise Entladen der DLL
aufgerufen werden (siehe Einsprungpunkte beim Laden oder Entladen einer dynamischen
Bibliothek).
///////////////////////////////////////////////////////////////////////
//
// Time-stamp: "(09.05.01 20:41) demodll.cpp [Klaus Wachtler]"
//
//
// Kompilieren mit:
// g++ -shared demodll.cpp -o libdemodll.so
// (falls Ausnahmen gewünscht; dann sind _init() und _fini()
// auszukommentieren), oder
// g++ -shared -nostartfiles demodll.cpp -o libdemodll.so
// (_init() und _fini() möglich, aber keine Ausnahmen).
//
static int Wert = 0;
extern "C" int summe( int a, int b )
{
return a + b;
}
extern "C" int immereinsmehr( void )
{
if( Wert>6 )
{
throw( 125 );
}
return Wert++;
}
// Ab hier kann der ganze Rest entfallen, wenn man ihn nicht braucht:
//#include <stdio.h>
//
//extern "C" void _init( void )
//{
// printf( "Bibliothek geladen\n" );
//}
//
//extern "C" void _fini( void )
//{
// printf( "Bibliothek beendet\n" );
//}
//
///////////////////////////////////////////////////////////////////////
Die Beispielbibliothek kann folgendermaßen übersetzt werden:
klaus@aw33:~/db/linux > g++ -Wall -shared demodll.cpp -o libdemodll.soDadurch erhält man das shared object libdemodll.so.