我正在使用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>
。
答案 0 :(得分:2)
git2.h
涵盖了正常使用情况。某些功能保留在sys/
目录下,表示它被认为是更高级的用法。
这特别看起来可能是一个错误,因为git2.h
不包含git2/odb_backend.h
。现在你只需手动包含它。