“undefined reference to (some function)”这个错误是由什么原因引起的?

27

我遇到了以下错误:

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个回答

44

这是一个链接错误。 ld 是链接器,因此,如果你收到一个以 "ld returned 1 exit status" 结尾的错误消息,那么就说明这是一个链接错误。

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


1
很好!又一个例子说明为什么短小精悍是好的,而在紧急情况下,“average”和“column”这样的名称会成为一种责任 - 对于usr、tmp和lib感到高兴 :-) - Kerrek SB
1
哦,谢谢你解释ld的含义!我感到很傻,没有看到拼写错误。我会记住命名约定的!再次感谢! :) - Piseagan
4
采用明确变量/函数中单词间断点的命名规范,有助于更容易地发现拼写错误。驼峰式和下划线命名均可 - 即averageColumnsaverage_columns都比averagecolumns更容易发现。 - Aaron Dufour

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接