2014-09-02 4 views
0

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>.

답변

2

정상적인 사용에는 git2.h이 (가) 있습니다. 일부 기능은 sys/ 디렉토리 아래에 보관되어 더 고급 사용으로 간주됩니다.

git2.hgit2/odb_backend.h이 포함되지 않았으므로 특히 버그 일 수 있습니다. 지금은 수동으로 포함시킬 수 있습니다.

+0

네, 생각합니다. 고마워요. 나는'#include '를 추가하고 예제 코드가 작동했다. 나는 또한 https://github.com/libgit2/libgit2/issues/2551을 제출했다. – Yash