Na página de manual do exp10 :
SYNOPSIS
#define _GNU_SOURCE /* See feature_test_macros(7) */
#include <math.h>
Link with -lm.
CONFORMING TO
These functions are GNU extensions.
Como essas não são funções padrão, você não precisa apenas de #include <math.h> , mas deve ter a linha #define _GNU_SOURCE antes da linha #include <math.h> .
Você também precisa adicionar -lm na linha de link, então você teria
gcc -o main main.o f.o -lm
As opções -l normalmente vêm depois de todos os arquivos .o .
A maneira mais fácil de fazer tudo isso é usar make . Ele já sabe como compilar e vincular arquivos C, portanto, basta informar quais arquivos dependem de quais outros arquivos e alterar algumas variáveis para adicionar personalizações como -g e -lm .
Crie um arquivo chamado Makefile com este conteúdo:
CFLAGS += -g
LDLIBS += -lm
main: main.o f.o
main.o: main.c f.h
f.o: f.c f.h
Em seguida, basta digitar make :
$ make
cc -g -c -o main.o main.c
cc -g -c -o f.o f.c
cc main.o f.o -lm -o main