0

总结:是否有任何关于如何构建使用libgit2 库的 Win32 C++ 控制台应用程序的小示例(源代码可在GitHub 上获得)?

我已经按照自述文件和 wiki 了解如何使用 CMake 在 Windows 上构建库,并且运行顺利(只有一个单元测试错误)。

现在,我想构建一个使用该库的简单控制台应用程序——使用 Microsoft Visual Studio C++ 2010(the.vcxprojthe.sln)。我在libgit2general.c示例中找到了代码,我想在我的 C++ 应用程序中做同样的事情。没有成功——我今天真的很傻……

我注意到有用于 C++ 和 Qt 的 libqgit2。纯 C++ 有类似的东西吗?或者有没有办法从 C++ 应用程序中使用 C 库?

更新:我已重命名general.cgeneral.cpp,添加了项目的 libgit2 包含路径和 .lib 文件的路径,更改#include <stdio.h>#include <cstdio>,并编译。出现以下链接错误:

1>------ Build started: Project: libgit2_general, Configuration: Debug Win32 ------
1>general.obj : error LNK2019: unresolved external symbol _git_repository_free referenced in function _main
1>general.obj : error LNK2019: unresolved external symbol _git_config_get_string referenced in function _main
1>general.obj : error LNK2019: unresolved external symbol _git_config_get_int32 referenced in function _main
1>general.obj : error LNK2019: unresolved external symbol _git_config_open_ondisk referenced in function _main
1>general.obj : error LNK2019: unresolved external symbol _git_strarray_free referenced in function _main
... etc.
1>general.obj : error LNK2019: unresolved external symbol _git_repository_open referenced in function _main
1>general.obj : error LNK2019: unresolved external symbol _giterr_last referenced in function "void __cdecl check_error(int,char const *)" (?check_error@@YAXHPBD@Z)
1>D:\Tutorial\libgit2_general\Debug\libgit2_general.exe : fatal error LNK1120: 56 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
4

2 回答 2

3

这强烈暗示我的调用约定不匹配。出于多种原因, libgit2__stdcall默认使用,而 Visual Studio 默认创建使用__cdecl调用约定的项目。虽然您的程序可以使用任一调用约定并使用不同的调用约定成功调用 libgit2,但最简单的解决方案可能只是对两者使用相同的调用约定。

当您配置 libgit2 时,您可以关闭该STDCALL标志,这将导致它发出一个使用__cdecl调用约定构建的库:

cmake %PATH_TO_LIBGIT2_SOURCE% -DTHREADSAFE=ON -DSTDCALL=OFF
cmake --build .
于 2013-06-05T14:46:42.960 回答
1

如果您从 CMake 生成项目,这有点令人惊讶,可能是您没有链接到libgit2.lib. 确保git2.dll在项目属性 -> 配置属性 -> 链接器 -> 输入 -> 附加依赖项中有。

链接到 git2.lib

于 2013-06-05T17:40:09.640 回答