Qt Creator:未解析的外部符号

Posted

技术标签:

【中文标题】Qt Creator:未解析的外部符号【英文标题】:Qt Creator: Unresolved External Symbol 【发布时间】:2013-02-13 18:51:06 【问题描述】:

我一直在为 Qt 中的一个错误而苦苦挣扎:

mainwindow.obj:-1: error: LNK2019: unresolved external symbol _git_repository_open referenced in function "public: __thiscall MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QAE@PAVQWidget@@@Z)

这显然是一个链接错误,但我无法弄清楚是什么原因造成的。这都是在 Windows 上编译的,我的目标库是 libgit2。

我使用 MVSC2010(我也用于我的 Qt 构建)编译了 libgit2,然后将外部库添加到我的 Qt 项目中。包含被确认没有问题,但库没有正确链接。由于 libgit2 是一个 C 库,我尝试将该库包含在 extern 块中(也没有 exern 块),但无济于事:

extern "C" 
    #include  <git2.h>

另外,函数在lib文件中:

dumpbin /EXPORTS git2.lib
...
_git_repository_open@8
...

引发错误的相关行(如果第一行单独工作,因为它是在 git 标头中定义的,但第二行在链接时失败):

git_repository *repo;
git_repository_open(&repo, "/opt/libgit2-test/.git");

相关的qt.pro文件行:

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/libgit2/lib/ -lgit2
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/libgit2/lib/ -lgit2d
else:unix: LIBS += -L$$PWD/libgit2/lib/ -lgit2

INCLUDEPATH += $$PWD/libgit2/include
DEPENDPATH += $$PWD/libgit2/include

【问题讨论】:

#include 包括标题,它不链接到库。您是否将项目设置为实际链接到库?此外,您不太可能需要 extern "C" 块。现在的标头都知道 C++,您不应该尝试手动执行此操作。在 libgit2 标头中,如果您检查它们,您将看到 #ifdef __cplusplus 守卫。所以你应该从你的代码中删除extern "C" 块。 Nikos,感谢您的回复。我确实将库和头文件添加到项目文件中,如果我重命名任何 LIBS 定义,它会说它找不到 lib 或 .h 文件,所以它似乎找到了这两个文件正确。不幸的是,删除 extern 没有帮助。 您是否删除了extern "C" 块?你不应该为 libgit2 使用一个。 另外,请向我们展示您调用 git_repository_open() 的代码行。 【参考方案1】:

您似乎遇到了这个问题:

https://github.com/libgit2/libgit2/issues/741

你可以试试这里的建议:

https://github.com/libgit2/libgit2/pull/749#issuecomment-6434565

在 Windows 上使用 MSVC 工具链构建时,默认构建 使用 __stdcall 约定。然而这并没有体现在 头文件,因此您必须在自己的文件中使用 /Gz 编译器选项 构建以及能够成功地与构建的 libgit2 链接 那样。如果这不可能或不可取,请设置 执行初始 cmake 时的 -DSTDCALL=OFF 选项。

【讨论】:

我只想告诉你,你是一个了不起的人。这正是问题所在。我刚刚开始学习 Qt,所以我在这方面想通了,但这完美地解决了它。再次感谢您的帮助。

以上是关于Qt Creator:未解析的外部符号的主要内容,如果未能解决你的问题,请参考以下文章

Qt Creator LNK2019:使用 OpenCV 无法解析的外部符号

Qt Creator 调试器未显示返回值

Qt 与 OpenCV:LNK2019:未解析的外部符号和未找到文件 mainwindow.obj

Windows中的Qt Creator - 我如何知道正在使用哪个编译器?

QT-creator 中架构 x86_64 的未定义符号

将 QCharts 与 Visual Studio 2015 一起使用时未解析的外部符号