Comment utiliser les en-têtes C de libgit2 sans obtenir cette erreur?

J’ai tout pris de include / git2 à / usr / include, puis j’ai essayé de comstackr le programme suivant:

#include  #include  int main(void) { puts("Hello, world!"); return 0; } 

Lorsque je comstack ceci avec GCC, j’obtiens l’erreur suivante:

 maxwell@UNIX-PC:~$ gcc ok.c In file included from /usr/include/common.h:16:0, from /usr/include/repository.h:10, from ok.c:2: /usr/include/inttypes.h:33:2: error: #error "Use this header only with Microsoft Visual C++ comstackrs!" In file included from /usr/include/inttypes.h:46:0, from /usr/include/common.h:16, from /usr/include/repository.h:10, from ok.c:2: /usr/include/stdint.h:33:2: error: #error "Use this header only with Microsoft Visual C++ comstackrs!" In file included from /usr/include/inttypes.h:46:0, from /usr/include/common.h:16, from /usr/include/repository.h:10, from ok.c:2: /usr/include/stdint.h:89:30: error: expected '=', ',', ';', 'asm' or '__atsortingbute__' before 'int64_t' /usr/include/stdint.h:90:30: error: expected '=', ',', ';', 'asm' or '__atsortingbute__' before 'uint64_t' /usr/include/stdint.h:101:1: error: unknown type name 'uint64_t' /usr/include/stdint.h:111:1: error: unknown type name 'uint64_t' /usr/include/stdint.h:124:1: error: unknown type name 'uint64_t' In file included from /usr/include/common.h:16:0, from /usr/include/repository.h:10, from ok.c:2: /usr/include/inttypes.h:282:1: error: unknown type name '_inline' /usr/include/inttypes.h:284:11: error: expected '=', ',', ';', 'asm' or '__atsortingbute__' before '__cdecl' /usr/include/inttypes.h:284:11: error: unknown type name '__cdecl' 

Je vois l’erreur qui dit uniquement d’utiliser inttypes.h uniquement avec Visual Studio, alors comment appeler repository.h à partir d’un programme compilé avec GCC? Je souhaite vraiment utiliser certaines structures de données définies dans repository.h. Une idée de ce que je fais mal?

Pour mémoire, vous devez utiliser le système de construction pour installer les en-têtes. Ces en-têtes ne sont pas conçus pour être inclus eux-mêmes. Si vous voulez utiliser libgit2, vous devez inclure git2.h

Il semble que certains fichiers d’en-tête ont été écrasés lorsque vous avez copié tout le contenu de include / git2 vers / usr / include.

 In file included from /usr/include/common.h:16:0, from /usr/include/repository.h:10, from ok.c:2: /usr/include/inttypes.h:33:2: error: #error "Use this header only with Microsoft Visual C++ comstackrs!" 

La bonne approche consiste à utiliser l’option -Iinclude_path de gcc pour inclure les autres fichiers d’en-tête, et à utiliser “-D macro_def” pour définir les macros à utiliser avec le préprocesseur.

 gcc -I repository_h_path -D some_macro ok.c 

Vous voudrez peut-être faire référence au chemin de recherche dans la documentation de gcc.