Not able to link source files together on terminal

I have 5 source files I am trying to link: book.h, book.c, readline.c, readline.h, and book_requests.c.

I compiled each with gcc -c (filename) and then when I try to to link them by

gcc -o book_requests book_requests.o book.o readline.o

It says I have an undefined references to all of my functions in the main file (which is book_requests.c)

Here is book_requests.c:

#include <stdio.h>
#include "book.h"

int main(void)
  char code;

  struct book *book_list = NULL;  
  printf("Operation Code: a for appending to the list, u for updating a book"
      ", p for printing the list; q for quit.\n");
  for (;;) {
    printf("Enter operation code: ");
    scanf(" %c", &code);
    while (getchar() != '\n')   /* skips to end of line */
    switch (code) {
      case 'a': book_list = append_to_list(book_list);
      case 'u': update(book_list);
      case 'p': printList(book_list);
      case 'q': clearList(book_list);
        return 0;
      default:  printf("Illegal code\n");

Here is book.h:

#ifndef BOOK_H
#define BOOK_H
#define TITLE_LEN 100
#define NAME_LEN 30

struct book{
    char title[TITLE_LEN+1];
    char first[NAME_LEN+1];
    char last[NAME_LEN+1];
    double price;
    int num_requests;
    struct book *next;

struct book *append_to_list(struct book *list);
void update(struct book *list);
void printList(struct book *list);
void clearList(struct book *list);