我正在尝试将libgit2 (1.5.0)集成到我的项目中。由于缺少类型定义,编译失败。
我的项目的CMakeLists.txt包括include目录和libgit2.a文件:
target_include_directories(myprj PUBLIC ../libgit2/src/libgit2-1.5.0/include)
set(myprj "${CMAKE_SOURCE_DIR}/lib/libgit2.a")
link_directories(myprj ${PROJECT_SOURCE_DIR}/lib)
target_link_libraries(myprj PUBLIC ${libgit} crypto ssl)下面的代码是我正在使用的代码的简化版本,但是它应该演示这个问题:
#include <git2.h>
git_reference *ref;
git_branch_t btype;
int code = git_branch_next(&ref, &btype, iterator);
if(code != 0)
return code;
char* name = ref->name;编译器出现错误时失败:
error: invalid use of incomplete typedef ‘git_reference’
char* name = ref->name
^~include目录定义类型,但stuct本身仅在src目录中定义。
libgit2-1.5.0/include/git2/types.h (来源)
typedef struct git_reference git_reference;libgit2-1.5.0/src/libgit2/refs.h(来源)
struct git_reference {
//...
};我试图通过将src dir导入到我的项目中来修复它,但是由于缺少包含,这是行不通的。
在Cmake进口:
target_include_directories(myprj PUBLIC ../libgit2/src/libgit2-1.5.0/src/libgit2)错误:
libgit2/src/libgit2-1.5.0/src/libgit2/common.h:10:10: fatal error: git2_util.h: File or directory not found
10 | #include "git2_util.h"发布于 2022-10-21 09:44:50
我认为这是故意的,使git_reference成为一个不透明的类型。然后,库作者可以随意更改它,而不会破坏兼容性。
要获取引用的名称,请使用git_reference_name而不是直接访问该字段:
const char* name = git_reference_name(ref);https://stackoverflow.com/questions/74151731
复制相似问题