2
votes

I wrote a program that in the main function calls a function from another .c file, but outputs an error undefined reference to 'function_name'. collect2: error: ld returned 1 exit status. I compile the program on the Linux command line: gcc -o main.exe main.c ./main.exe

funcs.h

#ifndef FUNCS_H_INCLUDED
#define FUNCS_H_INCLUDED

int foo();

#endif

second.c

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

int foo(){
  printf("Hello, world!");

return 0;
}

main.c

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

int foo();

int main(){
  foo();

  return 0;
}

how to fix the error

2

2 Answers

6
votes

You need to compile all c files, not only main.c

gcc -o main.exe main.c second.c
0
votes

The undefined reference is raised when no symbol is detected for specific function.

In this case it can be fixed compiling also the .c file that contains the function so :

gcc -o main.exe main.c second.c

In this way you will have the symbol for the function you call that is in funcs.c file.