HW: 在一个pthread上运行来自另一个文件的函数?

6 浏览
0 Comments

HW: 在一个pthread上运行来自另一个文件的函数?

我遇到了以下错误:\n

main.o(.text+0x1ed):在函数“main”中:
: 对“avergecolumns”的引用未定义
collect2: ld 返回 1 退出状态

\n当我执行gcc *.o命令时出现了这个错误。我不太确定是什么原因导致了这个错误。其他帖子中的回答是该函数未找到或函数为空。如果有人能够澄清或完善一下,将不胜感激!\n这是我的函数代码(我正在尝试计算2D数组中每列的平均值):\n

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

\n主函数的相关部分如下:\n

#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);                              // 调用函数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);
....
}

\n此外,这是一个链接器错误还是编译错误(我不确定应该添加哪个标签)?

0
0 Comments

问题的出现原因是由于在调用函数时拼写错误导致链接错误。代码中定义的函数名为averagecolumns,而在调用函数时错误地拼写为avergecolumns。链接器在链接时找不到函数的定义,因此出现了ld returned 1 exit status的错误信息。为了避免这种错误,建议使用明确的命名规范,例如使用驼峰式命名或使用下划线分隔单词,这样可以更容易地发现拼写错误。

解决方法:

- 确保在调用函数时拼写正确,与函数定义的名称一致。

- 在定义函数的头文件中也要注意拼写,以避免在编译时出现不同的错误信息。

- 使用明确的命名规范,例如驼峰式命名或下划线分隔单词,可以提高代码的可读性和易于发现拼写错误的能力。

在使用pthread运行一个单独文件中的函数时,出现了链接错误的问题。通过仔细检查代码发现是函数调用时拼写错误导致的。为了避免这种错误,应该注意函数调用时的拼写,并使用明确的命名规范。这样可以提高代码的可读性和可维护性,并减少出现类似错误的可能性。

0