【发布时间】:2014-09-02 08:51:37
【问题描述】:
我开始实施一个大型程序。但是我遇到了一个大问题。所以这是我程序的非常简化的代码。我的函数有一个单独的 .c 文件,它是 normal.c 主程序是 main.c 并且我已将这两个与 cal.h 头文件。
main.c
#include <stdio.h>
#include "cal.h"
void main()
{
int num1, num2, ans;
num1=5;
num2=5;
ans=add(num1, num2);
printf("%d" ,ans);
}
正常的.c
#include "cal.h"
int add(int num1, int num2)
{
return num1+num2;
}
cal.h
#ifndef CAL_H_INCLUDED
#define CAL_H_INCLUDED
#include <errno.h>
int add(int num1, int num2);
#endif // CAL_H_INCLUDED
但是当我编译它时,它给出了错误 ..\main.c|10|未定义对“添加”的引用|
我在 Windows 8.1 中使用 CodeBlocks v.13.12 对此问题的任何答案都非常感谢。我也尝试过使用 CodeLite,但发生了同样的错误。谢谢!
【问题讨论】:
-
链接文件时,是否包含
normal.o? -
不,我没有。很抱歉,因为我是 C 新手,所以我不知道使用
.o文件。解释将是一个很大的帮助! -
我不知道 CodeBlocks 是如何工作的,但这里通常是 C 编译的工作原理。每个 .c 文件分别编译为一个 .o 文件(“目标文件”)。所以你的main.c会被编译成main.o,而normal.c会被编译成normal.o。这些都不是可执行的,也不是完整的程序。然后,将两个目标文件链接在一起。在这种情况下,“链接”是一个技术术语,与您的使用不同——它是链接器执行的一个步骤。链接器生成您的实际可执行文件。通常 IDE 会自动链接同一项目中的任何 .c 文件。
-
是的,我知道了,但这似乎没有链接这两个文件。否则,
add不能未定义。有什么建议可以解决这个问题?
标签: c function codeblocks undefined-reference