Я использую libgit2 и хочу записать пакетный файл в odb, созданный с помощью git_repository_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, поэтому я могу делать что-то глупое. Насколько я понимаю, эта ошибка «разыменования» означает, что мне не удалось определить или включить структуру или typedef. Однако я думал, что libgit2 требует только одного включения, #include <git2.h>
.