提问人:ErrorEliminator 提问时间:5/31/2023 更新时间:5/31/2023 访问量:57
如何修复我的 C 程序中未解决的引用错误 [已关闭]
How to fix unresolved reference error in my C program [closed]
问:
我刚刚学习了 C 语言中的多文件编译并尝试了一个测试问题,但即使在遵循所有说明后,我在编译时仍然遇到同样的错误。我的程序以数组的形式获取学生对测试的响应(这是在单独的 .c 文件中为每个学生完成的),然后将其与主文件中声明的答案键进行匹配。我定义了一个函数 answer(),它将问题编号作为参数并返回学生对该问题的回答。
每个文件中的代码如下
主文件 (checkanswer.c)
#include <stdio.h>
#include "answer.h"
int main()
{
int anskey[4]={5,10,0,4}, score=0;
for (int i=0;i<3;i++)
{
if (anskey[i]==answer(i+1))
{
score+=1;
}
}
printf("The score of student is %d",score);
}
student1.c
#include "answer.h"
int answer(int qno)
{
int ans[4] = {15,10,2,4};
return ans[qno-1];
}
答案.h
int answer(int qno);
为了进行多文件编译,我按照说明使用 -c 标志从两个 .c 文件生成 .o 文件,然后使用 -o 编译并给出可执行文件。
我在终端中运行了以下内容
gcc -c checkanswer.c
gcc -c student1.c
gcc -o student1.o checkanswer.o
./a.out
这给了我一个错误,指出“未解析的答案引用”
另外,我尝试使用
gcc checkanswer.c student1.c
它按预期工作。
因此,有人可以阐明我的代码出了什么问题以及是什么使第二种方法起作用。
答:
第一:GCC 代表“output”,它是输出文件的名称
从:-o
man gcc
-o 文件 将输出放在文件文件中。无论生成哪种类型的输出,无论是可执行文件、目标文件、汇编文件还是预处理的 C 代码,这都适用。
如果未指定 -o,则默认将可执行文件放在 a.out 中,将 source.suffix 的目标文件放在 source.o 中,将其汇编器文件放在 source.s 中,将预编译的头文件放在 source.suffix.gch 中,并将所有预处理的 C 源代码放在标准输出上。
您应该通过 runninh 来消除此错误(您可以替换为 或gcc -o NAME student1.o checkanswer.o
NAME
a.out
my_program
)
GCC 创建一个目标文件 (.o),它在某种程度上是 .c 文件的编译版本。-c
评论
a.out
-o NAME
评论
gcc -o student1.o checkanswer.o
gcc
student1.o
gcc -o myprog student1.o checkanswer.o
myprog
student1
-o
-o
-o
gcc student1.o checkanswer.o
a.out
-o