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

标签 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;
}

不知道从哪里开始。有什么想法吗?

最佳答案

从哪里开始回顾一下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/

相关文章:

c++ - 共享库 libbar.so 静态链接到 libfoo.a,程序链接到 libbar.so 和 libfoo.so,会发生什么?

shared-libraries - ELF共享库

c++ - 释放指针时出现段错误

c - 使用 malloc 为上下文分配堆栈时的分段,而不是使用本地数组时的分段

c++ - std::string compare() 给出段错误:

c - 另一个共享库的 OCaml 共享库

c - 代码在输入和输出语句后退出

c - 忽略字符串中的逗号

c++ - 为什么我的 C/C++ header 解析器不工作?

c - JNI 将 Char* 二维数组传递给 JAVA 代码