@Patrick:
Du verwechselst Headerdateien und Libraries.
Die Headerdatei math.h enthält nur Deklarationen (Funktionsprototypen),
damit der Compiler Funktionsaufrufe korrekt übersetzen kann. Da steht
gewissermaßen nur drin, daß es eine Funktion namens log10 gibt,
welchen Typ ihre Argumente und Rückgabewert haben, aber nicht deren
Implementierung (der Code, der tatsächlich rechnet).
Das kannst Du Dir auch ansehen, Headerdateien sind ganz normale
Textdateien.
Der Compiler erzeugt aus Deiner Quelltextdatei eine Objektdatei, in der
wiederum (in binärer Form) eine Tabelle von externen Symbolen aufgeführt
ist. Das sind all die Funktionen, von denen dem Compiler mitgeteilt
wurde (oder von denen er es unter Ausgabe von Warnungen selbst
angenommen hat), daß sie irgendwo anders existieren.
log10 ist so ein Kandidat.
Erst der Linker "verheiratet" Deine erzeugte Objektdatei mit dem Code
der Implementierung der Funktion log10 - und die ist in einer Library
namens libm.a enthalten.
Gcc-spezifisch ist diese Namensgebung von Libraries - ihr Name fängt
immer mit "lib" an und ihre Extension ist .a. Bei der Angabe der zu
verwendenden Libraries (mit -l) wird im Makefile das "lib"
weggelassen.
So wird aus libm.a ein einfaches "m" und also lautet die Dir
fehlende Option "-lm".
Wird's jetzt allmählich klarer?