Qt Creator:未解析的外部符号

我在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编译libgit2(我也用于我的Qt版本),然后将外部库添加到我的Qt项目中。 包含已被确认没有问题,但库没有正确链接。 由于libgit2是一个C库,我尝试将库包含在extern块中(也没有exern块)无济于事:

 extern "C" { #include  } 

此外,该函数位于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 

看起来你遇到了这个问题:

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

你可以试试这里的建议:

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

在具有MSVC工具链的Windows上构建时,默认构建使用__stdcall约定。 但是这并没有反映在头文件中,因此您必须在自己的构建中使用/ Gz编译器选项,以便能够成功链接到以这种方式构建的libgit2。 如果这不可能或不可取,请在执行初始cmake时设置-DSTDCALL = OFF选项。