2

私はしばらくの間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ヘッダーで定義されているため、それ自体で機能しますが、2番目の行はリンク時に失敗します):

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
4

1 に答える 1

6

この問題に遭遇したようです。

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

ここから提案を試すことができます:

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

MSVCツールチェーンを使用してWindowsでビルドする場合、デフォルトのビルドでは__stdcall規則が使用されます。ただし、これはヘッダーファイルには反映されないため、その方法でビルドされたlibgit2と正常にリンクできるようにするには、独自のビルドでも/Gzコンパイラオプションを使用する必要があります。これが不可能または望ましくない場合は、最初のcmakeを実行するときに-DSTDCALL=OFFオプションを設定します。

于 2013-02-13T19:24:58.803 に答える