是什么导致错误“未定义引用(某些function)”?

我收到错误:

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

当我gcc * .o。 我不太确定导致此错误的原因。 其他海报已经解释了它没有找到function或function是空的。 如果有人可以澄清或改进,那将非常感谢!

这是我的函数代码(我试图计算2D数组中列的平均值):

 #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; } 

主要的相关部分是:

 #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); .... } 

此外,这是一个链接器或编译错误(我不确定要添加哪个标记)。

这是一个链接器错误。 ld是链接器,因此如果您收到以“ld返回1退出状态”结尾的错误消息,则会告诉您它是链接器错误。

该错误消息告诉您,您链接的所有目标文件都不包含avergecolumns的定义。 原因是你定义的函数叫做averagecolumns (换句话说:你在调用函数时拼错了函数名称(也可能是在头文件中) – 否则你在编译时遇到了不同的错误时间))。