访问libgit2中的git“u odb”writepack字段会出现错误;取消引用指向不完整类型的指针“;

访问libgit2中的git“u odb”writepack字段会出现错误;取消引用指向不完整类型的指针“;,c,libgit2,C,Libgit2,我使用的是libgit2,我想向使用git\u repository\u odb创建的odb写入一个包文件。所以我调用git\u odb\u write\u pack并初始化一个*git\u odb\u writepack。然后,当我试图访问writepack结构的字段时,我得到一个编译器错误“取消对不完整类型的指针引用”。代码如下: #include <stdio.h> #include <git2.h> void check_error(int code, char

我使用的是libgit2,我想向使用
git\u repository\u odb
创建的odb写入一个包文件。所以我调用
git\u odb\u write\u pack
并初始化一个
*git\u odb\u 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;
}

我使用的是libgit2版本0.21.0。我不熟悉C和libgit2,所以我可能在做一些愚蠢的事情。我的理解是,这个“取消引用”错误意味着我未能定义或包含struct或typedef。然而,我认为libgit2只需要一个include,
#include
正常使用由
git2.h
覆盖。一些功能保存在
sys/
目录下,以表明它被认为是更高级的用法


这看起来特别像是一个bug,因为
git2.h
不包括
git2/odb_backend.h
。现在,您只需手动添加即可。

是的,我想就是这样了,谢谢。我添加了
#include
,我的示例代码成功了。我也提交了
$ 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