3

样本1.c

#include "stdio.h"
int f1(int x, int y)
{
  printf("%d %d", x, y);
  return x+y;
}

样本2.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

有人可以在这方面帮助我吗?

4

5 回答 5

5
  1. 不要使用 Turbo C 编译器……它已经死了。
  2. 您需要将两个编译器对象链接到单个可执行文件。
于 2009-07-22T10:52:36.633 回答
3

Turbo C 真的是一个很老的产品了;您可能需要考虑升级。

在 C 世界中,您需要将各个 C 文件编译为目标文件,然后将目标文件链接在一起。我没有使用 Turbo C,但我猜想有一些机制可以“将文件添加到项目”或类似的机制来关联多个文件。

此外,虽然您所拥有的完全合法,但在任何实际产品上,我强烈建议您制作头文件而不是使用extern. 使用头文件,您可以声明相同的原型并将其包含在两个 .c 文件中,如果您的原型与函数声明不完全匹配,编译器将能够警告您。正如您目前所写的那样,您可能不会在函数的参数中发现错误,并且您会从中得到难以诊断的行为。

于 2009-07-22T12:56:54.350 回答
1

您是否将两个目标文件链接在一起?链接器的命令行是什么?

于 2009-07-22T10:52:24.060 回答
0

djgpp 是 tc 的一个很好的替代品

是 gcc 运行 dos

于 2009-10-26T13:58:26.400 回答
0

您必须编译这两个并将它们链接到同一个程序中,这是您所做的吗?

于 2009-07-22T10:52:56.227 回答