尝试使用git_clone函数导致段错误

时间:2013-06-05 05:32:21

标签: c segmentation-fault shared-libraries libgit2

这是我的代码:

#include <git2.h>
#include <dlfcn.h>

int main(void) {
    void *libgit2;
    int (*racket_git_clone)();
    git_repository **out;
    const git_clone_options *options;

    libgit2 = dlopen("libgit2.so", RTLD_LAZY);
    racket_git_clone = dlsym(libgit2, "git_clone");
    (*racket_git_clone)(out, "https://github.com/lehitoskin/racketball", "/home/maxwell", options);

    return 0;
}

无从何处开始。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

从哪里开始是对C语言的回顾,因为看起来你还没有理解指针的使用。

你传入一个未初始化的指针作为选项,这意味着它指向一些任意内存,并将导致段错误。选项结构需要是指向堆栈中某个数据结构的指针。

您还传入另一个未初始化的指针作为输出参数,这将导致另一个段错误。指针在那里,所以库可以写入你的变量,所以你需要告诉它它们在哪里。

git_repository *repo;
git_clone_options opts = GIT_CLONE_OPTIONS_INIT;

git_clone(&repo, "source", "dest", &opts);

看看libgit2 repo中的示例,Ben在http://ben.straub.cc/上有一些关于库使用情况的博客文章。