我有一种情况。我在用extern关键字声明的头文件中有一些函数。我有他们的定义在一个C文件。这两个文件位于相同的目录中。我制作了一个visual studio项目并包含头文件。当我使用在头文件中声明的函数。该程序给我链接错误(LNK2019)。我在包含其他目录中插入包含头文件和C文件的目录的路径。但问题仍然存在。我该如何解决这个问题?C程序链接错误?
谢谢
我有一种情况。我在用extern关键字声明的头文件中有一些函数。我有他们的定义在一个C文件。这两个文件位于相同的目录中。我制作了一个visual studio项目并包含头文件。当我使用在头文件中声明的函数。该程序给我链接错误(LNK2019)。我在包含其他目录中插入包含头文件和C文件的目录的路径。但问题仍然存在。我该如何解决这个问题?C程序链接错误?
谢谢
感谢大家。我发现这个问题,但上面的答案也非常有帮助。问题是我正在调用那些定义在.c
文件中的函数。但我在我的.cpp
文件中调用它。这是造成这个错误的原因。我将.cpp文件的扩展名更改为.c文件,现在它工作正常。 Thnaks
函数不需要用extern关键字声明。这是多余的。
您的错误消息告诉你,你定义的函数之一(不仅仅是声明)引用了一个extern变量,而是声明该变量的源文件(即,它在没有extern关键字的情况下被声明的地方)是不被链接。
源文件中的函数不使用除本地变量之外的任何变量。我试着评论整个功能代码。但它不起作用。 –
重要的是将.c
文件添加到项目/解决方案。这就是项目的目的:引用所有必要的实现文件(即.c
文件)。显然,你没有那样做。因此错误。
您不需要将标头文件(即.h
文件)添加到项目/解决方案。标题文件通常会添加到项目中以获得纯粹的便利,以便您可以在同一位置查看它们。否则,这是完全没有必要的。
假设xx.h
(你包括prog.c
其中)和xx.c
在C:\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中,正如其他人所说的,只需将源文件添加到您的项目。右键单击项目浏览器中的项目,“添加...”,“现有元素...”(或英语类似),然后浏览至该文件。
您是否将文件包含到解决方案中? – Jeeva
哪个文件,Header或C?我是否应该将它们包含在项目目录中的项目中? –
尝试在解决方案中包含头文件 – Jeeva