Почему в gcc не подключается?
Библиотека != заголовочный файл.
Заголовочный файл содержит только объявления (т.е. описания). Например:// time.h
#ifndef TIME_H
#define TIME_H
double time(float x);
#endif
Реализация может быть в отдельном файле.// time.c
#include "time.h"
#include <math.h>

double time(float x){
  return 5.0*sqrt(x*x + 36.0) + 4.0*(20.0 - x);
}
Чтобы каждый раз этот код не компилировать, можно скомпилировать его однажды в библиотеку:gcc -c time.c -o time.o # Создаём объектный файл (скомпилированый код)
ar rcs libtime.a time.o # Создаём статическую библиотеку (по сути, архив объектных файлов)
А потом только подключать её:gcc main.c -ltime// main.c
#include <stdio.h>
#include <math.h>
#include "time.h"

int main(){
  double l = 0;
  double r = 20;
  for(int i = 0; i < 1000; i++){
    double mid = (r+l)/2;
    double tl = mid - mid/10;
    double tr = mid + mid/10;
    if(time(tl) < time(tr))
      r = tr;
    else
      l = tl;
  }
  printf("x = %g;  t = %g\n", (l+r)/2, time((l+r)/2));
  return 0;
}P.S. -l - сокращение от слова link (связывать).P.P.S. Разделение libc и libm сложилось по историческим причинам.
Видимо потому, что в gcc математические функции вынесены в отдельную библиотеку - libm.