Thursday 30 November 2017

c - What causes the error "undefined reference to (some function)"?





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).



Answer





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)).


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...