Sample1.c
#include "stdio.h"
int f1(int x, int y)
{
printf("%d %d", x, y);
return x+y;
}
Sample2.c
#include "stdio.h"
extern int f1(int x,int y);
int main(void)
{
printf(" %d\n", f1(5,6));
return 0;
}
我试图在Turbo C / C ++编译器(Windows XP)上编译Sample1.c
文件然后编译Sample2.c
。它显示以下错误:
Compiling Sample2.c:
Linking Sample2.exe:
Linker Error : Undefined Symbol _f1 in module Sample2.c
有人可以帮我这方面吗?
答案 0 :(得分:5)
答案 1 :(得分:3)
Turbo C真的是一个很老的产品;你可能想考虑升级。
在C世界中,您需要将单个C文件编译为目标文件,然后将目标文件链接在一起。我没有使用Turbo C,但我猜想有一些机制可以“将文件添加到项目中”或类似的东西来关联多个文件。
此外,虽然你拥有的是完全合法的,但对于任何真正的产品,我强烈建议你制作一个头文件,而不是使用extern
。使用头文件,您可以声明相同的原型并将其包含在两个.c文件中,如果您的原型与您的函数声明不完全匹配,编译器将能够发出警告。正如您目前编写的那样,您可能不会在函数的参数中发现错误,并且您将从中获得难以诊断的行为。
答案 2 :(得分:1)
您是否将两个目标文件链接在一起?链接器的命令行是什么?
答案 3 :(得分:0)
你必须编译这两个并将它们链接到同一个程序中,那就是你做的吗?
答案 4 :(得分:0)
djgpp是tc
的良好替代品是gcc运行dos