Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What causes the error "undefined reference to (some function)"? [duplicate]

Tags:

I get the error:

main.o(.text+0x1ed): In function `main': : undefined reference to `avergecolumns' collect2: ld returned 1 exit status 

when I gcc *.o. I'm not quite sure what causes this error. Other posters have explained it as the function is not found or the function is empty. If someone could clarify or refine, it would be greaty appreciated!

Here is my function's code(I'm trying to calculate the average of the column in 2D arrays):

#include "my.h"  void averagecolumns (int x, int y, int** a) {     int i;     int j;     float sum;     float colAvg;      sum = 0;     colAvg = 0;      printf("i.  The column averages are: \n");     for(i = 0; i < x; i++)         {             for(j = 0; j < y; j++)                 {                     sum += a[i][j];                     colAvg = sum / (float)x;                 }             printf("Column: %3d, Average: %6.2f", j, colAvg);             sum = 0;                colAvg = 0;         } 

The relavent parts of main are:

#include "my.h"  int main (int argc, char* argv[]) {      int** a;      float** colAvg;      int ROWS;      int COLS;      int i;      int j;      int** table;      FILE* fpmyfile;      int closeResult;  ....               printme (ROWS, COLS, a);                              // call functions a - j              oddvalues (ROWS, COLS, a);              oddlocations (ROWS, COLS, a);              countoddrows (ROWS, COLS, a);              addrows (ROWS, COLS, a);              findfirstsmall (ROWS, COLS, a);              findlastlarge (ROWS,COLS, a);                                        addcolumns (ROWS, COLS, a);              avergecolumns (ROWS, COLS, a);  ....  } 

Also, is this a linker or a compile error (I wasn't sure which tag to add).

like image 419
Piseagan Avatar asked Nov 06 '11 00:11

Piseagan


People also ask

How do you fix a undefined reference error?

So when we try to assign it a value in the main function, the linker doesn't find the symbol and may result in an “unresolved external symbol” or “undefined reference”. The way to fix this error is to explicitly scope the variable using '::' outside the main before using it.

What is the meaning of error undefined reference to?

If you get an error about "undefined reference" when compiling a program of your own from source code, then you are probably missing to include some required symbols which should be distributed in a separate library archive.

How do you fix undefined symbol in C++?

You need to pass the values to the function Calculate. Variables x, y, z and function are not accessible outside the class and also u need a return type to the function so that you can get the output from the function Calculate.

How do I fix linker errors?

You can fix the errors by including the source code file that contains the definitions as part of the compilation. Alternatively, you can pass . obj files or . lib files that contain the definitions to the linker.


1 Answers

It's a linker error. ld is the linker, so if you get an error message ending with "ld returned 1 exit status", that tells you that it's a linker error.

The error message tells you that none of the object files you're linking against contains a definition for avergecolumns. The reason for that is that the function you've defined is called averagecolumns (in other words: you misspelled the function name when calling the function (and presumably in the header file as well - otherwise you'd have gotten a different error at compile time)).

like image 73
sepp2k Avatar answered Sep 23 '22 18:09

sepp2k