【问题标题】:What causes the error "undefined reference to (some function)"? [duplicate]是什么导致错误“未定义对(某些函数)的引用”? [复制]
【发布时间】:2011-12-22 21:24:12
【问题描述】:

我得到错误:

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

主要的相关部分是:

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

....

}

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

【问题讨论】:

    标签: c linker-errors


    【解决方案1】:

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

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

    【讨论】:

    • 好发现!另一个为什么短是好的例子,并且在诸如“平均”和“列”之类的紧缩名称中是一种责任——对 usr、tmp 和 lib 来说是的 :-)
    • 哦,感谢您解释 ld 的含义!我觉得很傻,没有看到拼写错误。我会记住命名约定!再次感谢! :)
    • @Piseagan 使用一种约定来明确变量/函数中单词之间的中断位置也可以更容易地捕捉错别字。 Camelcase 和下划线都是不错的选择 - 即 avergeColumnsaverge_columns 都比 avergecolumns 更容易发现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    相关资源
    最近更新 更多