【问题标题】:Functions from external source in CPP not being found(Qt)未在 CPP 中找到来自外部源的函数(Qt)
【发布时间】:2018-04-26 12:25:08
【问题描述】:

在 Qt 中,我希望在单击按钮时运行特定的功能。所以我做了一个按钮并使用“connect()”函数来运行一些子程序“initializeButtonPushed”

void MainWindow::initializeButtonPushed(){
    initializePlatform();
}

足够简单。在文件“mainwindow.h”中有一行

#include "platform.h"

并且在platform.h里面是定义“void initializePlatform(void);”

在我的 c 源代码中,我还有一个 platform.c 文件,其中包含此函数的实际代码。

除此之外,我已经可以看到我的 Qt 项目的 .pro 文件包含了这些文件。

因此,鉴于此,编译器似乎应该能够找到这些文件,但是当我尝试编译我的代码时,我得到了错误:

undefined reference to 'initializePlatform()'
collect2:error: ld returned 1 exit status

我对cpp不太了解,我通常使用C,但这个程序需要Qt,所以也许我遗漏了一些东西,但我不明白为什么当我看到源文件时它说我的函数未定义作为我项目的一部分,并且知道它的代码在该文件中。

【问题讨论】:

  • 未定义的函数是initializePlatform() 您确定链接了定义该函数的目标文件吗?仅仅包括正确的标题是不够的。链接器需要函数 definition.

标签: c++ c qt


【解决方案1】:

你需要这个

extern "C"{

#include "platform.h"
}

这允许 c++ 编译器和链接器正确链接用 c 编写的函数

【讨论】:

  • 我明白了。即使 C 代码以仍然与 CPP 兼容的方式编写,这是我需要做的事情吗?难道只是因为文件扩展名是.c?
  • 否 - 这是因为 c++ 处理重载的方式。 en.wikipedia.org/wiki/Name_mangling
猜你喜欢
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多