Что вызывает ошибку "undefined ссылка на (некоторая функция)"?

Я получаю сообщение об ошибке:

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

Это ошибка компоновщика. ld является компоновщиком, поэтому, если вы получите сообщение об ошибке, заканчивающееся "ld return 1 exit status", это говорит о том, что это ошибка компоновщика.

Сообщение об ошибке сообщает, что ни один из файлов объектов, с которыми вы связываете, содержит определение для avergecolumns. Причина в том, что указанная вами функция называется averagecolumns (другими словами: вы ошибочно написали имя функции при вызове функции (и, предположительно, в файле заголовка), иначе вы получили бы другую ошибку во время компиляции)).