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.