这是我的代码:
#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;
}
不知道从哪里开始。有什么想法吗?
最佳答案
从哪里开始回顾一下C语言,看来你还没有理解指针的用法。
您传入一个未初始化的指针作为选项,这意味着它指向某个任意的内存片段,并且会导致段错误。选项结构需要是指向堆栈中某处数据结构的指针。
您还传递了另一个未初始化的指针作为输出参数,这将导致另一个段错误。指针在那里,因此库可以写入您的变量,因此您需要告诉它它们在哪里。
git_repository *repo;
git_clone_options opts = GIT_CLONE_OPTIONS_INIT;
git_clone(&repo, "source", "dest", &opts);
查看 libgit2 存储库中的示例,Ben 在 http://ben.straub.cc/ 上发表了一些关于库使用的博客文章.
关于c - 尝试使用 git_clone 函数导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16932222/