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

Pis*_*gan 14 c linker-errors

我收到错误:

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

当我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;
        }
Run Code Online (Sandbox Code Playgroud)

主要的相关部分是:

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

....

}
Run Code Online (Sandbox Code Playgroud)

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

sep*_*p2k 25

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

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

  • @Piseagan使用一个约定,清楚地表明变量/函数中的单词之间的中断也使得拼写错误更容易.Camelcase和下划线都是不错的选择 - 即`avergeColumns`或`averge_columns`比`avergecolumns'更容易发现. (2认同)