我在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 <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
答案 0 :(得分:5)
看起来你遇到了这个问题:
https://github.com/libgit2/libgit2/issues/741
您可以尝试这里的建议:
https://github.com/libgit2/libgit2/pull/749#issuecomment-6434565
在具有MSVC工具链的Windows上构建时,默认构建 使用__stdcall约定。然而,这并没有反映在 头文件,所以你必须使用自己的/ Gz编译器选项 构建以及能够成功链接libgit2构建 那样。如果这不可能或不可取,请设置 执行初始cmake时,-DSTDCALL = OFF选项。