4.1 Linuxversion

///////////////////////////////////////////////////////////////////////
//
// Time-stamp: "(09.05.01 07:33) linkaufrufer.cpp [Klaus Wachtler]"
//
// kleine Demo zum Laden und Verwenden einer DLL.
//
// Kompilieren und Linken:
//    g++ linkaufrufer.cpp libdemodll.so -o linkaufrufer
 
#include <stdio.h>
#include <unistd.h>

// Deklarationen der Funktionen in der SO:
extern "C" int summe( int, int );
extern "C" int immereinsmehr( void );

int main()
{
  // Aufruf der Funktionen:
  for( int i=0; i<10; i++ )
    {
      try
        {
          printf( "Summe von %d und %d ist %d; immer eins mehr ist %d\n",
                  i,
                  i/2,
                  summe( i, i/2 ),
                  immereinsmehr()
                  );
        }
      catch( int Fehler )
        {
          fprintf( stderr, "int-Ausnahme %d gefangen!\n", Fehler );
        }
      catch( ... )
        {
          fprintf( stderr, "irgendeine Ausnahme gefangen!\n" );
        }
      sleep( 1 );
    }

  return 0;
}

//
///////////////////////////////////////////////////////////////////////

Das Beispielprogramm kann folgendermaßen übersetzt und gestartet werden:

klaus@aw33:~/db/linux > unset LD_LIBRARY_PATH
klaus@aw33:~/db/linux > g++ -Wall linkaufrufer.cpp libdemodll.so -o linkaufrufer
klaus@aw33:~/db/linux > linkaufrufer
linkaufrufer: error in loading shared libraries: libdemodll.so:
 cannot open shared object file: No such file or directory
klaus@aw33:~/db/linux > export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
klaus@aw33:~/db/linux > linkaufrufer
Summe von 0 und 0 ist 0; immer eins mehr ist 0
Summe von 1 und 0 ist 1; immer eins mehr ist 1
Summe von 2 und 1 ist 3; immer eins mehr ist 2
Summe von 3 und 1 ist 4; immer eins mehr ist 3
Summe von 4 und 2 ist 6; immer eins mehr ist 4
Summe von 5 und 2 ist 7; immer eins mehr ist 5
Summe von 6 und 3 ist 9; immer eins mehr ist 6
int-Ausnahme 125 gefangen!
int-Ausnahme 125 gefangen!
int-Ausnahme 125 gefangen!

Die Beispielkommandos und ihre Ausgabe zeigen gleichzeitig die Verwendung der Umgebungsvariablen LD_LIBRARY_PATH. Wenn diese gesetzt ist, wird in den darin angegebenen (und mit einem Doppelpunkt getrennten) Pfaden nach dynamischen Bibliotheken gesucht.

Tip: Welche dazugelinkten dynamischen Bibliotheken von einem Programm (oder einer Bibliothek wiederum) benötigt werden, kann man unter Linux mit dem Kommando ldd erfahren.

Dies zeigt aber nur die direkt benötigten Bibliotheken an; davon wiederum abhängige muß man gegebenenfalls mit weiteren Aufrufen ermitteln.

Zur Laufzeit nachgeladene Bibliotheken (siehe Beispiel zum Laden einer Bibliothek zur Laufzeit) werden so allerdings nicht ermittelt.



www.wachtler.de