这是我的代码:
#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;
}
无从何处开始。有什么想法吗?
答案 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/上有一些关于库使用情况的博客文章。