访问libgit2中的git_odb_writepack字段会出现错误"解除指向不完整类型的指针"

时间:2014-09-02 17:50:13

标签: c libgit2

我正在使用libgit2,我想将包文件写入使用git_repository_odb创建的odb。所以我致电git_odb_write_pack并初始化*git_odb_writepack。然后当我尝试访问writepack结构的一个字段时,我得到一个编译器错误"取消引用指向不完整类型的指针"。这是代码:

#include <stdio.h>
#include <git2.h>

void check_error(int code, char *action) {
    if (code) {
        printf("Error %d, %s\n", code, action);
        exit(1);
    }
}

static int my_git_transfer_progress_callback(const git_transfer_progress *stats, void *payload) {
    printf("Got transfer callback\n");
    return 0;
}

int main(int argc, char **argv) {
    int error;

    const char *repo_path = "/path/to/repo";
    git_repository *repo = NULL;
    error = git_repository_open(&repo, repo_path);
    check_error(error, "opening repo");

    git_odb *odb = NULL;
    error = git_repository_odb(&odb, repo);
    check_error(error, "initializing odb");

    git_odb_writepack *writepack = NULL;
    char *payload = "here's my payload";
    error = git_odb_write_pack(&writepack, odb, my_git_transfer_progress_callback, payload);
    check_error(error, "opening pack writing stream");

    printf("Address: %u\n", writepack->backend);  // <-- Line generating the error.

    return 0;
}

然后我编译并得到错误:

$ gcc -lgit2 writepack_error.c && LD_LIBRARY_PATH=/usr/local/lib ./a.out
writepack_error.c: In function 'main':
writepack_error.c:33: error: dereferencing pointer to incomplete type

我使用的是libgit2版本0.21.0。我是C和libgit2的新手,所以我可能会做些傻事。我的理解是这个&#34;解除引用&#34;错误意味着我无法定义或包含struct或typedef。但是我认为libgit2只需要一个包含#include <git2.h>

1 个答案:

答案 0 :(得分:2)

git2.h涵盖了正常使用情况。某些功能保留在sys/目录下,表示它被认为是更高级的用法。

这特别看起来可能是一个错误,因为git2.h不包含git2/odb_backend.h。现在你只需手动包含它。