1
我正在嘗試使用d中的libgit2庫。程序退出時,我總會遇到分段錯誤。在退出之前,當我打開和關閉存儲庫時,錯誤不會發生。看起來這是垃圾收集器的一個問題,但是手動禁用垃圾收集器(GC.disable();)似乎根本不會影響結果。釋放(git_repository_free(回購))似乎也沒有效果。如何在d中使用libgit的git_repository_open
這一些示例代碼:
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-dev的:0.22.1-0ubuntu3
- libgit2:〜> 0.20.1
- 配音:0.9.23-0
- DMD斌:2.067.1-0
- 的Kubuntu:15.04
什麼,如果有的話,我哪裏做錯了?如果沒有發現錯誤的罪魁禍首(d,libgit2或libgit2 d綁定)?
附加說明:我嘗試使用dlibgit,發現它是令人難以置信的越野車,主要是過時似乎。這個問題涉及libgit2 d綁定。
libgit2 0.22.1要求['git_libgit2_init']的呼叫(https://github.com/libgit2/libgit2#initialization )在任何其他libgit2函數被調用之前。由於D綁定爲0.20.1,因此它們不提供對此函數的綁定。這可能是問題。我會再挖掘一些。 – rcorre
你是對的。這是問題。添加'extern(C): int git_libgit2_init(); int git_libgit2_shutdown();'和使用函數修復代碼。我將給你留下正式的答案。 –