c - 是什么导致错误 "undefined reference to (some function)"?

标签 c linker-errors

<分区>

我得到错误:

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

当我 gcc *.o.我不太确定是什么原因导致此错误。其他发贴者解释为找不到函数或函数为空。如果有人可以澄清或完善,将不胜感激!

这是我的函数代码(我正在尝试计算二维数组中列的平均值):

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

main的相关部分是:

#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 returned 1 exit status”结尾的错误消息,则表明这是链接器错误。

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

关于c - 是什么导致错误 "undefined reference to (some function)"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8024440/

相关文章:

iphone - 添加类别并出现 35 个链接器错误

c - 如何在 C 中将整数转换为十六进制字符串?

c - fgets 和 readRestOfLine 错误

代码块调试问题

visual-studio - Visual Studio 2013 中的 GTK+ 3.0 设置

c++ - LNK2019上一个带dll项目的解决方案

c - 这两个定义有什么区别?

c - 由于 C 中内存不足导致的段错误

c++ - Visual Studio 错误 : LNK1104: cannot open file 'kernel32.lib' - only in WP8 projects/Win32 builds

iPhone库: file is not of required architecture