合并其他.c文件时生成文件返回错误

合并其他.c文件时生成文件返回错误,c,gcc,makefile,linked-list,C,Gcc,Makefile,Linked List,我一直在做一项任务,任务中给我们一个.ssv文件,第一列包含银行账户,第二列包含交易(20是增加20美元,-20是减少20美元),并要求我们使用多个c文件创建账户的链接列表 有三个问题:main.c(打开ssv并逐行进行)、ssv.c(包含解析fgets()字符串中数据的函数)和linked.c(通过匹配账号和添加交易创建链接列表并更新账户余额)。它们必须保持独立,并且不能制作成.h文件 我已经组装了一个makefile,将所有这些文件放在一个可执行文件中,但是当我运行make时,它返回并出错。

我一直在做一项任务,任务中给我们一个.ssv文件,第一列包含银行账户,第二列包含交易(20是增加20美元,-20是减少20美元),并要求我们使用多个c文件创建账户的链接列表

有三个问题:main.c(打开ssv并逐行进行)、ssv.c(包含解析fgets()字符串中数据的函数)和linked.c(通过匹配账号和添加交易创建链接列表并更新账户余额)。它们必须保持独立,并且不能制作成.h文件

我已经组装了一个makefile,将所有这些文件放在一个可执行文件中,但是当我运行make时,它返回并出错。我做了一些调试,发现它似乎编译了ssv.c和main.c的对象文件,但没有编译linked.c,这导致我在main.c中使用linked.c函数时出现了一些问题。我在下面列出了每个文件的代码,以及我尝试“make”时出现的错误消息。如果您能帮我找到这个问题,我们将不胜感激

错误输出:

ctonne2, ~/Projects/COMP206/Assignments/ass6: make
gcc -c linked.c
gcc -c ssv.c
gcc -c main.c
main.c: In function ‘main’:
main.c:21:3: warning: implicit declaration of function ‘parse’; did you mean ‘strsep’? [-Wimplicit-function-declaration]
   parse(line,&acct, &amnt);
   ^~~~~
   strsep
main.c:22:3: warning: implicit declaration of function ‘findUpdate’; did you mean ‘initstate’? [-Wimplicit-function-declaration]
   findUpdate(acct, amnt);
   ^~~~~~~~~~
   initstate
main.c:24:2: warning: implicit declaration of function ‘prettyPrint’ [-Wimplicit-function-declaration]
  prettyPrint();
  ^~~~~~~~~~~
gcc -o linked.o ssv.o main.o
main.o: In function `main':
main.c:(.text+0x92): undefined reference to `findUpdate'
main.c:(.text+0xb6): undefined reference to `prettyPrint'
collect2: error: ld returned 1 exit status
makefile:2: recipe for target 'bank' failed
make: *** [bank] Error 1
ctonne2, ~/Projects/COMP206/Assignments/ass6:
生成文件:

bank: linked.o ssv.o main.o
        gcc -o linked.o ssv.o main.o

linked.o: linked.c
        gcc -c linked.c

ssv.o: ssv.c
        gcc -c ssv.c

main.o: main.c
        gcc -c main.c
主要条款c:


#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void main() {
        FILE* ssv = fopen("students.ssv", "rt");
        if (ssv == NULL) {
                printf("\n File opening failed");
                exit(1);
        }

        int acct = 0;
        float amnt = 0;

        char line [100], bankAcc[10], balChange[10];
        while (fgets(line, sizeof(line), ssv)) {
                parse(line,&acct, &amnt);
                findUpdate(acct, amnt);
        }
        prettyPrint();
}

您在生成可执行文件的规则中遗漏了输出文件

bank: linked.o ssv.o main.o
        gcc -o bank linked.o ssv.o main.o
您的命令要求只链接
ssv.o
main.o
,并将结果放入
linked.o

#include<stdio.h>
#include<stdlib.h>

void parse(char record[], int *acct, float *amnt) {
        char *end;
        char acctarr[10], amntarr[10];
        sscanf (record, "%d %f", acct, amnt);
        return;
}
10 100.0 
20 -50.5 
10 -20.0
bank: linked.o ssv.o main.o
        gcc -o bank linked.o ssv.o main.o