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

时间:2011-11-06 00:42:43

标签: c linker-errors

我收到错误:

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

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

这是我的函数代码(我正在尝试计算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);

....

}

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

1 个答案:

答案 0 :(得分:22)

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

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