next up previous contents
Next: Operatoren Up: Funktionen und Operatoren Previous: Funktionen ohne Argumente oder

Bibliotheken

Wie wir oben gesehen haben, reichen Deklarationen dem Compiler als Information aus, um ein Programm zu übersetzen, und er erzeugt an der entsprechenden Stelle im Programm einen Funktionsaufruf. Allerdings muß dann natürlich später die Information hinzugefügt werden, welche Anweisungen denn wirklich mit diesem Aufruf ausgeführt werden sollen. Mit anderen Worten, wir müssen die übersetzten Funktionsdefinitionen ``anbinden'' (Computerdeutsch: linken). Dies geschieht durch Angabe des Namens der Programmbibliothek, oder der Objektdatei (.o), in der diese enthalten sind.

Ein klassisches Beispiel liefern die Funktionen der Mathematikbibliothek, hier sqrt(). Diese sind deklariert in cmath und ihre übersetzten Definitionen befinden sich in libm.a. Ein Programm, das eine solche Funktion benutzt, sieht vielleicht so aus:

// myprog.cc:

#include <cmath>         // declaration of (C) math functions
#include <iostream>      // declaration of (C++) I/O functions and objects
using std::cin;
using std::cout;

int main(){              // program to compute the sqrt of a number
                         //  entered from the terminal     
  double  d;
  cin >> d;
  if ( d < 0. ) 
    cout << "cannot compute the square root of negative numbers\n"; 
  else
                         // compute sqrt(d) and use value
    cout << "sqrt(" << d << ") = " << sqrt(d) << "\n";  
}

Eine UNIX-Kommandozeile, um dieses Programm zu übersetzen und mit den Funktionen der Mathematikbibliothek zu linken, lautet:

g++ myprog.cc -o myprog -lm

Hier steht -l für ``library'' und m für die Datei libm.a, die die mathematischen Funktionen enthält; man findet die hinter -l anzugebenden Zeichen durch Weglassen von lib und der Endung .a



© R.Hilfer et al., ICA-1, Univ. Stuttgart
28.6.2002