C程序链接错误?
我有个情况。我在头文件中有一些函数是用extern关键字声明的。我在C文件中有它们的定义。这两个文件位于同一目录中。我制作了一个VisualStudio项目并包含了头文件。当我使用头文件中声明的函数时。程序给出了链接错误(LNK2019)。我在include additional目录中插入了包含头文件和C文件的目录的路径。但问题仍然存在。我如何解决这个问题C程序链接错误?,c,visual-c++,linker,linker-errors,C,Visual C++,Linker,Linker Errors,我有个情况。我在头文件中有一些函数是用extern关键字声明的。我在C文件中有它们的定义。这两个文件位于同一目录中。我制作了一个VisualStudio项目并包含了头文件。当我使用头文件中声明的函数时。程序给出了链接错误(LNK2019)。我在include additional目录中插入了包含头文件和C文件的目录的路径。但问题仍然存在。我如何解决这个问题 谢谢函数不需要用extern关键字声明。这是多余的 您的错误消息告诉您,您定义的函数之一(不仅仅是声明)正在引用外部变量,但声明该变量的源文
谢谢函数不需要用extern关键字声明。这是多余的
您的错误消息告诉您,您定义的函数之一(不仅仅是声明)正在引用外部变量,但声明该变量的源文件(即声明该变量时不使用extern关键字)未被链接 是否将包含函数定义的C源文件包含到visual studio项目文件中?我相信链接器正在抱怨它找不到函数定义。重要的是将
.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
,情况也是如此
在VisualStudio中,正如其他人所说,只需将源文件添加到项目中。在项目浏览器中右键单击项目,“添加…”、“现有元素…”(或类似的英文版本),然后浏览到该文件。谢谢大家。我发现了这个问题,但上面的答案也很有帮助。问题是我调用了那些定义在
.c
文件中的函数。但是我在.cpp
文件中调用它。这就是这个错误的原因。我将.cpp文件的扩展名改为.c文件,现在它工作正常。Thnaks您是否将该文件包含到解决方案中?哪个文件、头文件或C?是否应将它们包含在的项目中?是否应将它们复制到项目目录中?请尝试将头文件包含在解决方案中当显示链接错误时,表示编译成功。因此,这可能不是路径设置的业务,但是--您是否在项目中添加了C文件?源文件中的函数不使用除本地变量以外的任何变量。我试着对整个函数代码进行注释。但没用,我想你是对的。确切地说,抱怨“找不到定义”的是链接器,而不是编译器。编译器可能会在“声明”中抱怨问题。哈哈,是的,你是对的,是链接器在抱怨。我应该说得更清楚。更新了我的答案