【问题标题】:C Program linking Error?C程序链接错误?
【发布时间】:2011-10-10 18:41:45
【问题描述】:

我有一个情况。我在头文件中有一些用 extern 关键字声明的函数。我在 C 文件中有它们的定义。这两个文件在同一个目录中。我做了一个视觉工作室项目并包含头文件。当我使用头文件中声明的函数时。该程序给了我链接错误(LNK2019)。我在包含附加目录中插入了包含头文件和 C 文件的目录的路径。但问题仍然存在。我该如何解决这个问题?

谢谢

【问题讨论】:

  • 您是否将该文件包含在您的解决方案中?
  • 哪个文件,Header 还是 C?我应该将它们包含在项目中还是应该将它们复制到项目目录中?
  • 尝试在解决方案中包含头文件
  • 当它显示链接错误时,表示您编译成功。所以,这可能不是路径设置的事情,而是——你有没有在你的项目中添加你的 C 文件?

标签: c visual-c++ linker linker-errors


【解决方案1】:

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

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

【讨论】:

  • 源文件中的函数不使用除本地变量外的任何变量。我尝试通过评论整个功能代码。但它没有用。
【解决方案2】:

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

【讨论】:

  • 我认为你是对的。确切地说,抱怨“找不到定义”的是链接器,而不是编译器。编译器可能会在“声明”中抱怨问题。
  • 哈哈,是的,你是对的,是链接器在抱怨。我应该说得更清楚。更新了我的答案
【解决方案3】:

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

您不需要将 header 文件(即.h 文件)添加到项目/解决方案中。通常将头文件添加到项目中只是为了方便,以便您可以在一个地方看到它们。否则完全没必要。

【讨论】:

    【解决方案4】:

    假设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 中,正如其他人所说,只需将源文件添加到您的项目中即可。在项目资源管理器中右键单击您的项目,“添加...”,“现有元素...”(或类似英文),然后浏览到该文件。

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多