2011-07-22 112 views
1

我有一种情况。我在用extern关键字声明的头文件中有一些函数。我有他们的定义在一个C文件。这两个文件位于相同的目录中。我制作了一个visual studio项目并包含头文件。当我使用在头文件中声明的函数。该程序给我链接错误(LNK2019)。我在包含其他目录中插入包含头文件和C文件的目录的路径。但问题仍然存在。我该如何解决这个问题?C程序链接错误?

谢谢

+0

您是否将文件包含到解决方案中? – Jeeva

+0

哪个文件,Header或C?我是否应该将它们包含在项目目录中的项目中? –

+0

尝试在解决方案中包含头文件 – Jeeva

回答

0

感谢大家。我发现这个问题,但上面的答案也非常有帮助。问题是我正在调用那些定义在.c文件中的函数。但我在我的.cpp文件中调用它。这是造成这个错误的原因。我将.cpp文件的扩展名更改为.c文件,现在它工作正常。 Thnaks

0

函数不需要用extern关键字声明。这是多余的。

您的错误消息告诉你,你定义的函数之一(不仅仅是声明)引用了一个extern变量,而是声明该变量的源文件(即,它在没有extern关键字的情况下被声明的地方)是不被链接。

+0

源文件中的函数不使用除本地变量之外的任何变量。我试着评论整个功能代码。但它不起作用。 –

0

您是否将包含函数定义的C源文件包含到Visual Studio项目文件中?我相信链接器抱怨找不到函数定义

+0

我认为你是对的。确切地说,谁抱怨'找不到定义'是链接器而不是编译器。编译器可能会在“声明”中抱怨问题。 – Stan

+0

哈哈,是的,你是对的,它是抱怨的连接器。我应该说得更清楚。更新了我的答案 – wschang

0

重要的是将.c文件添加到项目/解决方案。这就是项目的目的:引用所有必要的实现文件(即.c文件)。显然,你没有那样做。因此错误。

您不需要将标头文件(即.h文件)添加到项目/解决方案。标题文件通常会添加到项目中以获得纯粹的便利,以便您可以在同一位置查看它们。否则,这是完全没有必要的。

0

假设xx.h(你包括prog.c其中)和xx.cC:\dev\c\libx

cl /I C:\dev\c\libx prog.c    C:\dev\c\libx\xx.c 
cl /I C:\dev\c\libx prog.c /link /LIBPATH:C:\dev\c\libx xx.obj 

同样的故事,如果你有一个LIB而不是OBJ

在Visual Studio中,正如其他人所说的,只需将源文件添加到您的项目。右键单击项目浏览器中的项目,“添加...”,“现有元素...”(或英语类似),然后浏览至该文件。