Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序链接错误?_C_Visual C++_Linker_Linker Errors - Fatal编程技术网

C程序链接错误?

C程序链接错误?,c,visual-c++,linker,linker-errors,C,Visual C++,Linker,Linker Errors,我有个情况。我在头文件中有一些函数是用extern关键字声明的。我在C文件中有它们的定义。这两个文件位于同一目录中。我制作了一个VisualStudio项目并包含了头文件。当我使用头文件中声明的函数时。程序给出了链接错误(LNK2019)。我在include additional目录中插入了包含头文件和C文件的目录的路径。但问题仍然存在。我如何解决这个问题 谢谢函数不需要用extern关键字声明。这是多余的 您的错误消息告诉您,您定义的函数之一(不仅仅是声明)正在引用外部变量,但声明该变量的源文

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


谢谢

函数不需要用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文件?源文件中的函数不使用除本地变量以外的任何变量。我试着对整个函数代码进行注释。但没用,我想你是对的。确切地说,抱怨“找不到定义”的是链接器,而不是编译器。编译器可能会在“声明”中抱怨问题。哈哈,是的,你是对的,是链接器在抱怨。我应该说得更清楚。更新了我的答案