如何使用libgit';s git_存储库_在d中打开

如何使用libgit';s git_存储库_在d中打开,d,libgit2,D,Libgit2,我正试图使用d区的图书馆。我总是在程序退出时出现分段错误。当我打开和关闭存储库时,该错误不会在退出之前发生。这似乎是垃圾收集器的问题,但是手动禁用垃圾收集器(GC.disable();)似乎根本不会影响结果。释放(git_repository_free(repo))似乎也没有效果 下面是一些示例代码: import std.stdio : writeln; import std.string : toStringz; import core.memory : GC; import deimo

我正试图使用d区的图书馆。我总是在程序退出时出现分段错误。当我打开和关闭存储库时,该错误不会在退出之前发生。这似乎是垃圾收集器的问题,但是手动禁用垃圾收集器(GC.disable();)似乎根本不会影响结果。释放(git_repository_free(repo))似乎也没有效果

下面是一些示例代码:

import std.stdio : writeln;
import std.string : toStringz;

import core.memory : GC;

import deimos.git2.types : git_repository;
import deimos.git2.repository : git_repository_open, git_repository_free;

void main() {
    GC.disable();
    git_repository *repo;
    git_repository_open(&repo, ".".toStringz());
    git_repository_free(repo);
    writeln("END");
}
输出:

$ ./gittest
END
zsh: segmentation fault (core dumped)  ./gittest
版本:

  • libgit2开发:0.22.1-0ubuntu3
  • libgit2:~>0.20.1
  • 配音:0.9.23-0
  • dmd箱:2.067.1-0
  • 库本图:15.04
我做错了什么?如果什么都不知道,那么bug的罪魁祸首(d、libgit2或libgit2 d绑定)能否被识别


附加说明:我试着使用dlibgit,发现它有令人难以置信的缺陷,主要是因为它看起来已经过时了。此问题涉及libgit2 d绑定。

根据我的评论升级:


libgit2 0.22.1需要在调用任何其他libgit2函数之前调用。由于D绑定适用于0.20.1,因此它们不提供此函数的绑定

您可以通过以下方法侵入到init/shutdown函数的绑定:

extern (C):
int git_libgit2_init();
int git_libgit2_shutdown();

根据我的评论:


libgit2 0.22.1需要在调用任何其他libgit2函数之前调用。由于D绑定适用于0.20.1,因此它们不提供此函数的绑定

您可以通过以下方法侵入到init/shutdown函数的绑定:

extern (C):
int git_libgit2_init();
int git_libgit2_shutdown();

libgit2 0.22.1需要在调用任何其他libgit2函数之前调用。由于D绑定适用于0.20.1,因此它们不提供此函数的绑定。这可能就是问题所在。我再挖一些,你说得对。这就是问题所在。添加
extern(C):int git_libgit2_init();int git_libgit2_shutdown()
并使用函数修复代码。我将把正式答案留给您。libgit2 0.22.1需要在调用任何其他libgit2函数之前调用。由于D绑定适用于0.20.1,因此它们不提供此函数的绑定。这可能就是问题所在。我再挖一些,你说得对。这就是问题所在。添加
extern(C):int git_libgit2_init();int git_libgit2_shutdown()
并使用函数修复代码。我将把正式的答复留给你。