I'm beginning to write a program in C but I have the following error and I can't figure out why:
Undefined symbols for architecture x86_64:
  "_receiveByte", referenced from:
      _main in main_prog.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [q1] Error 1
As far as I understand, I have included everything properly in the appropriate files and in my makefile, yet I still get this error. This is what my code looks like:
main_prog.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "physical.h"
#include "main_prog.h"
int main(int argc, char *argv[]) 
{
    PhysicalState * initPhysical();
    const Direction blah = L2R;
    unsigned char new_char; 
    new_char = receiveByte(blah);
    printf("Done.\n");
}
main_prog.h
#ifndef _MAIN_PROG_H
#define _MAIN_PROG_H
// nothing yet
#endif
physical.h
#ifndef _PHYSICAL_H
#define _PHYSICAL_H
#include <pthread.h>
#define MAX_FRAME_SIZE 1024
typedef enum
{
  false,
  true
} boolean;
typedef enum
{
  L2R,
  R2L
} Direction;
struct PHYSICAL_STATE
{
  pthread_cond_t  L2RTxSignal;     
  pthread_cond_t  L2RRxSignal;     
  boolean         L2RReady;        
  pthread_mutex_t L2RLock;       
  pthread_cond_t  R2LTxSignal;     
  pthread_cond_t  R2LRxSignal;     
  boolean         R2LReady;        
  pthread_mutex_t R2LLock;        
};
typedef struct PHYSICAL_STATE PhysicalState;
PhysicalState * initPhysical();
unsigned char receiveByte(const Direction dir);
#endif
and finally my
makefile
PROG = main_prog
HDRS = physical.h main_prog.h
SRCS = main_prog.c 
OBJDIR = object
OBJS = $(patsubst %.c, $(OBJDIR)/%.o, $(SRCS)) 
CC = gcc
CFLAGS = -Wall --std=c99 -L.
LIBS = -lm
all : $(OBJDIR) $(PROG)
$(PROG) : $(OBJS)
    $(CC) $(CFLAGS) $^ -o $(PROG) $(LIBS)
object/%.o : %.c $(HDRS)
    $(CC) -c $(CFLAGS) $< -o $@ $(LIBS)
$(OBJDIR) :
    mkdir -p $@/
clean:
    rm -rf object/
    rm -f $(PROG)
There is also a physical.o file located in the same directory as all of these files, whereas the main_prog.o file gets located in object/ as specified by the makefile. I've tried moving the physical.o file around as well as the main_prog.o file around (and changing the makefile to correspond) but I still get this error. Any solution to this error would be greatly appreciated thanks.
 
     
    