libgit2를 사용 중이므로 git_repository_odb
으로 만든 odb에 팩 파일을 쓰려고합니다. 그래서 git_odb_write_pack
이라고하고 *git_odb_writepack
을 초기화합니다. 그런 다음 writepack 구조체의 필드에 액세스하려고하면 불완전한 형식의 포인터를 역 참조하는 컴파일러 오류가 발생합니다. 여기 코드는 다음과 같습니다 libgit2에서 git_odb_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;
}
은 그럼 컴파일 오류를 얻을 : 나는 버전 0.21.0을 libgit2 사용하고
$ 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
. 나는 C와 libgit2에 익숙하지 않기 때문에 어리석은 짓을할지 모른다. 내 이해가이 "dereferencing"오류가 정의하거나 구조체 또는 typedef 포함하지 못했습니다 의미합니다. 그러나 libgit2는 하나만 포함하면됩니다. #include <git2.h>
.
네, 생각합니다. 고마워요. 나는'#include'를 추가하고 예제 코드가 작동했다. 나는 또한 https://github.com/libgit2/libgit2/issues/2551을 제출했다. –
Yash