如何使用libgit';s git_存储库_在d中打开
我正试图使用d区的图书馆。我总是在程序退出时出现分段错误。当我打开和关闭存储库时,该错误不会在退出之前发生。这似乎是垃圾收集器的问题,但是手动禁用垃圾收集器(GC.disable();)似乎根本不会影响结果。释放(git_repository_free(repo))似乎也没有效果 下面是一些示例代码:如何使用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
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
附加说明:我试着使用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()
并使用函数修复代码。我将把正式的答复留给你。