libgit2没有在Windows上以发布模式构建

时间:2018-03-21 22:17:17

标签: libgit2

我正在尝试在Windows 10 x64上以发布模式构建libgit2。

在我的libgit2目录中,运行以下命令:

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .

据我所知,它仍然以调试模式构建。至少当我将它链接到Visual Studio项目时,它会在调试断言上失败。

我也试过

cmake -G "Visual Studio 12 Win64" -DCMAKE_BUILD_TYPE=Release ..

无济于事。

我甚至尝试通过在我的解决方案中包含所有.vxcproj文件并手动在发布模式下构建它们来使其工作。没有运气了。

它应该像传递-DCMAKE_BUILD_TYPE=Release旗帜那样简单,还是我错过了什么?

我真正想做的就是让git2.dll在运行时保持调试断言的爆炸性。至少我认为这就是正在发生的事情。

以下是我尝试从Visual Studio 2013项目运行的代码,我在git2.lib中链接并引用git2.dll提到here

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
    const char *path = "C:/Dev/testing/brokenmerge";
    git_repository *repo = NULL;

    git_repository_open(&repo, path);

    printf("Opened repo: '%s'\n", path);

    git_repository_free(repo);

    return 0;
}

其中stdafx.h包含<git2.h>

我在git_repository_open

中收到以下断言错误
Assertion failed!

Program: C:\Dev\testing\libgit2tests\Debug\git2.dll
File: C:\Dev\libgit2\src\global.c
Line: 202

Expression: git_atomic_get(&git__n_inits) > 0

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts

因此,除非我错误地链接到git2或我做错了其他事情,否则我不知道如何继续。

谢谢!

2 个答案:

答案 0 :(得分:1)

在调用任何其他libgit2函数之前,您需要调用git_libgit2_init。这将设置库所需的全局状态。

答案 1 :(得分:1)

我也有这种痛苦。 答案是

cmake --build . --config Release

请参阅CMAKE_BUILD_TYPE not being used in CMakeLists.txt