cheader-filessymbols

Missing symbol compile error in C. Basic header file setup


I'm working on a C project implementing some generic containers and am having this weird issue when compiling. Here is some sample code that also replicates the error.

foo.h

void fooprint(void);

foo.c

 #include "foo.h"
 #include <stdio>
 void fooprint(void){
    printf("bar");
    return;
 }

main.c

#include "foo.h"

int main(void){
    fooprint();
    return 0;
}

I compile by typing

gcc main.c -o main

and this is what terminal outputs

Undefined symbols:
"_fooprint", referenced from:
  _main in ccfMXGzj.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

I'm compiling this on an OSX system but have also tried compiling on a red hat machine with the same effect.

The solution is probably painfully obvious but I have had multiple friends I'm working with look at this and they couldnt see the problem. I've googled around a lot but most symbol error issues are usually pertaining to objective C.


Solution

  • You need to compile them together:

    gcc -Wall -Wextra -o main main.c foo.c
    

    Or maybe make a Makefile ?

    all: main
    
    main: main.o foo.o
    
    main.o: main.c
    
    foo.o: foo.c