0

这是我的代码:

#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;
}

不知道从哪里开始。有任何想法吗?

4

1 回答 1

3

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

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

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

git_repository *repo;
git_clone_options opts = GIT_CLONE_OPTIONS_INIT;

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

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

于 2013-06-05T08:47:19.563 回答