First, it's probably a bad idea to name a header “math.h”, since that's a standard header name. You're already accidentally including the wrong header in runner.c when you use <> instead of "" to surround the header name. But that's not the real issue.

The real issue is that you're just compiling math.c into math.o and calling that a library, but it's not. It's an object file. It can be turned into a static library with ar:

Code:
ar cru libmath.a math.o
When linking, if you do “-lfoo”, gcc will look for “libfoo.so” and then “libfoo.a”. If neither of those exists, it won't search elsewhere, such as for “foo.o”.