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