De linker voegt alle los gecompileerde stukjes code samen op de juiste plaats.
In jou geval bestaat de math lib uit een .h bestand waarin alle functies en het gebruik ervan beschreven staan, (dat zijn een soort linkjes). De daadwerkelijke implementatie is sterk geoptimaliseerd en wordt niet steeds opnieuw gecompileerd, maar wordt als een bestaande reeds gecompileerde library gebruikt.
De linker heeft als taak om de stukjes gecompileerde code die bij de referenties horen in te voegen.
In jou geval kan hij de header vinden, daardoor gaat het daadwerkelijke compileren wel goed, maar de gecompileerde code van math.h kan hij niet vinden.
Je kunt bij je project settings heel veel aangeven. Ik weet niet precies uit mijn hoofd hoe dat zit bij coocox, maar je kunt volgens mij bij de linker settings aangeven dat hij een extra library moet meenemen. Als je daar enkel aangeeft dat hij de m meeneemt het goed moeten gaan.
Meestal zie je ook het resulterende gcc commando ergens staan, dat moet de optie -lm bij komen. (-l betekend include libray, m staat voor math)