【问题标题】:C++ #include external function issueC++ #include 外部函数问题
【发布时间】:2011-05-16 19:55:37
【问题描述】:

我是一个真正的初学者,我正在使用 Visual Studio 使用 C++ 进行编程。 我有一个简单的 cpp 代码,它可以回忆一些用 .c 和 .h 文件编写的函数。我通过#include 指令包含了该文件,并且IDE“看到”了该功能。 当我编译时,我得到了这个

错误 7 错误 LNK2019:函数 _main D:\Cprojects\Pencil\Pencil\Pencil.obj Pencil 中引用的未解析外部符号 _IMUsendAccelToFIFO

我在这里错过了什么?

谢谢大家!

【问题讨论】:

  • 你链接正确吗?好像是链接器错误,是不是把.c文件生成的.o文件传给了链接器?
  • @Ass3mbler:如果他使用 VS,如果是他自己的代码,应该为他处理。我认为他没有将所需的库链接到他的项目可能是一个更大的问题。
  • In silico:它与 C 相关(阅读他的问题)。

标签: c++ c function linker include


【解决方案1】:

这是一个链接器错误,而不是编译器错误。编译器很高兴,它在 .h 文件中看到了函数的声明。链接器不是,它找不到函数的定义

将 .c 文件添加到您的项目中。

【讨论】:

  • .c 文件在项目中作为“外部依赖项”已经存在,当我尝试将它们添加为“源文件”时,我得到:错误 1 ​​错误 C1853:'Debug\Pencil.pch'预编译的头文件来自以前版本的编译器,或者预编译的头文件是 C++,而您正在从 C 中使用它(反之亦然) d:\cprojects\pencil\pencil\imufifo.c 1 1 Pencil
  • @Stefano:然后简单地删除旧的.pch 文件(或完全禁用预编译头文件)。
  • 在解决方案资源管理器窗口中右键单击 .c 文件。属性、C/C++、预编译头文件,将“创建/使用”更改为不使用。
【解决方案2】:

你在使用ghettopilot吗?这是我在网上可以找到的关于您缺少的功能的唯一参考。如果是,则需要在链接选项中包含该库的 .lib 文件。

【讨论】:

  • 不,我只是从我正在使用的系统的供应商那里导入一些库,所以它们应该可以工作
  • @Stefano:看看您的供应商是否有关于如何设置它的教程。
  • 您缺少的功能来自您的供应商,他们看起来正在使用我提到的库。确保您在所有供应商库中都进行了链接。
【解决方案3】:

默认情况下,Visual Studio 会将 .c 文件编译为 C,将 .cpp 文件编译为 C++,这可能会导致麻烦,因为如果要从 .cpp 文件调用 .c 文件中定义的函数,则必须将extern "C" { } 中的标头,因为编译器将期望所有未声明 extern "C" 的函数来自 C++。这是因为一个称为名称修饰的实现细节。或者,您可以在项目设置中强制将所有文件编译为 C 或 C++。

【讨论】:

    【解决方案4】:

    如果您在 Visual Studio 中遇到错误,您实际上可以在谷歌上搜索错误代码,您将获得相当广泛的信息。在这种情况下,谷歌搜索 LNK2019 会将此 MSDN page 作为第一次点击,它还提供了一些有关如何获取错误的示例。
    您的供应商应该为您提供了一些 .lib 文件(通常位于名为 lib 的文件夹中?)。确保通过以下方式将这些添加到项目中:

    • 项目 > 属性 > 配置属性 > 链接器 > 输入 > 其他依赖项

    您还可以查看供应商是否有任何“入门”信息,其中说明了您必须在项目中包含哪些依赖项。
    如果您不确定编译器和链接器的作用,pick up a book 解释它,或浏览一些 free alternatives

    【讨论】:

      【解决方案5】:

      解决了!非常感谢! 我正在使用的库需要构建。我试过了,但我无法构建它们,因为我曾经得到“堆空间”错误!

      我安装了 Visual Studio 2005(代码由供应商生成)并且第一次尝试就可以使用!可能存在一些向后兼容性问题..

      【讨论】:

        猜你喜欢
        • 2019-05-18
        • 2013-01-07
        • 1970-01-01
        • 2010-12-17
        • 1970-01-01
        • 1970-01-01
        • 2020-08-10
        • 1970-01-01
        • 2014-03-02
        相关资源
        最近更新 更多